From 19fbb53e9b3498b673446b38a22e52fb64a09ada Mon Sep 17 00:00:00 2001 From: Lisa Zangrando Date: Wed, 15 Jun 2016 12:21:47 +0200 Subject: [PATCH] first functional test added - test-synergy: test the main service functionality - service.py: removed unuseful code - TimerManager: updated execute() Change-Id: I47e0ffa446c83369cb98cffbdebda3bc2fdbe183 --- requirements.txt | 8 ++ synergy/examples/timer_manager.py | 10 +- synergy/service.py | 1 - synergy/tests/functional/__init__.py | 0 synergy/tests/functional/test_synergy.py | 129 +++++++++++++++++++++++ test-requirements.txt | 1 + 6 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 synergy/tests/functional/__init__.py create mode 100644 synergy/tests/functional/test_synergy.py diff --git a/requirements.txt b/requirements.txt index 594c359..a63e7d7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,14 @@ # process, which may cause wedges in the gate later. pbr + +# Trying to fix the oslo dependencies mess (vincent). +amqp<2.0.0,>=1.0.0 +oslo.middleware<3.5.0,>=3.0.0 +oslo.concurrency<3.3.0,>=3.0.0 +oslo.service<1.3.0,>=1.0.0 +oslo.log<2.3.0,>=2.0.0 + eventlet oslo.config>=2.4.0,<3.0.0 oslo.messaging>=2.5.0,<3.0.0 diff --git a/synergy/examples/timer_manager.py b/synergy/examples/timer_manager.py index a646771..55bea52 100644 --- a/synergy/examples/timer_manager.py +++ b/synergy/examples/timer_manager.py @@ -32,9 +32,13 @@ class TimerManager(Manager): def setup(self): LOG.info("%s setup invoked!" % (self.name)) - def execute(self, cmd): - LOG.info("%s execute invoked!" % (self.name)) - LOG.info("command name=%s" % (cmd.getName())) + def execute(self, command, *args, **kargs): + LOG.info("%r execute %r invoked!" % (self.name, command)) + + if command == "GET_TIME": + return {"localtime": time.asctime(time.localtime(time.time()))} + else: + raise Exception("command %r not supported" % command) def destroy(self): LOG.info("%s destroy invoked!" % (self.name)) diff --git a/synergy/service.py b/synergy/service.py index 3647d1b..b56b28d 100644 --- a/synergy/service.py +++ b/synergy/service.py @@ -111,7 +111,6 @@ class Synergy(service.Service): LOG.error("manager %r instantiation error: %s" % (entry.name, ex)) - self.managers[manager_obj.getName()].setStatus("ERROR") raise Exception("manager %r instantiation error: %s" % (entry.name, ex)) diff --git a/synergy/tests/functional/__init__.py b/synergy/tests/functional/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/synergy/tests/functional/test_synergy.py b/synergy/tests/functional/test_synergy.py new file mode 100644 index 0000000..9556f1e --- /dev/null +++ b/synergy/tests/functional/test_synergy.py @@ -0,0 +1,129 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +try: + import unittest2 as unittest +except ImportError: + import unittest + +import json +import logging +import mock +import sys +import time + +from mock import Mock +from synergy.service import Synergy + +logging.basicConfig(level=logging.DEBUG) + +LOG = logging.getLogger("SynergyTests") +LOG.setLevel(logging.DEBUG) + + +def getLogger(name): + formatter = logging.Formatter("%(asctime)s - %(name)s - " + "%(levelname)s - %(message)s") + + ch = logging.StreamHandler(sys.stdout) + ch.setLevel(logging.DEBUG) + ch.setFormatter(formatter) + + logger = logging.getLogger(name) + logger.setLevel(logging.DEBUG) + logger.propagate = False + logger.addHandler(ch) + + return logger + + +class SynergyTests(unittest.TestCase): + + @mock.patch('synergy.service.LOG', LOG) + def setUp(self): + super(SynergyTests, self).setUp() + + self.synergy = Synergy() + self.synergy.managers["TimerManager"].start() + time.sleep(1) + + @mock.patch('synergy.service.LOG', LOG) + def test_managers(self): + self.assertEqual(self.synergy.managers.keys(), ["TimerManager"]) + + @mock.patch('synergy.service.LOG', LOG) + def test_listManagers(self): + start_response = Mock() + result = self.synergy.listManagers(environ={}, + start_response=start_response) + result = json.loads(result[0]) + + self.assertEqual(result, ["TimerManager"]) + + @mock.patch('synergy.service.LOG', LOG) + def test_getManagerStatus(self): + start_response = Mock() + result = self.synergy.getManagerStatus(environ={}, + start_response=start_response) + result = json.loads(result[0]) + + self.assertEqual(result, {'TimerManager': 'ACTIVE'}) + + @mock.patch('synergy.service.LOG', LOG) + def test_startManager(self): + environ = {'QUERY_STRING': 'manager=TimerManager'} + start_response = Mock() + + result = self.synergy.startManager(environ, start_response) + result = json.loads(result[0]) + + self.assertEqual(result, {'TimerManager': { + 'message': 'started successfully', 'status': 'RUNNING'}}) + + time.sleep(0.5) + + result = self.synergy.startManager(environ, start_response) + result = json.loads(result[0]) + + self.assertEqual(result, {'TimerManager': { + 'message': 'WARN: already started', 'status': 'RUNNING'}}) + + @mock.patch('synergy.service.LOG', LOG) + def test_stopManager(self): + environ = {'QUERY_STRING': 'manager=TimerManager'} + start_response = Mock() + + result = self.synergy.startManager(environ, start_response) + + time.sleep(0.5) + + result = self.synergy.stopManager(environ, start_response) + + result = json.loads(result[0]) + + self.assertEqual(result, {'TimerManager': { + 'message': 'stopped successfully', 'status': 'ACTIVE'}}) + + @mock.patch('synergy.service.LOG', LOG) + def test_executeCommand(self): + environ = {'QUERY_STRING': 'manager=TimerManager&command=GET_TIME'} + start_response = Mock() + + result = self.synergy.executeCommand(environ, start_response) + result = json.loads(result[0]) + + self.assertEqual(result.keys(), ["localtime"]) + + +if __name__ == '__main__': + unittest.main() diff --git a/test-requirements.txt b/test-requirements.txt index 21a7e3b..fc29660 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -12,3 +12,4 @@ oslotest>=1.10.0 # Apache-2.0 testrepository>=0.0.18 testscenarios>=0.4 testtools>=1.4.0 +mock==2.0.0