summaryrefslogtreecommitdiffstats
path: root/testapi
diff options
context:
space:
mode:
Diffstat (limited to 'testapi')
-rw-r--r--testapi/.gitignore1
-rw-r--r--testapi/3rd_party/static/testapi-ui/components/pods/pods.html1
-rw-r--r--testapi/3rd_party/static/testapi-ui/components/pods/podsController.js13
-rw-r--r--testapi/README.rst101
-rw-r--r--testapi/opnfv_testapi/common/check.py32
-rw-r--r--testapi/opnfv_testapi/common/message.py8
-rw-r--r--testapi/opnfv_testapi/resources/handlers.py14
-rw-r--r--testapi/opnfv_testapi/resources/pod_models.py3
-rw-r--r--testapi/opnfv_testapi/tests/unit/executor.py33
-rw-r--r--testapi/opnfv_testapi/tests/unit/fake_pymongo.py13
-rw-r--r--testapi/opnfv_testapi/tests/unit/resources/test_base.py25
-rw-r--r--testapi/opnfv_testapi/tests/unit/resources/test_pod.py46
-rw-r--r--testapi/opnfv_testapi/tests/unit/resources/test_result.py17
-rw-r--r--testapi/opnfv_testapi/tests/unit/resources/test_token.py74
-rw-r--r--testapi/tools/watchdog/docker_watch.sh20
15 files changed, 248 insertions, 153 deletions
diff --git a/testapi/.gitignore b/testapi/.gitignore
index 86ec0d2..a3d6e01 100644
--- a/testapi/.gitignore
+++ b/testapi/.gitignore
@@ -5,3 +5,4 @@ opnfv_testapi/static
build
*.egg-info
3rd_party/static/static
+*.pyc
diff --git a/testapi/3rd_party/static/testapi-ui/components/pods/pods.html b/testapi/3rd_party/static/testapi-ui/components/pods/pods.html
index e366670..22f2934 100644
--- a/testapi/3rd_party/static/testapi-ui/components/pods/pods.html
+++ b/testapi/3rd_party/static/testapi-ui/components/pods/pods.html
@@ -54,6 +54,7 @@
<a href="#" ng-click="showPod = !showPod">{{pod.name}}</a>
<div class="show-pod" ng-class="{ 'hidden': ! showPod }" style="margin-left:24px;">
<p>
+ owner: {{pod.owner}}<br>
role: {{pod.role}}<br>
mode: {{pod.mode}}<br>
create_date: {{pod.creation_date}}<br>
diff --git a/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js b/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js
index 894fcc1..489fa8a 100644
--- a/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js
+++ b/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js
@@ -20,7 +20,7 @@
.controller('PodsController', PodsController);
PodsController.$inject = [
- '$rootScope', '$scope', '$http', '$filter', '$state', 'testapiApiUrl','raiseAlert'
+ '$scope', '$http', '$filter', '$state', 'testapiApiUrl','raiseAlert'
];
/**
@@ -88,16 +88,17 @@
details: ctrl.details
};
ctrl.podsRequest =
- $http.post(pods_url, body).error(function (error) {
+ $http.post(pods_url, body).error(function (data, status) {
ctrl.showError = true;
- ctrl.error =
- 'Error creating the new pod from server: ' +
- angular.toJson(error);
+ if(status == 403){
+ ctrl.error =
+ 'Error creating the new pod from server: Pod\'s name already exists'
+ }
});
}
else{
ctrl.showError = true;
- ctrl.error = 'Name is missing.'
+ ctrl.error = 'Name is missing.'
}
}
diff --git a/testapi/README.rst b/testapi/README.rst
index 44ab2a4..0d18b7e 100644
--- a/testapi/README.rst
+++ b/testapi/README.rst
@@ -2,63 +2,92 @@
opnfv-testapi
=============
-Test Results Collector of OPNFV Test Projects
+**Test Results Collector of OPNFV Test Projects**:
-Start Server
-==============
+This project aims to provide a common way of gathering all the test results for OPNFV
+testing projects into a single place, and a unified way of getting those results for
+testing analysis projects, such as Reporting/Bitergia Dashboard/Qtip. It exposes
+Restful APIs for collecting results and pushing them into a MongoDB database.
+
+If you are interested in how TestAPI looks like, please visit OPNFV's official `TestAPI Server`__
+
+.. __: http://testresults.opnfv.org/test
+
+Pre-requsites
+=============
-Getting setup
-^^^^^^^^^^^^^
+TestAPI leverages MongoDB as the data warehouse, in order to let it work
+successfully, a MongoDB must be provided, the official MongoDB version in OPNFV
+TestAPI is 3.2.6. And the database is **test_results_collection**, the five
+collections are *users/pods/projects/testcases/scenarioes/results*. And thanks to
+MongoDB's very user-friendly property, they don't need to be created in advance.
-Requirements for opnfv-testapi:
+Running locally
+===============
-* tornado
-* epydoc
+Requirements
+^^^^^^^^^^^^
-These requirements are expressed in the requirements.txt file and may be
-installed by running the following (from within a virtual environment)::
+All requirements are listed in requirements.txt and should be
+installed by 'pip install':
- pip install -r requirements.txt
+ *pip install -r requirements.txt*
+
+Installation
+^^^^^^^^^^^^
+
+ *python setup.py install*
+
+After installation, configuration file etc/config.ini will be put under
+/etc/opnfv_testapi/. And all the web relevant files under 3rd_party/static
+will be in /user/local/share/opnfv_testapi as a totality.
+
+Start Server
+^^^^^^^^^^^^
-How to install
-^^^^^^^^^^^^^^
+ *opnfv-testapi [--config-file <config.ini>]*
-From within your environment, just run:
+If --config-file is provided, the specified configuration file will be employed
+when starting the server, or else /etc/opnfv_testapi/config.ini will be utilized
+by default.
- ./install.sh
+After executing the command successfully, a TestAPI server will be started on
+port 8000, to visit web portal, please access http://hostname:8000
-How to run
-^^^^^^^^^^
+Regarding swagger-ui website, please visit http://hostname:8000/swagger/spec.html
-From within your environment, just run:
+Running with container
+======================
- opnfv-testapi
+TestAPI has already containerized, the docker image is opnfv/testapi:latest.
-This will start a server on port 8000. Just visit http://localhost:8000
+**Running the container not behind nginx:**
-For swagger website, just visit http://localhost:8000/swagger/spec.html
+.. code-block:: shell
-Unittest
-=====================
+ docker run -dti --name testapi -p expose_port:8000
+ -e "mongodb_url=mongodb://mongodb_ip:27017/"
+ -e "base_url=http://host_name:expose_port"
+ opnfv/testapi:latest
-Getting setup
-^^^^^^^^^^^^^
+**Running the container behind nginx:**
-Requirements for unittest:
+.. code-block:: shell
-* testtools
-* discover
-* futures
+ docker run -dti --name testapi -p expose_port:8000
+ -e "mongodb_url=mongodb://mongodb_ip:27017/"
+ -e "base_url=http://nginx_url"
+ opnfv/testapi:latest
-These requirements are expressed in the test-requirements.txt file and may be
-installed by running the following (from within a virtual environment)::
+Unittest & pep8
+===============
- pip install -r test-requirements.txt
+All requirements for unit tests are outlined in test-requirements.txt, and in TestAPI project, tox is leveraged to drive the executing of unit tests and pep8 check
-How to run
-^^^^^^^^^^
+**Running unit tests**
-From within your environment, just run::
+ *tox -e py27*
- bash run_test.sh
+**Running pep8 check**
+ *tox -e pep8*
diff --git a/testapi/opnfv_testapi/common/check.py b/testapi/opnfv_testapi/common/check.py
index 24ba876..e80b1c6 100644
--- a/testapi/opnfv_testapi/common/check.py
+++ b/testapi/opnfv_testapi/common/check.py
@@ -7,21 +7,36 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
import functools
+import re
from tornado import gen
-from tornado import web
+from opnfv_testapi.common import constants
from opnfv_testapi.common import message
from opnfv_testapi.common import raises
from opnfv_testapi.db import api as dbapi
-def authenticate(method):
- @web.asynchronous
- @gen.coroutine
+def is_authorized(method):
@functools.wraps(method)
def wrapper(self, *args, **kwargs):
- if self.auth:
+ if self.table in ['pods']:
+ testapi_id = self.get_secure_cookie(constants.TESTAPI_ID)
+ if not testapi_id:
+ raises.Unauthorized(message.not_login())
+ user_info = yield dbapi.db_find_one('users', {'user': testapi_id})
+ if not user_info:
+ raises.Unauthorized(message.not_lfid())
+ kwargs['owner'] = testapi_id
+ ret = yield gen.coroutine(method)(self, *args, **kwargs)
+ raise gen.Return(ret)
+ return wrapper
+
+
+def valid_token(method):
+ @functools.wraps(method)
+ def wrapper(self, *args, **kwargs):
+ if self.auth and self.table == 'results':
try:
token = self.request.headers['X-Auth-Token']
except KeyError:
@@ -92,7 +107,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)
diff --git a/testapi/opnfv_testapi/common/message.py b/testapi/opnfv_testapi/common/message.py
index 951cbaf..8b5c3fb 100644
--- a/testapi/opnfv_testapi/common/message.py
+++ b/testapi/opnfv_testapi/common/message.py
@@ -42,6 +42,14 @@ def invalid_token():
return 'Invalid Token'
+def not_login():
+ return 'TestAPI id is not provided'
+
+
+def not_lfid():
+ return 'Not a valid Linux Foundation Account'
+
+
def no_update():
return 'Nothing to update'
diff --git a/testapi/opnfv_testapi/resources/handlers.py b/testapi/opnfv_testapi/resources/handlers.py
index ed55c70..8e5dab2 100644
--- a/testapi/opnfv_testapi/resources/handlers.py
+++ b/testapi/opnfv_testapi/resources/handlers.py
@@ -73,7 +73,10 @@ class GenericApiHandler(web.RequestHandler):
cls_data = self.table_cls.from_dict(data)
return cls_data.format_http()
- @check.authenticate
+ @web.asynchronous
+ @gen.coroutine
+ @check.is_authorized
+ @check.valid_token
@check.no_body
@check.miss_fields
@check.carriers_exist
@@ -172,13 +175,15 @@ class GenericApiHandler(web.RequestHandler):
def _get_one(self, data, query=None):
self.finish_request(self.format_data(data))
- @check.authenticate
+ @web.asynchronous
+ @gen.coroutine
@check.not_exist
def _delete(self, data, query=None):
yield dbapi.db_delete(self.table, query)
self.finish_request()
- @check.authenticate
+ @web.asynchronous
+ @gen.coroutine
@check.no_body
@check.not_exist
@check.updated_one_not_exist
@@ -189,7 +194,8 @@ class GenericApiHandler(web.RequestHandler):
update_req['_id'] = str(data._id)
self.finish_request(update_req)
- @check.authenticate
+ @web.asynchronous
+ @gen.coroutine
@check.no_body
@check.not_exist
@check.updated_one_not_exist
diff --git a/testapi/opnfv_testapi/resources/pod_models.py b/testapi/opnfv_testapi/resources/pod_models.py
index 2c3ea97..415d3d6 100644
--- a/testapi/opnfv_testapi/resources/pod_models.py
+++ b/testapi/opnfv_testapi/resources/pod_models.py
@@ -29,13 +29,14 @@ class PodCreateRequest(models.ModelBase):
class Pod(models.ModelBase):
def __init__(self,
name='', mode='', details='',
- role="", _id='', create_date=''):
+ role="", _id='', create_date='', owner=''):
self.name = name
self.mode = mode
self.details = details
self.role = role
self._id = _id
self.creation_date = create_date
+ self.owner = owner
@swagger.model()
diff --git a/testapi/opnfv_testapi/tests/unit/executor.py b/testapi/opnfv_testapi/tests/unit/executor.py
index b8f696c..aa99b90 100644
--- a/testapi/opnfv_testapi/tests/unit/executor.py
+++ b/testapi/opnfv_testapi/tests/unit/executor.py
@@ -9,6 +9,39 @@
import functools
import httplib
+from concurrent.futures import ThreadPoolExecutor
+import mock
+
+
+O_get_secure_cookie = (
+ 'opnfv_testapi.resources.handlers.GenericApiHandler.get_secure_cookie')
+
+
+def thread_execute(method, *args, **kwargs):
+ with ThreadPoolExecutor(max_workers=2) as executor:
+ result = executor.submit(method, *args, **kwargs)
+ return result
+
+
+def mock_invalid_lfid():
+ def _mock_invalid_lfid(xstep):
+ def wrap(self, *args, **kwargs):
+ with mock.patch(O_get_secure_cookie) as m_cookie:
+ m_cookie.return_value = 'InvalidUser'
+ return xstep(self, *args, **kwargs)
+ return wrap
+ return _mock_invalid_lfid
+
+
+def mock_valid_lfid():
+ def _mock_valid_lfid(xstep):
+ def wrap(self, *args, **kwargs):
+ with mock.patch(O_get_secure_cookie) as m_cookie:
+ m_cookie.return_value = 'ValidUser'
+ return xstep(self, *args, **kwargs)
+ return wrap
+ return _mock_valid_lfid
+
def upload(excepted_status, excepted_response):
def _upload(create_request):
diff --git a/testapi/opnfv_testapi/tests/unit/fake_pymongo.py b/testapi/opnfv_testapi/tests/unit/fake_pymongo.py
index 0ca83df..c44a92c 100644
--- a/testapi/opnfv_testapi/tests/unit/fake_pymongo.py
+++ b/testapi/opnfv_testapi/tests/unit/fake_pymongo.py
@@ -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):
@@ -282,3 +288,4 @@ testcases = MemDb('testcases')
results = MemDb('results')
scenarios = MemDb('scenarios')
tokens = MemDb('tokens')
+users = MemDb('users')
diff --git a/testapi/opnfv_testapi/tests/unit/resources/test_base.py b/testapi/opnfv_testapi/tests/unit/resources/test_base.py
index 39633e5..89cd7e8 100644
--- a/testapi/opnfv_testapi/tests/unit/resources/test_base.py
+++ b/testapi/opnfv_testapi/tests/unit/resources/test_base.py
@@ -6,13 +6,16 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+from datetime import datetime
import json
from os import path
+from bson.objectid import ObjectId
import mock
from tornado import testing
from opnfv_testapi.resources import models
+from opnfv_testapi.resources import pod_models
from opnfv_testapi.tests.unit import fake_pymongo
@@ -26,10 +29,32 @@ class TestBase(testing.AsyncHTTPTestCase):
self.get_res = None
self.list_res = None
self.update_res = None
+ self.pod_d = pod_models.Pod(name='zte-pod1',
+ mode='virtual',
+ details='zte pod 1',
+ role='community-ci',
+ _id=str(ObjectId()),
+ owner='ValidUser',
+ create_date=str(datetime.now()))
+ self.pod_e = pod_models.Pod(name='zte-pod2',
+ mode='metal',
+ details='zte pod 2',
+ role='production-ci',
+ _id=str(ObjectId()),
+ owner='ValidUser',
+ create_date=str(datetime.now()))
self.req_d = None
self.req_e = None
self.addCleanup(self._clear)
super(TestBase, self).setUp()
+ fake_pymongo.users.insert({"user": "ValidUser",
+ 'email': 'validuser@lf.com',
+ 'fullname': 'Valid User',
+ 'groups': [
+ 'opnfv-testapi-users',
+ 'opnfv-gerrit-functest-submitters',
+ 'opnfv-gerrit-qtip-contributors']
+ })
def tearDown(self):
self.db_patcher.stop()
diff --git a/testapi/opnfv_testapi/tests/unit/resources/test_pod.py b/testapi/opnfv_testapi/tests/unit/resources/test_pod.py
index cb4f1d9..5d9da3a 100644
--- a/testapi/opnfv_testapi/tests/unit/resources/test_pod.py
+++ b/testapi/opnfv_testapi/tests/unit/resources/test_pod.py
@@ -12,22 +12,29 @@ import unittest
from opnfv_testapi.common import message
from opnfv_testapi.resources import pod_models
from opnfv_testapi.tests.unit import executor
+from opnfv_testapi.tests.unit import fake_pymongo
from opnfv_testapi.tests.unit.resources import test_base as base
class TestPodBase(base.TestBase):
def setUp(self):
super(TestPodBase, self).setUp()
- 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.get_res = pod_models.Pod
self.list_res = pod_models.Pods
self.basePath = '/api/v1/pods'
+ self.req_d = pod_models.PodCreateRequest(name=self.pod_d.name,
+ mode=self.pod_d.mode,
+ details=self.pod_d.details,
+ role=self.pod_d.role)
+ self.req_e = pod_models.PodCreateRequest(name=self.pod_e.name,
+ mode=self.pod_e.mode,
+ details=self.pod_e.details,
+ role=self.pod_e.role)
def assert_get_body(self, pod, req=None):
if not req:
req = self.req_d
+ self.assertEqual(pod.owner, 'ValidUser')
self.assertEqual(pod.name, req.name)
self.assertEqual(pod.mode, req.mode)
self.assertEqual(pod.details, req.details)
@@ -37,33 +44,54 @@ class TestPodBase(base.TestBase):
class TestPodCreate(TestPodBase):
+ @executor.create(httplib.BAD_REQUEST, message.not_login())
+ def test_notlogin(self):
+ return self.req_d
+
+ @executor.mock_invalid_lfid()
+ @executor.create(httplib.BAD_REQUEST, message.not_lfid())
+ def test_invalidLfid(self):
+ return self.req_d
+
+ @executor.mock_valid_lfid()
@executor.create(httplib.BAD_REQUEST, message.no_body())
def test_withoutBody(self):
return None
+ @executor.mock_valid_lfid()
@executor.create(httplib.BAD_REQUEST, message.missing('name'))
def test_emptyName(self):
return pod_models.PodCreateRequest('')
+ @executor.mock_valid_lfid()
@executor.create(httplib.BAD_REQUEST, message.missing('name'))
def test_noneName(self):
return pod_models.PodCreateRequest(None)
+ @executor.mock_valid_lfid()
@executor.create(httplib.OK, 'assert_create_body')
def test_success(self):
return self.req_d
+ @executor.mock_valid_lfid()
@executor.create(httplib.FORBIDDEN, message.exist_base)
def test_alreadyExist(self):
- self.create_d()
+ fake_pymongo.pods.insert(self.pod_d.format())
+ return self.req_d
+
+ @executor.mock_valid_lfid()
+ @executor.create(httplib.FORBIDDEN, message.exist_base)
+ def test_alreadyExistCaseInsensitive(self):
+ fake_pymongo.pods.insert(self.pod_d.format())
+ self.req_d.name = self.req_d.name.upper()
return self.req_d
class TestPodGet(TestPodBase):
def setUp(self):
super(TestPodGet, self).setUp()
- self.create_d()
- self.create_e()
+ fake_pymongo.pods.insert(self.pod_d.format())
+ fake_pymongo.pods.insert(self.pod_e.format())
@executor.get(httplib.NOT_FOUND, message.not_found_base)
def test_notExist(self):
@@ -71,7 +99,7 @@ class TestPodGet(TestPodBase):
@executor.get(httplib.OK, 'assert_get_body')
def test_getOne(self):
- return self.req_d.name
+ return self.pod_d.name
@executor.get(httplib.OK, '_assert_list')
def test_list(self):
@@ -80,10 +108,10 @@ class TestPodGet(TestPodBase):
def _assert_list(self, body):
self.assertEqual(len(body.pods), 2)
for pod in body.pods:
- if self.req_d.name == pod.name:
+ if self.pod_d.name == pod.name:
self.assert_get_body(pod)
else:
- self.assert_get_body(pod, self.req_e)
+ self.assert_get_body(pod, self.pod_e)
if __name__ == '__main__':
diff --git a/testapi/opnfv_testapi/tests/unit/resources/test_result.py b/testapi/opnfv_testapi/tests/unit/resources/test_result.py
index 1e83ed3..f5026c9 100644
--- a/testapi/opnfv_testapi/tests/unit/resources/test_result.py
+++ b/testapi/opnfv_testapi/tests/unit/resources/test_result.py
@@ -7,17 +7,18 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
import copy
+from datetime import datetime
+from datetime import timedelta
import httplib
-import unittest
-from datetime import datetime, timedelta
import json
+import unittest
from opnfv_testapi.common import message
-from opnfv_testapi.resources import pod_models
from opnfv_testapi.resources import project_models
from opnfv_testapi.resources import result_models
from opnfv_testapi.resources import testcase_models
from opnfv_testapi.tests.unit import executor
+from opnfv_testapi.tests.unit import fake_pymongo
from opnfv_testapi.tests.unit.resources import test_base as base
@@ -52,7 +53,8 @@ class Details(object):
class TestResultBase(base.TestBase):
def setUp(self):
- self.pod = 'zte-pod1'
+ super(TestResultBase, self).setUp()
+ self.pod = self.pod_d.name
self.project = 'functest'
self.case = 'vPing'
self.installer = 'fuel'
@@ -65,7 +67,6 @@ class TestResultBase(base.TestBase):
self.stop_date = str(datetime.now() + timedelta(minutes=1))
self.update_date = str(datetime.now() + timedelta(days=1))
self.update_step = -0.05
- super(TestResultBase, self).setUp()
self.details = Details(timestart='0', duration='9s', status='OK')
self.req_d = result_models.ResultCreateRequest(
pod_name=self.pod,
@@ -84,10 +85,6 @@ class TestResultBase(base.TestBase):
self.list_res = result_models.TestResults
self.update_res = result_models.TestResult
self.basePath = '/api/v1/results'
- self.req_pod = pod_models.PodCreateRequest(
- self.pod,
- 'metal',
- 'zte pod 1')
self.req_project = project_models.ProjectCreateRequest(
self.project,
'vping test')
@@ -95,7 +92,7 @@ class TestResultBase(base.TestBase):
self.case,
'/cases/vping',
'vping-ssh test')
- self.create_help('/api/v1/pods', self.req_pod)
+ fake_pymongo.pods.insert(self.pod_d.format())
self.create_help('/api/v1/projects', self.req_project)
self.create_help('/api/v1/projects/%s/cases',
self.req_testcase,
diff --git a/testapi/opnfv_testapi/tests/unit/resources/test_token.py b/testapi/opnfv_testapi/tests/unit/resources/test_token.py
index 940e256..bd64723 100644
--- a/testapi/opnfv_testapi/tests/unit/resources/test_token.py
+++ b/testapi/opnfv_testapi/tests/unit/resources/test_token.py
@@ -9,13 +9,12 @@ import unittest
from tornado import web
from opnfv_testapi.common import message
-from opnfv_testapi.resources import project_models
from opnfv_testapi.tests.unit import executor
from opnfv_testapi.tests.unit import fake_pymongo
-from opnfv_testapi.tests.unit.resources import test_base as base
+from opnfv_testapi.tests.unit.resources import test_result
-class TestToken(base.TestBase):
+class TestTokenCreateResult(test_result.TestResultBase):
def get_app(self):
from opnfv_testapi.router import url_mappings
return web.Application(
@@ -25,27 +24,23 @@ class TestToken(base.TestBase):
auth=True
)
-
-class TestTokenCreateProject(TestToken):
def setUp(self):
- super(TestTokenCreateProject, self).setUp()
- self.req_d = project_models.ProjectCreateRequest('vping')
+ super(TestTokenCreateResult, self).setUp()
fake_pymongo.tokens.insert({"access_token": "12345"})
- self.basePath = '/api/v1/projects'
@executor.create(httplib.FORBIDDEN, message.invalid_token())
- def test_projectCreateTokenInvalid(self):
+ def test_resultCreateTokenInvalid(self):
self.headers['X-Auth-Token'] = '1234'
return self.req_d
@executor.create(httplib.UNAUTHORIZED, message.unauthorized())
- def test_projectCreateTokenUnauthorized(self):
+ def test_resultCreateTokenUnauthorized(self):
if 'X-Auth-Token' in self.headers:
self.headers.pop('X-Auth-Token')
return self.req_d
@executor.create(httplib.OK, '_create_success')
- def test_projectCreateTokenSuccess(self):
+ def test_resultCreateTokenSuccess(self):
self.headers['X-Auth-Token'] = '12345'
return self.req_d
@@ -53,62 +48,5 @@ class TestTokenCreateProject(TestToken):
self.assertIn('CreateResponse', str(type(body)))
-class TestTokenDeleteProject(TestToken):
- def setUp(self):
- super(TestTokenDeleteProject, self).setUp()
- self.req_d = project_models.ProjectCreateRequest('vping')
- fake_pymongo.tokens.insert({"access_token": "12345"})
- self.basePath = '/api/v1/projects'
- self.headers['X-Auth-Token'] = '12345'
- self.create_d()
-
- @executor.delete(httplib.FORBIDDEN, message.invalid_token())
- def test_projectDeleteTokenIvalid(self):
- self.headers['X-Auth-Token'] = '1234'
- return self.req_d.name
-
- @executor.delete(httplib.UNAUTHORIZED, message.unauthorized())
- def test_projectDeleteTokenUnauthorized(self):
- self.headers.pop('X-Auth-Token')
- return self.req_d.name
-
- @executor.delete(httplib.OK, '_delete_success')
- def test_projectDeleteTokenSuccess(self):
- return self.req_d.name
-
- def _delete_success(self, body):
- self.assertEqual('', body)
-
-
-class TestTokenUpdateProject(TestToken):
- def setUp(self):
- super(TestTokenUpdateProject, self).setUp()
- self.req_d = project_models.ProjectCreateRequest('vping')
- fake_pymongo.tokens.insert({"access_token": "12345"})
- self.basePath = '/api/v1/projects'
- self.headers['X-Auth-Token'] = '12345'
- self.create_d()
-
- @executor.update(httplib.FORBIDDEN, message.invalid_token())
- def test_projectUpdateTokenIvalid(self):
- self.headers['X-Auth-Token'] = '1234'
- req = project_models.ProjectUpdateRequest('newName', 'new description')
- return req, self.req_d.name
-
- @executor.update(httplib.UNAUTHORIZED, message.unauthorized())
- def test_projectUpdateTokenUnauthorized(self):
- self.headers.pop('X-Auth-Token')
- req = project_models.ProjectUpdateRequest('newName', 'new description')
- return req, self.req_d.name
-
- @executor.update(httplib.OK, '_update_success')
- def test_projectUpdateTokenSuccess(self):
- req = project_models.ProjectUpdateRequest('newName', 'new description')
- return req, self.req_d.name
-
- def _update_success(self, request, body):
- self.assertIn(request.name, body)
-
-
if __name__ == '__main__':
unittest.main()
diff --git a/testapi/tools/watchdog/docker_watch.sh b/testapi/tools/watchdog/docker_watch.sh
index 786fc10..f1d8946 100644
--- a/testapi/tools/watchdog/docker_watch.sh
+++ b/testapi/tools/watchdog/docker_watch.sh
@@ -22,7 +22,7 @@ declare -A ports=( ["testapi"]="8082" ["reporting"]="8084")
## Urls to check if the modules are deployed or not ?
declare -A urls=( ["testapi"]="http://testresults.opnfv.org/test/" \
- ["reporting"]="http://testresults.opnfv.org/reporting2/reporting/index.html")
+ ["reporting"]="http://testresults.opnfv.org/reporting/index.html")
### Functions related to checking.
@@ -31,9 +31,9 @@ function is_deploying() {
building=$(grep -oPm1 "(?<=<building>)[^<]+" <<< "$xml")
if [[ $building == "false" ]]
then
- return 0
+ false
else
- return 1
+ true
fi
}
@@ -42,9 +42,9 @@ function get_docker_status() {
echo -e "Docker status: $status"
if [ $status = "active" ]
then
- return 1
+ true
else
- return 0
+ false
fi
}
@@ -53,9 +53,9 @@ function check_connectivity() {
cmd=`curl --head -m10 --request GET ${2} | grep '200 OK' > /dev/null`
rc=$?
if [[ $rc == 0 ]]; then
- return 0
+ true
else
- return 1
+ false
fi
}
@@ -74,7 +74,7 @@ function check_modules() {
done
if [ ! -z "$failed_modules" ]; then
echo -e "Failed Modules: $failed_modules"
- return 1
+ false
else
echo -e "All modules working good"
exit 0
@@ -135,7 +135,7 @@ echo -e
## If the problem is related to docker daemon
-if get_docker_status; then
+if ! get_docker_status; then
restart_docker_fix
if ! check_modules; then
echo -e "Watchdog failed while restart_docker_fix"
@@ -162,4 +162,4 @@ if ! check_modules; then
fi
sudo docker ps
-sudo docker images
+sudo docker images \ No newline at end of file