summaryrefslogtreecommitdiffstats
path: root/result_collection_api/opnfv_testapi
diff options
context:
space:
mode:
Diffstat (limited to 'result_collection_api/opnfv_testapi')
-rw-r--r--result_collection_api/opnfv_testapi/resources/result_handlers.py19
-rw-r--r--result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py16
-rw-r--r--result_collection_api/opnfv_testapi/tests/unit/test_result.py44
3 files changed, 55 insertions, 24 deletions
diff --git a/result_collection_api/opnfv_testapi/resources/result_handlers.py b/result_collection_api/opnfv_testapi/resources/result_handlers.py
index 0a4c0db..fe2d71e 100644
--- a/result_collection_api/opnfv_testapi/resources/result_handlers.py
+++ b/result_collection_api/opnfv_testapi/resources/result_handlers.py
@@ -25,6 +25,13 @@ class GenericResultHandler(GenericApiHandler):
self.table = self.db_results
self.table_cls = TestResult
+ def get_int(self, key, value):
+ try:
+ value = int(value)
+ except:
+ raise HTTPError(HTTP_BAD_REQUEST, '{} must be int'.format(key))
+ return value
+
def set_query(self):
query = dict()
for k in self.request.query_arguments.keys():
@@ -32,10 +39,7 @@ class GenericResultHandler(GenericApiHandler):
if k == 'project' or k == 'pod' or k == 'case':
query[k + '_name'] = v
elif k == 'period':
- try:
- v = int(v)
- except:
- raise HTTPError(HTTP_BAD_REQUEST, 'period must be int')
+ v = self.get_int(k, v)
if v > 0:
period = datetime.now() - timedelta(days=v)
obj = {"$gte": str(period)}
@@ -119,12 +123,9 @@ class ResultsCLHandler(GenericResultHandler):
"""
last = self.get_query_argument('last', 0)
if last is not None:
- try:
- last = int(last)
- except:
- raise HTTPError(HTTP_BAD_REQUEST, 'last must be int')
+ last = self.get_int('last', last)
- self._list(self.set_query(), sort=[{'start_date', -1}], last=last)
+ self._list(self.set_query(), sort=[('start_date', -1)], last=last)
@swagger.operation(nickname="create")
def post(self):
diff --git a/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py b/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py
index 9b4d120..ef9c719 100644
--- a/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py
+++ b/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py
@@ -8,6 +8,7 @@
##############################################################################
from bson.objectid import ObjectId
from concurrent.futures import ThreadPoolExecutor
+from operator import itemgetter
def thread_execute(method, *args, **kwargs):
@@ -20,6 +21,7 @@ class MemCursor(object):
def __init__(self, collection):
self.collection = collection
self.count = len(self.collection)
+ self.sorted = []
def _is_next_exist(self):
return self.count != 0
@@ -32,10 +34,22 @@ class MemCursor(object):
self.count -= 1
return self.collection.pop()
- def sort(self, key_or_list, direction=None):
+ def sort(self, key_or_list):
+ key = key_or_list[0][0]
+ if key_or_list[0][1] == -1:
+ reverse = True
+ else:
+ reverse = False
+
+ if key_or_list is not None:
+ self.collection = sorted(self.collection,
+ key=itemgetter(key), reverse=reverse)
return self
def limit(self, limit):
+ if limit != 0 and limit < len(self.collection):
+ self.collection = self.collection[0:limit]
+ self.count = limit
return self
diff --git a/result_collection_api/opnfv_testapi/tests/unit/test_result.py b/result_collection_api/opnfv_testapi/tests/unit/test_result.py
index 5a5dd38..dbc4431 100644
--- a/result_collection_api/opnfv_testapi/tests/unit/test_result.py
+++ b/result_collection_api/opnfv_testapi/tests/unit/test_result.py
@@ -196,16 +196,30 @@ class TestResultGet(TestResultBase):
def test_queryCriteria(self):
self._query_and_assert(self._set_query('criteria'))
+ def test_queryPeriodNotInt(self):
+ code, body = self.query(self._set_query('period=a'))
+ self.assertEqual(code, HTTP_BAD_REQUEST)
+ self.assertIn('period must be int', body)
+
def test_queryPeriodFail(self):
self._query_and_assert(self._set_query('period=1'),
- aheadof=True,
- found=False)
+ found=False, days=-10)
def test_queryPeriodSuccess(self):
self._query_and_assert(self._set_query('period=1'),
- aheadof=False,
found=True)
+ def test_queryLastNotInt(self):
+ code, body = self.query(self._set_query('last=a'))
+ self.assertEqual(code, HTTP_BAD_REQUEST)
+ self.assertIn('last must be int', body)
+
+ def test_queryLast(self):
+ self._create_changed_date()
+ req = self._create_changed_date(minutes=20)
+ self._create_changed_date(minutes=-20)
+ self._query_and_assert(self._set_query('last=1'), req=req)
+
def test_combination(self):
self._query_and_assert(self._set_query('pod',
'project',
@@ -231,17 +245,9 @@ class TestResultGet(TestResultBase):
'period=1'),
found=False)
- 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)
+ def _query_and_assert(self, query, found=True, req=None, **kwargs):
+ if req is None:
+ req = self._create_changed_date(**kwargs)
code, body = self.query(query)
if not found:
self.assertEqual(code, HTTP_OK)
@@ -251,6 +257,16 @@ class TestResultGet(TestResultBase):
for result in body.results:
self.assert_res(code, result, req)
+ def _create_changed_date(self, **kwargs):
+ import copy
+ from datetime import datetime, timedelta
+ req = copy.deepcopy(self.req_d)
+ req.start_date = datetime.now() + timedelta(**kwargs)
+ req.stop_date = str(req.start_date + timedelta(minutes=10))
+ req.start_date = str(req.start_date)
+ self.create(req)
+ return req
+
def _set_query(self, *args):
uri = ''
for arg in args: