From 8ce5d90136363322b33f78b705670eeadd76f1b1 Mon Sep 17 00:00:00 2001 From: Tang Chen Date: Wed, 25 May 2016 13:06:39 +0800 Subject: [PATCH] Refactor service unit tests Add a FakeService class, and refactor service unit tests to use this class. Change-Id: I650ad83386a58205ebe42274d2bf2f508436bfa6 --- openstackclient/tests/compute/v2/fakes.py | 59 +++++++-- .../tests/compute/v2/test_service.py | 115 ++++++++---------- 2 files changed, 101 insertions(+), 73 deletions(-) diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py index 70fc386f1b..62a46b1d53 100644 --- a/openstackclient/tests/compute/v2/fakes.py +++ b/openstackclient/tests/compute/v2/fakes.py @@ -76,17 +76,6 @@ QUOTA = { QUOTA_columns = tuple(sorted(QUOTA)) QUOTA_data = tuple(QUOTA[x] for x in sorted(QUOTA)) -service_host = 'host_test' -service_binary = 'compute_test' -service_status = 'enabled' -service_disabled_reason = 'earthquake' -SERVICE = { - 'host': service_host, - 'binary': service_binary, - 'status': service_status, - 'disabled_reason': service_disabled_reason, -} - class FakeAggregate(object): """Fake one aggregate.""" @@ -523,6 +512,54 @@ class FakeServer(object): return mock.MagicMock(side_effect=servers) +class FakeService(object): + """Fake one or more services.""" + + @staticmethod + def create_one_service(attrs=None): + """Create a fake service. + + :param Dictionary attrs: + A dictionary with all attributes + :return: + A FakeResource object, with id, name, ram, vcpus, properties + """ + attrs = attrs or {} + + # Set default attributes. + service_info = { + 'host': 'host-' + uuid.uuid4().hex, + 'binary': 'binary-' + uuid.uuid4().hex, + 'status': 'enabled', + 'disabled_reason': 'earthquake', + } + + # Overwrite default attributes. + service_info.update(attrs) + + service = fakes.FakeResource(info=copy.deepcopy(service_info), + loaded=True) + + return service + + @staticmethod + def create_services(attrs=None, count=2): + """Create multiple fake services. + + :param Dictionary attrs: + A dictionary with all attributes + :param int count: + The number of services to fake + :return: + A list of FakeResource objects faking the services + """ + services = [] + for i in range(0, count): + services.append(FakeService.create_one_service(attrs)) + + return services + + class FakeFlavor(object): """Fake one or more flavors.""" diff --git a/openstackclient/tests/compute/v2/test_service.py b/openstackclient/tests/compute/v2/test_service.py index db09720457..7a5a840f05 100644 --- a/openstackclient/tests/compute/v2/test_service.py +++ b/openstackclient/tests/compute/v2/test_service.py @@ -13,12 +13,10 @@ # under the License. # -import copy import mock from openstackclient.compute.v2 import service from openstackclient.tests.compute.v2 import fakes as compute_fakes -from openstackclient.tests import fakes class TestService(compute_fakes.TestComputev2): @@ -36,6 +34,8 @@ class TestServiceDelete(TestService): def setUp(self): super(TestServiceDelete, self).setUp() + self.service = compute_fakes.FakeService.create_one_service() + self.service_mock.delete.return_value = None # Get the command object to test @@ -43,17 +43,17 @@ class TestServiceDelete(TestService): def test_service_delete_no_options(self): arglist = [ - compute_fakes.service_binary, + self.service.binary, ] verifylist = [ - ('service', compute_fakes.service_binary), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.service_mock.delete.assert_called_with( - compute_fakes.service_binary, + self.service.binary, ) self.assertIsNone(result) @@ -63,23 +63,21 @@ class TestServiceList(TestService): def setUp(self): super(TestServiceList, self).setUp() - self.service_mock.list.return_value = [fakes.FakeResource( - None, - copy.deepcopy(compute_fakes.SERVICE), - loaded=True, - )] + self.service = compute_fakes.FakeService.create_one_service() + + self.service_mock.list.return_value = [self.service] # Get the command object to test self.cmd = service.ListService(self.app, None) def test_service_list(self): arglist = [ - '--host', compute_fakes.service_host, - '--service', compute_fakes.service_binary, + '--host', self.service.host, + '--service', self.service.binary, ] verifylist = [ - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -89,22 +87,22 @@ class TestServiceList(TestService): columns, data = self.cmd.take_action(parsed_args) self.service_mock.list.assert_called_with( - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, ) self.assertNotIn("Disabled Reason", columns) - self.assertNotIn(compute_fakes.service_disabled_reason, list(data)[0]) + self.assertNotIn(self.service.disabled_reason, list(data)[0]) def test_service_list_with_long_option(self): arglist = [ - '--host', compute_fakes.service_host, - '--service', compute_fakes.service_binary, + '--host', self.service.host, + '--service', self.service.binary, '--long' ] verifylist = [ - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ('long', True) ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -115,7 +113,7 @@ class TestServiceList(TestService): columns, data = self.cmd.take_action(parsed_args) self.assertIn("Disabled Reason", columns) - self.assertIn(compute_fakes.service_disabled_reason, list(data)[0]) + self.assertIn(self.service.disabled_reason, list(data)[0]) class TestServiceSet(TestService): @@ -123,59 +121,52 @@ class TestServiceSet(TestService): def setUp(self): super(TestServiceSet, self).setUp() - self.service_mock.enable.return_value = [fakes.FakeResource( - None, - copy.deepcopy(compute_fakes.SERVICE), - loaded=True, - )] + self.service = compute_fakes.FakeService.create_one_service() - self.service_mock.disable.return_value = [fakes.FakeResource( - None, - copy.deepcopy(compute_fakes.SERVICE), - loaded=True, - )] + self.service_mock.enable.return_value = self.service + self.service_mock.disable.return_value = self.service self.cmd = service.SetService(self.app, None) def test_service_set_enable(self): arglist = [ '--enable', - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, ] verifylist = [ ('enabled', True), - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.service_mock.enable.assert_called_with( - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary ) self.assertIsNone(result) def test_service_set_disable(self): arglist = [ '--disable', - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, ] verifylist = [ ('enabled', False), - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.service_mock.disable.assert_called_with( - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary ) self.assertIsNone(result) @@ -184,22 +175,22 @@ class TestServiceSet(TestService): arglist = [ '--disable', '--disable-reason', reason, - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, ] verifylist = [ ('enabled', False), ('disable_reason', reason), - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.service_mock.disable_log_reason.assert_called_with( - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, reason ) self.assertIsNone(result) @@ -208,14 +199,14 @@ class TestServiceSet(TestService): reason = 'earthquake' arglist = [ '--disable-reason', reason, - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, ] verifylist = [ ('enabled', True), ('disable_reason', reason), - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -226,8 +217,8 @@ class TestServiceSet(TestService): mock_log.assert_called_once_with(msg) self.service_mock.enable.assert_called_with( - compute_fakes.service_host, - compute_fakes.service_binary + self.service.host, + self.service.binary ) self.assertIsNone(result) @@ -236,14 +227,14 @@ class TestServiceSet(TestService): arglist = [ '--enable', '--disable-reason', reason, - compute_fakes.service_host, - compute_fakes.service_binary, + self.service.host, + self.service.binary, ] verifylist = [ ('enabled', True), ('disable_reason', reason), - ('host', compute_fakes.service_host), - ('service', compute_fakes.service_binary), + ('host', self.service.host), + ('service', self.service.binary), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -254,7 +245,7 @@ class TestServiceSet(TestService): mock_log.assert_called_once_with(msg) self.service_mock.enable.assert_called_with( - compute_fakes.service_host, - compute_fakes.service_binary + self.service.host, + self.service.binary ) self.assertIsNone(result)