bugfix: query results failed due to wrong using period 87/14887/1
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 31 May 2016 15:18:46 +0000 (23:18 +0800)
committerSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 31 May 2016 15:18:46 +0000 (23:18 +0800)
JIRA: FUNCTEST-281

Change-Id: I3d0bdc302afc45593ad3feaec21b89d5c6eeaa0b
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
utils/test/result_collection_api/resources/result_handlers.py
utils/test/result_collection_api/tests/unit/fake_pymongo.py
utils/test/result_collection_api/tests/unit/test_result.py

index 1d52235..f745d63 100644 (file)
@@ -31,7 +31,7 @@ class GenericResultHandler(GenericApiHandler):
                 if v > 0:
                     period = datetime.now() - timedelta(days=v)
                     obj = {"$gte": str(period)}
-                    query['creation_date'] = obj
+                    query['start_date'] = obj
             elif k == 'trust_indicator':
                 query[k] = float(v)
             else:
index 95c7371..bebb9e8 100644 (file)
@@ -73,11 +73,24 @@ class MemDb(object):
     def insert(self, doc_or_docs, check_keys=True):
         return thread_execute(self._insert, doc_or_docs, check_keys)
 
+    @staticmethod
+    def _compare_date(spec, value):
+        for k, v in spec.iteritems():
+            if k == '$gte' and value >= v:
+                return True
+        return False
+
     @staticmethod
     def _in(content, *args):
         for arg in args:
             for k, v in arg.iteritems():
-                if k != 'creation_date' and content.get(k, None) != v:
+                if k == 'start_date':
+                    if not MemDb._compare_date(v, content.get(k)):
+                        return False
+                elif k == 'trust_indicator':
+                    if float(content.get(k)) != float(v):
+                        return False
+                elif content.get(k, None) != v:
                     return False
 
         return True
index 7b1f976..40daab8 100644 (file)
@@ -199,8 +199,15 @@ class TestResultGet(TestResultBase):
     def test_queryCriteria(self):
         self._query_and_assert(self._set_query('criteria'))
 
-    def test_queryPeriod(self):
-        self._query_and_assert(self._set_query('period=1'))
+    def test_queryPeriodFail(self):
+        self._query_and_assert(self._set_query('period=1'),
+                               aheadof=True,
+                               found=False)
+
+    def test_queryPeriodSuccess(self):
+        self._query_and_assert(self._set_query('period=1'),
+                               aheadof=False,
+                               found=True)
 
     def test_combination(self):
         self._query_and_assert(self._set_query('pod',
@@ -227,8 +234,17 @@ class TestResultGet(TestResultBase):
                                                'period=1'),
                                found=False)
 
-    def _query_and_assert(self, query, found=True):
-        _, res = self.create_d()
+    def _query_and_assert(self, query, aheadof=False, found=True):
+        import copy
+        from datetime import datetime, timedelta
+        req = copy.deepcopy(self.req_d)
+        if aheadof:
+            req.start_date = datetime.now() - timedelta(days=10)
+        else:
+            req.start_date = datetime.now()
+        req.stop_date = str(req.start_date + timedelta(minutes=10))
+        req.start_date = str(req.start_date)
+        _, res = self.create(req)
         code, body = self.query(query)
         if not found:
             self.assertEqual(code, HTTP_OK)
@@ -236,7 +252,7 @@ class TestResultGet(TestResultBase):
         else:
             self.assertEqual(1, len(body.results))
             for result in body.results:
-                self.assert_res(code, result)
+                self.assert_res(code, result, req)
 
     def _set_query(self, *args):
         uri = ''