From 76efdcadb8e8cb25e55902bceefcef5eb9cd7a34 Mon Sep 17 00:00:00 2001 From: asarfaty Date: Tue, 24 Dec 2019 10:06:41 +0200 Subject: [PATCH] Use updated search api path for version 3 & up Change-Id: Ibf1c1fc918998f6002e445ad53e32b2c5c54ac1c --- .../tests/unit/v3/policy/test_resources.py | 6 ++- vmware_nsxlib/tests/unit/v3/test_resources.py | 52 ++++++++++++++----- vmware_nsxlib/v3/lib.py | 16 +++++- vmware_nsxlib/v3/policy/__init__.py | 2 +- 4 files changed, 60 insertions(+), 16 deletions(-) diff --git a/vmware_nsxlib/tests/unit/v3/policy/test_resources.py b/vmware_nsxlib/tests/unit/v3/policy/test_resources.py index 747019c6..6ae0e228 100644 --- a/vmware_nsxlib/tests/unit/v3/policy/test_resources.py +++ b/vmware_nsxlib/tests/unit/v3/policy/test_resources.py @@ -5519,6 +5519,10 @@ class TestPolicyTier0PrefixList(NsxPolicyLibTestCase): class TestNsxSearch(NsxPolicyLibTestCase): + def setUp(self): + super(TestNsxSearch, self).setUp() + self.search_path = 'search/query?query=%s' + def test_nsx_search_by_realization(self): """Test search of resources with the specified tag.""" with mock.patch.object(self.policy_lib.client, 'url_get') as search: @@ -5529,7 +5533,7 @@ class TestNsxSearch(NsxPolicyLibTestCase): 'entity_type:%s' % (realized_id, realized_type)) self.policy_lib.search_resource_by_realized_id( realized_id, realized_type) - search.assert_called_with('search?query=%s' % query) + search.assert_called_with(self.search_path % query) class TestPolicyGlobalConfig(NsxPolicyLibTestCase): diff --git a/vmware_nsxlib/tests/unit/v3/test_resources.py b/vmware_nsxlib/tests/unit/v3/test_resources.py index 0d366c76..e25ec88f 100644 --- a/vmware_nsxlib/tests/unit/v3/test_resources.py +++ b/vmware_nsxlib/tests/unit/v3/test_resources.py @@ -1750,13 +1750,27 @@ class IpPoolTestCase(BaseTestResource): class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): + def setUp(self): + super(TestNsxSearch, self).setUp() + self.search_path = 'search?query=%s' + self.mock = mock.patch("vmware_nsxlib.v3.NsxLib.get_version", + return_value=self.get_nsxlib_version()) + self.mock.start() + + def tearDown(self): + self.mock.stop() + + @staticmethod + def get_nsxlib_version(): + return '2.5.0' + def test_nsx_search_tags(self): """Test search of resources with the specified tag.""" with mock.patch.object(self.nsxlib.client, 'url_get') as search: user_tags = [{'scope': 'user', 'tag': 'k8s'}] query = self.nsxlib._build_query(tags=user_tags) self.nsxlib.search_by_tags(tags=user_tags) - search.assert_called_with('search?query=%s' % query) + search.assert_called_with(self.search_path % query) def test_nsx_search_tags_scope_only(self): """Test search of resources with the specified tag.""" @@ -1764,7 +1778,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): user_tags = [{'scope': 'user'}] query = self.nsxlib._build_query(tags=user_tags) self.nsxlib.search_by_tags(tags=user_tags) - search.assert_called_with('search?query=%s' % query) + search.assert_called_with(self.search_path % query) def test_nsx_search_tags_tag_only(self): """Test search of resources with the specified tag.""" @@ -1772,7 +1786,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): user_tags = [{'tag': 'k8s'}] query = self.nsxlib._build_query(tags=user_tags) self.nsxlib.search_by_tags(tags=user_tags) - search.assert_called_with('search?query=%s' % query) + search.assert_called_with(self.search_path % query) def test_nsx_search_by_resouce_type_and_attributes(self): with mock.patch.object(self.nsxlib.client, 'url_get') as search: @@ -1783,7 +1797,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): exp_query = 'resource_type:%s AND color:%s' % ( resource_type, attributes['color']) search.assert_called_with( - 'search?query=%s' % exp_query) + self.search_path % exp_query) def test_nsx_search_by_resouce_type_only(self): with mock.patch.object(self.nsxlib.client, 'url_get') as search: @@ -1791,7 +1805,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): self.nsxlib.search_resource_by_attributes(resource_type) exp_query = 'resource_type:%s' % resource_type search.assert_called_with( - 'search?query=%s' % exp_query) + self.search_path % exp_query) def test_nsx_search_no_resource_type_fails(self): self.assertRaises(exceptions.NsxSearchInvalidQuery, @@ -1807,7 +1821,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): exp_query = 'resource_type:%s AND color:%s' % ( resource_type, attributes['color']) search.assert_called_with( - 'search?query=%s&cursor=50&page_size=100' % exp_query) + (self.search_path + '&cursor=50&page_size=100') % exp_query) def test_nsx_search_tags_tag_and_scope(self): """Test search of resources with the specified tag.""" @@ -1815,7 +1829,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): user_tags = [{'tag': 'k8s'}, {'scope': 'user'}] query = self.nsxlib._build_query(tags=user_tags) self.nsxlib.search_by_tags(tags=user_tags) - search.assert_called_with('search?query=%s' % query) + search.assert_called_with(self.search_path % query) def test_nsx_search_tags_and_resource_type(self): """Test search of specified resource with the specified tag.""" @@ -1826,7 +1840,7 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): # Add resource_type to the query query = "resource_type:%s AND %s" % (res_type, query) self.nsxlib.search_by_tags(tags=user_tags, resource_type=res_type) - search.assert_called_with('search?query=%s' % query) + search.assert_called_with(self.search_path % query) def test_nsx_search_tags_and_cursor(self): """Test search of resources with the specified tag and cursor.""" @@ -1834,7 +1848,8 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): user_tags = [{'scope': 'user', 'tag': 'k8s'}] query = self.nsxlib._build_query(tags=user_tags) self.nsxlib.search_by_tags(tags=user_tags, cursor=50) - search.assert_called_with('search?query=%s&cursor=50' % query) + search.assert_called_with( + (self.search_path + '&cursor=50') % query) def test_nsx_search_tags_and_page_size(self): """Test search of resources with the specified tag and page size.""" @@ -1842,7 +1857,8 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): user_tags = [{'scope': 'user', 'tag': 'k8s'}] query = self.nsxlib._build_query(tags=user_tags) self.nsxlib.search_by_tags(tags=user_tags, page_size=100) - search.assert_called_with('search?query=%s&page_size=100' % query) + search.assert_called_with( + (self.search_path + '&page_size=100') % query) def test_nsx_search_invalid_query_fail(self): """Test search query failure for missing tag argument.""" @@ -1872,8 +1888,8 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): query = self.nsxlib._build_query(tags=user_tags) results = self.nsxlib.search_all_by_tags(tags=user_tags) search.assert_has_calls([ - mock.call('search?query=%s' % query), - mock.call('search?query=%s&cursor=2' % query)]) + mock.call(self.search_path % query), + mock.call((self.search_path + '&cursor=2') % query)]) self.assertEqual(3, len(results)) def test_get_id_by_resource_and_tag(self): @@ -1911,6 +1927,18 @@ class TestNsxSearch(nsxlib_testcase.NsxClientTestCase): res_type, scope, tag, alert_multiple=True) +class TestNsxSearchNew(TestNsxSearch): + + def setUp(self): + + super(TestNsxSearchNew, self).setUp() + self.search_path = 'search/query?query=%s' + + @staticmethod + def get_nsxlib_version(): + return '3.0.0' + + class TransportZone(BaseTestResource): def setUp(self): diff --git a/vmware_nsxlib/v3/lib.py b/vmware_nsxlib/v3/lib.py index 85eec8f6..08b7a69c 100644 --- a/vmware_nsxlib/v3/lib.py +++ b/vmware_nsxlib/v3/lib.py @@ -14,6 +14,7 @@ # under the License. import abc +from distutils import version from oslo_log import log import six @@ -22,6 +23,7 @@ from vmware_nsxlib._i18n import _ from vmware_nsxlib.v3 import client from vmware_nsxlib.v3 import cluster from vmware_nsxlib.v3 import exceptions +from vmware_nsxlib.v3 import nsx_constants from vmware_nsxlib.v3 import utils LOG = log.getLogger(__name__) @@ -96,6 +98,10 @@ class NsxLibBase(object): def feature_supported(self, feature): pass + @abc.abstractmethod + def get_version(self): + pass + def build_v3_api_version_tag(self): return self.general_apis.build_v3_api_version_tag() @@ -123,6 +129,12 @@ class NsxLibBase(object): url += "&page_size=%d" % page_size return url + def _get_search_url(self): + if (version.LooseVersion(self.get_version()) >= + version.LooseVersion(nsx_constants.NSX_VERSION_3_0_0)): + return "search/query?query=%s" + return "search?query=%s" + # TODO(abhiraut): Revisit this method to generate complex boolean # queries to search resources. def search_by_tags(self, tags, resource_type=None, cursor=None, @@ -149,7 +161,7 @@ class NsxLibBase(object): query += " AND %s" % query_tags else: query = query_tags - url = self._add_pagination_parameters("search?query=%s" % query, + url = self._add_pagination_parameters(self._get_search_url() % query, cursor, page_size) # Retry the search in case of error @@ -186,7 +198,7 @@ class NsxLibBase(object): in attributes.items()]) query = 'resource_type:%s' % resource_type + ( " AND %s" % attributes_query if attributes_query else "") - url = self._add_pagination_parameters("search?query=%s" % query, + url = self._add_pagination_parameters(self._get_search_url() % query, cursor, page_size) # Retry the search in case of error diff --git a/vmware_nsxlib/v3/policy/__init__.py b/vmware_nsxlib/v3/policy/__init__.py index 337d8680..98529125 100644 --- a/vmware_nsxlib/v3/policy/__init__.py +++ b/vmware_nsxlib/v3/policy/__init__.py @@ -213,7 +213,7 @@ class NsxPolicyLib(lib.NsxLibBase): query = ('resource_type:GenericPolicyRealizedResource AND ' 'realization_specific_identifier:%s AND ' 'entity_type:%s' % (realized_id, realized_type)) - url = "search?query=%s" % query + url = self._get_search_url() % query # Retry the search on case of error @lib_utils.retry_upon_exception(exceptions.NsxSearchError,