You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2023/07/31 19:49:48 UTC

[libcloud] 02/03: Add a comment and some in-direct test for connection re-use / making sure self.connect() is only called if connection details (scheme, host, port) change.

This is an automated email from the ASF dual-hosted git repository.

tomaz pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/libcloud.git

commit ebecb9af9593ab639298b3f17373efa3056fb765
Author: Tomaz Muraus <to...@tomaz.me>
AuthorDate: Mon Jul 31 21:42:33 2023 +0200

    Add a comment and some in-direct test for connection re-use / making
    sure self.connect() is only called if connection details (scheme, host,
    port) change.
---
 libcloud/common/openstack.py           |  2 ++
 libcloud/test/common/test_openstack.py | 41 ++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/libcloud/common/openstack.py b/libcloud/common/openstack.py
index d63cddb7c..960b759af 100644
--- a/libcloud/common/openstack.py
+++ b/libcloud/common/openstack.py
@@ -362,6 +362,8 @@ class OpenStackBaseConnection(ConnectionUserAndKey):
         (self.host, self.port, self.secure, self.request_path) = result
         new_conn = (self.host, self.port, self.secure)
         if new_conn != prev_conn:
+            # We only call connect in case connection details have changed - this way we correctly
+            # re-use connection in case nothing has changed
             self.connect()
 
     def _populate_hosts_and_request_paths(self):
diff --git a/libcloud/test/common/test_openstack.py b/libcloud/test/common/test_openstack.py
index e10a7a1e1..2bfeb7640 100644
--- a/libcloud/test/common/test_openstack.py
+++ b/libcloud/test/common/test_openstack.py
@@ -76,6 +76,47 @@ class OpenStackBaseConnectionTest(unittest.TestCase):
             raw=False,
         )
 
+    @patch("libcloud.test.common.test_openstack.OpenStackBaseConnection.connect", Mock())
+    def test_connection_is_reused_when_details_dont_change(self):
+        url = "https://example.com"
+
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 1)
+
+        for index in range(0, 10):
+            self.connection._set_up_connection_info(url=url)
+            self.assertEqual(self.connection.connect.call_count, 1)
+
+    @patch("libcloud.test.common.test_openstack.OpenStackBaseConnection.connect", Mock())
+    def test_connection_is_not_reused_when_details_change(self):
+        url = "https://example.com"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 1)
+
+        url = "https://example.com"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 1)
+
+        url = "https://example.com:80"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 2)
+
+        url = "http://example.com:80"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 3)
+
+        url = "http://exxample.com:80"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 4)
+
+        url = "http://exxample.com:81"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 5)
+
+        url = "http://exxample.com:81"
+        self.connection._set_up_connection_info(url=url)
+        self.assertEqual(self.connection.connect.call_count, 5)
+
 
 if __name__ == "__main__":
     sys.exit(unittest.main())