Merge "add case-insensitive for find pods query"
authorSerena Feng <feng.xiaowei@zte.com.cn>
Tue, 12 Sep 2017 01:31:17 +0000 (01:31 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Tue, 12 Sep 2017 01:31:17 +0000 (01:31 +0000)
utils/test/testapi/.gitignore
utils/test/testapi/opnfv_testapi/common/check.py
utils/test/testapi/opnfv_testapi/tests/unit/fake_pymongo.py
utils/test/testapi/opnfv_testapi/tests/unit/resources/test_pod.py

index 86ec0d2..a3d6e01 100644 (file)
@@ -5,3 +5,4 @@ opnfv_testapi/static
 build
 *.egg-info
 3rd_party/static/static
+*.pyc
index 24ba876..acd3317 100644 (file)
@@ -7,6 +7,7 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 import functools
+import re
 
 from tornado import gen
 from tornado import web
@@ -92,7 +93,12 @@ def new_not_exists(xstep):
     def wrap(self, *args, **kwargs):
         query = kwargs.get('query')
         if query:
-            to_data = yield dbapi.db_find_one(self.table, query())
+            query_data = query()
+            if self.table == 'pods':
+                if query_data.get('name') is not None:
+                    query_data['name'] = re.compile(query_data.get('name'),
+                                                    re.IGNORECASE)
+            to_data = yield dbapi.db_find_one(self.table, query_data)
             if to_data:
                 raises.Forbidden(message.exist(self.table, query()))
         ret = yield gen.coroutine(xstep)(self, *args, **kwargs)
index 0ca83df..3320a86 100644 (file)
@@ -6,6 +6,8 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
+import re
+
 from operator import itemgetter
 
 from bson.objectid import ObjectId
@@ -190,8 +192,13 @@ class MemDb(object):
                 elif k == 'trust_indicator.current':
                     if content.get('trust_indicator').get('current') != v:
                         return False
-                elif not isinstance(v, dict) and content.get(k, None) != v:
-                    return False
+                elif not isinstance(v, dict):
+                    if isinstance(v, re._pattern_type):
+                        if v.match(content.get(k, None)) is None:
+                            return False
+                    else:
+                        if content.get(k, None) != v:
+                            return False
         return True
 
     def _find(self, *args):
@@ -199,7 +206,6 @@ class MemDb(object):
         for content in self.contents:
             if self._in(content, *args):
                 res.append(content)
-
         return res
 
     def find(self, *args):
index cb4f1d9..d1a19f7 100644 (file)
@@ -21,6 +21,8 @@ class TestPodBase(base.TestBase):
         self.req_d = pod_models.PodCreateRequest('zte-1', 'virtual',
                                                  'zte pod 1', 'ci-pod')
         self.req_e = pod_models.PodCreateRequest('zte-2', 'metal', 'zte pod 2')
+        self.req_f = pod_models.PodCreateRequest('Zte-1', 'virtual',
+                                                 'zte pod 1', 'ci-pod')
         self.get_res = pod_models.Pod
         self.list_res = pod_models.Pods
         self.basePath = '/api/v1/pods'
@@ -58,6 +60,11 @@ class TestPodCreate(TestPodBase):
         self.create_d()
         return self.req_d
 
+    @executor.create(httplib.FORBIDDEN, message.exist_base)
+    def test_alreadyExistCaseInsensitive(self):
+        self.create(self.req_f)
+        return self.req_d
+
 
 class TestPodGet(TestPodBase):
     def setUp(self):