diff options
Diffstat (limited to 'testapi')
-rw-r--r-- | testapi/.gitignore | 1 | ||||
-rw-r--r-- | testapi/3rd_party/static/testapi-ui/components/pods/pods.html | 1 | ||||
-rw-r--r-- | testapi/3rd_party/static/testapi-ui/components/pods/podsController.js | 13 | ||||
-rw-r--r-- | testapi/README.rst | 101 | ||||
-rw-r--r-- | testapi/opnfv_testapi/common/check.py | 32 | ||||
-rw-r--r-- | testapi/opnfv_testapi/common/message.py | 8 | ||||
-rw-r--r-- | testapi/opnfv_testapi/resources/handlers.py | 14 | ||||
-rw-r--r-- | testapi/opnfv_testapi/resources/pod_models.py | 3 | ||||
-rw-r--r-- | testapi/opnfv_testapi/tests/unit/executor.py | 33 | ||||
-rw-r--r-- | testapi/opnfv_testapi/tests/unit/fake_pymongo.py | 13 | ||||
-rw-r--r-- | testapi/opnfv_testapi/tests/unit/resources/test_base.py | 25 | ||||
-rw-r--r-- | testapi/opnfv_testapi/tests/unit/resources/test_pod.py | 46 | ||||
-rw-r--r-- | testapi/opnfv_testapi/tests/unit/resources/test_result.py | 17 | ||||
-rw-r--r-- | testapi/opnfv_testapi/tests/unit/resources/test_token.py | 74 | ||||
-rw-r--r-- | testapi/tools/watchdog/docker_watch.sh | 20 |
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 |