From 8828ef86a3baa129ed5c7e461bed33a81eb3fee2 Mon Sep 17 00:00:00 2001 From: tengqm Date: Wed, 15 Feb 2017 03:36:56 -0500 Subject: [PATCH] Avoid import internal classes from SDK (2) This is part of a series of changes related to the usage of SDK. In some test cases, we are importing the resource classes from SDK directly and even instantiate them. This is bad for unit tests. We should instead mock those resources for unit tests. When functional tests are added, the real resource list/dump will be tested instead. Change-Id: I3800f959f3836c77ef1ecff2491af90926e84a26 --- senlinclient/tests/unit/v1/test_cluster.py | 270 ++++++++---------- senlinclient/tests/unit/v1/test_profile.py | 259 ++++++++--------- .../tests/unit/v1/test_profile_type.py | 62 ++-- 3 files changed, 278 insertions(+), 313 deletions(-) diff --git a/senlinclient/tests/unit/v1/test_cluster.py b/senlinclient/tests/unit/v1/test_cluster.py index 0baae1b9..dc2f98bc 100644 --- a/senlinclient/tests/unit/v1/test_cluster.py +++ b/senlinclient/tests/unit/v1/test_cluster.py @@ -14,7 +14,6 @@ import copy import subprocess import mock -from openstack.cluster.v1 import cluster as sdk_cluster from openstack import exceptions as sdk_exc from osc_lib import exceptions as exc import six @@ -32,35 +31,6 @@ class TestCluster(fakes.TestClusteringv1): class TestClusterList(TestCluster): columns = ['id', 'name', 'status', 'created_at', 'updated_at'] - response = {"clusters": [ - { - "created_at": "2015-02-10T14:26:14", - "data": {}, - "desired_capacity": 4, - "domain": 'null', - "id": "7d85f602-a948-4a30-afd4-e84f47471c15", - "init_time": "2015-02-10T14:26:11", - "max_size": -1, - "metadata": {}, - "min_size": 0, - "name": "cluster1", - "node_ids": [ - "b07c57c8-7ab2-47bf-bdf8-e894c0c601b9", - "ecc23d3e-bb68-48f8-8260-c9cf6bcb6e61", - "da1e9c87-e584-4626-a120-022da5062dac" - ], - "policies": [], - "profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a", - "profile_name": "mystack", - "project": "6e18cc2bdbeb48a5b3cad2dc499f6804", - "status": "ACTIVE", - "status_reason": "Cluster scale-in succeeded", - "timeout": 3600, - "updated_at": 'null', - "user": "5e5bf8027826429c96af157f68dc9072" - } - ]} - defaults = { 'global_project': False, 'marker': None, @@ -71,8 +41,35 @@ class TestClusterList(TestCluster): def setUp(self): super(TestClusterList, self).setUp() self.cmd = osc_cluster.ListCluster(self.app, None) - self.mock_client.clusters = mock.Mock( - return_value=self.response) + fake_cluster = mock.Mock( + created_at="2015-02-10T14:26:14", + data={}, + desired_capacity=4, + domain_id=None, + id="7d85f602-a948-4a30-afd4-e84f47471c15", + init_time="2015-02-10T14:26:11", + max_size=-1, + metadata={}, + min_size=0, + node_ids=[ + "b07c57c8-7ab2-47bf-bdf8-e894c0c601b9", + "ecc23d3e-bb68-48f8-8260-c9cf6bcb6e61", + "da1e9c87-e584-4626-a120-022da5062dac" + ], + policies=[], + profile_id="edc63d0a-2ca4-48fa-9854-27926da76a4a", + profile_name="mystack", + project_id="6e18cc2bdbeb48a5b3cad2dc499f6804", + status="ACTIVE", + status_reason="Cluster scale-in succeeded", + timeout=3600, + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_cluster.name = "cluster1" + fake_cluster.to_dict = mock.Mock(return_value={}) + + self.mock_client.clusters = mock.Mock(return_value=[fake_cluster]) def test_cluster_list_defaults(self): arglist = [] @@ -107,8 +104,6 @@ class TestClusterList(TestCluster): self.assertEqual(self.columns, columns) def test_cluster_list_sort_invalid_key(self): - self.mock_client.clusters = mock.Mock( - return_value=self.response) kwargs = copy.deepcopy(self.defaults) kwargs['sort'] = 'bad_key' arglist = ['--sort', 'bad_key'] @@ -118,8 +113,6 @@ class TestClusterList(TestCluster): self.cmd.take_action, parsed_args) def test_cluster_list_sort_invalid_direction(self): - self.mock_client.clusters = mock.Mock( - return_value=self.response) kwargs = copy.deepcopy(self.defaults) kwargs['sort'] = 'name:bad_direction' arglist = ['--sort', 'name:bad_direction'] @@ -148,34 +141,34 @@ class TestClusterList(TestCluster): class TestClusterShow(TestCluster): - response = {"cluster": { - "created_at": "2015-02-11T15:13:20", - "data": {}, - "desired_capacity": 0, - "domain": 'null', - "id": "45edadcb-c73b-4920-87e1-518b2f29f54b", - "init_time": "2015-02-10T14:26:10", - "max_size": -1, - "metadata": {}, - "min_size": 0, - "name": "my_cluster", - "node_ids": [], - "policies": [], - "profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a", - "profile_name": "mystack", - "project": "6e18cc2bdbeb48a5b3cad2dc499f6804", - "status": "ACTIVE", - "status_reason": "Creation succeeded", - "timeout": 3600, - "updated_at": 'null', - "user": "5e5bf8027826429c96af157f68dc9072" - }} def setUp(self): super(TestClusterShow, self).setUp() self.cmd = osc_cluster.ShowCluster(self.app, None) - self.mock_client.get_cluster = mock.Mock( - return_value=sdk_cluster.Cluster(**self.response['cluster'])) + fake_cluster = mock.Mock( + created_at="2015-02-11T15:13:20", + data={}, + desired_capacity=0, + domain_id=None, + id="7d85f602-a948-4a30-afd4-e84f47471c15", + init_time="2015-02-10T14:26:11", + max_size=-1, + metadata={}, + min_size=0, + node_ids=[], + policies=[], + profile_id="edc63d0a-2ca4-48fa-9854-27926da76a4a", + profile_name="mystack", + project_id="6e18cc2bdbeb48a5b3cad2dc499f6804", + status="ACTIVE", + status_reason="Cluster scale-in succeeded", + timeout=3600, + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_cluster.name = "my_cluster" + fake_cluster.to_dict = mock.Mock(return_value={}) + self.mock_client.get_cluster = mock.Mock(return_value=fake_cluster) def test_cluster_show(self): arglist = ['my_cluster'] @@ -193,29 +186,6 @@ class TestClusterShow(TestCluster): class TestClusterCreate(TestCluster): - response = {"cluster": { - "action": "bbf4558b-9fa3-482a-93c2-a4aa5cc85317", - "created_at": 'null', - "data": {}, - "desired_capacity": 4, - "domain": 'null', - "id": "45edadcb-c73b-4920-87e1-518b2f29f54b", - "init_at": "2015-02-10T14:16:10", - "max_size": -1, - "metadata": {}, - "min_size": 0, - "name": "test_cluster", - "node_ids": [], - "policies": [], - "profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a", - "profile_name": "mystack", - "project": "6e18cc2bdbeb48a5b3cad2dc499f6804", - "status": "INIT", - "status_reason": "Initializing", - "timeout": 3600, - "updated_at": 'null', - "user": "5e5bf8027826429c96af157f68dc9072" - }} defaults = { "desired_capacity": 0, @@ -230,10 +200,31 @@ class TestClusterCreate(TestCluster): def setUp(self): super(TestClusterCreate, self).setUp() self.cmd = osc_cluster.CreateCluster(self.app, None) - self.mock_client.create_cluster = mock.Mock( - return_value=sdk_cluster.Cluster(**self.response['cluster'])) - self.mock_client.get_cluster = mock.Mock( - return_value=sdk_cluster.Cluster(**self.response['cluster'])) + fake_cluster = mock.Mock( + created_at="2015-02-11T15:13:20", + data={}, + desired_capacity=0, + domain_id=None, + id="7d85f602-a948-4a30-afd4-e84f47471c15", + init_time="2015-02-10T14:26:11", + max_size=-1, + metadata={}, + min_size=0, + node_ids=[], + policies=[], + profile_id="edc63d0a-2ca4-48fa-9854-27926da76a4a", + profile_name="mystack", + project_id="6e18cc2bdbeb48a5b3cad2dc499f6804", + status="ACTIVE", + status_reason="Cluster scale-in succeeded", + timeout=3600, + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_cluster.name = "my_cluster" + fake_cluster.to_dict = mock.Mock(return_value={}) + self.mock_client.create_cluster = mock.Mock(return_value=fake_cluster) + self.mock_client.get_cluster = mock.Mock(return_value=fake_cluster) def test_cluster_create_defaults(self): arglist = ['test_cluster', '--profile', 'mystack'] @@ -264,28 +255,6 @@ class TestClusterCreate(TestCluster): class TestClusterUpdate(TestCluster): - response = {"cluster": { - "created_at": "2015-02-11T15:13:20", - "data": {}, - "desired_capacity": 0, - "domain": 'null', - "id": "45edadcb-c73b-4920-87e1-518b2f29f54b", - "init_time": "2015-02-10T14:26:10", - "max_size": -1, - "metadata": {}, - "min_size": 0, - "name": "test_cluster", - "node_ids": [], - "policies": [], - "profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a", - "profile_name": "mystack", - "project": "6e18cc2bdbeb48a5b3cad2dc499f6804", - "status": "INIT", - "status_reason": "Initializing", - "timeout": 3600, - "updated_at": 'null', - "user": "5e5bf8027826429c96af157f68dc9072" - }} defaults = { "metadata": { @@ -300,12 +269,32 @@ class TestClusterUpdate(TestCluster): def setUp(self): super(TestClusterUpdate, self).setUp() self.cmd = osc_cluster.UpdateCluster(self.app, None) - self.mock_client.update_cluster = mock.Mock( - return_value=sdk_cluster.Cluster(**self.response['cluster'])) - self.mock_client.get_cluster = mock.Mock( - return_value=sdk_cluster.Cluster(**self.response['cluster'])) - self.mock_client.find_cluster = mock.Mock( - return_value=sdk_cluster.Cluster(**self.response['cluster'])) + fake_cluster = mock.Mock( + created_at="2015-02-11T15:13:20", + data={}, + desired_capacity=0, + domain_id=None, + id="7d85f602-a948-4a30-afd4-e84f47471c15", + init_time="2015-02-10T14:26:11", + max_size=-1, + metadata={}, + min_size=0, + node_ids=[], + policies=[], + profile_id="edc63d0a-2ca4-48fa-9854-27926da76a4a", + profile_name="mystack", + project_id="6e18cc2bdbeb48a5b3cad2dc499f6804", + status="ACTIVE", + status_reason="Cluster scale-in succeeded", + timeout=3600, + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_cluster.name = "my_cluster" + fake_cluster.to_dict = mock.Mock(return_value={}) + self.mock_client.update_cluster = mock.Mock(return_value=fake_cluster) + self.mock_client.get_cluster = mock.Mock(return_value=fake_cluster) + self.mock_client.find_cluster = mock.Mock(return_value=fake_cluster) def test_cluster_update_defaults(self): arglist = ['--name', 'new_cluster', '--metadata', 'nk1=nv1;nk2=nv2', @@ -313,7 +302,7 @@ class TestClusterUpdate(TestCluster): parsed_args = self.check_parser(self.cmd, arglist, []) self.cmd.take_action(parsed_args) self.mock_client.update_cluster.assert_called_with( - '45edadcb-c73b-4920-87e1-518b2f29f54b', **self.defaults) + "7d85f602-a948-4a30-afd4-e84f47471c15", **self.defaults) def test_cluster_update_not_found(self): arglist = ['--name', 'new_cluster', '--metadata', 'nk1=nv1;nk2=nv2', @@ -622,31 +611,6 @@ class TestClusterPolicyDetach(TestCluster): class TestClusterNodeList(TestCluster): columns = ['id', 'name', 'index', 'status', 'physical_id', 'created_at'] - - response = {"nodes": [ - { - "cluster_id": None, - "created_at": "2015-02-27T04:39:21", - "data": {}, - "details": {}, - "domain": None, - "id": "573aa1ba-bf45-49fd-907d-6b5d6e6adfd3", - "index": -1, - "init_at": "2015-02-27T04:39:18", - "metadata": {}, - "name": "node00a", - "physical_id": "cc028275-d078-4729-bf3e-154b7359814b", - "profile_id": "edc63d0a-2ca4-48fa-9854-27926da76a4a", - "profile_name": "mystack", - "project": "6e18cc2bdbeb48a5b3cad2dc499f6804", - "role": None, - "status": "ACTIVE", - "status_reason": "Creation succeeded", - "updated_at": None, - "user": "5e5bf8027826429c96af157f68dc9072" - } - ]} - args = { 'cluster_id': 'my_cluster', 'marker': 'a9448bf6', @@ -657,8 +621,28 @@ class TestClusterNodeList(TestCluster): def setUp(self): super(TestClusterNodeList, self).setUp() self.cmd = osc_cluster.ClusterNodeList(self.app, None) - self.mock_client.nodes = mock.Mock( - return_value=self.response) + fake_node = mock.Mock( + cluster_id="", + created_at="2015-02-11T15:13:20", + data={}, + details={}, + domain_id=None, + id="7d85f602-a948-4a30-afd4-e84f47471c15", + index=-1, + init_at="2015-02-10T14:26:11", + metadata={}, + phyiscal_id="cc028275-d078-4729-bf3e-154b7359814b", + profile_id="edc63d0a-2ca4-48fa-9854-27926da76a4a", + profile_name="mystack", + project_id="6e18cc2bdbeb48a5b3cad2dc499f6804", + status="ACTIVE", + status_reason="Creation succeeded", + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_node.name = "node001" + fake_node.to_dict = mock.Mock(return_value={}) + self.mock_client.nodes = mock.Mock(return_value=[fake_node]) def test_cluster_node_list(self): arglist = ['--limit', '3', '--marker', 'a9448bf6', 'my_cluster'] diff --git a/senlinclient/tests/unit/v1/test_profile.py b/senlinclient/tests/unit/v1/test_profile.py index 1091b2d4..426ba70a 100644 --- a/senlinclient/tests/unit/v1/test_profile.py +++ b/senlinclient/tests/unit/v1/test_profile.py @@ -13,7 +13,6 @@ import copy import mock -from openstack.cluster.v1 import profile as sdk_profile from openstack import exceptions as sdk_exc from osc_lib import exceptions as exc from osc_lib import utils @@ -91,8 +90,20 @@ class TestProfileShow(TestProfile): def setUp(self): super(TestProfileShow, self).setUp() self.cmd = osc_profile.ShowProfile(self.app, None) - self.mock_client.get_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) + fake_profile = mock.Mock( + created_at="2015-03-01T14:28:25", + domain_id=None, + id="7fa885cd-fa39-4531-a42d-780af95c84a4", + metadata={}, + project_id="42d9e9663331431f97b75e25136307ff", + spec={"foo": 'bar'}, + type="os.heat.stack-1.0", + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_profile.name = "test_prof1" + fake_profile.to_dict = mock.Mock(return_value={}) + self.mock_client.get_profile = mock.Mock(return_value=fake_profile) utils.get_dict_properties = mock.Mock(return_value='') def test_profile_show(self): @@ -101,14 +112,12 @@ class TestProfileShow(TestProfile): self.cmd.take_action(parsed_args) self.mock_client.get_profile.assert_called_with('my_profile') profile = self.mock_client.get_profile('my_profile') - self.assertEqual(self.response['profile']['project'], + self.assertEqual("42d9e9663331431f97b75e25136307ff", profile.project_id) - self.assertEqual(self.response['profile']['id'], profile.id) - self.assertEqual(self.response['profile']['metadata'], - profile.metadata) - self.assertEqual(self.response['profile']['name'], profile.name) - self.assertEqual(self.response['profile']['spec'], profile.spec) - self.assertEqual(self.response['profile']['type'], profile.type) + self.assertEqual("7fa885cd-fa39-4531-a42d-780af95c84a4", profile.id) + self.assertEqual({}, profile.metadata) + self.assertEqual("test_prof1", profile.name) + self.assertEqual("os.heat.stack-1.0", profile.type) def test_profile_show_not_found(self): arglist = ['my_profile'] @@ -121,40 +130,31 @@ class TestProfileShow(TestProfile): class TestProfileList(TestProfile): - columns = ['id', 'name', 'type', 'created_at'] - data = {"profiles": [ - { - "created_at": "2016-02-17T13:01:05", - "domain": None, - "id": "757347e0-6526-4a77-a16d-e099fecde123", - "metadata": {}, - "name": "my_profile", - "project": "5f1cc92b578e4e25a3b284179cf20a9b", - "spec": { - "properties": { - "flavor": 1, - "name": "cirros_server" - }, - "type": "os.nova.server", - "version": 1 - }, - "type": "os.nova.server-1.0", - "updated_at": None, - "user": "2d7aca950f3e465d8ef0c81720faf6ff" - } - ]} - defaults = { - 'limit': None, - 'marker': None, - 'sort': None, - 'global_project': False, - } def setUp(self): super(TestProfileList, self).setUp() self.cmd = osc_profile.ListProfile(self.app, None) - self.mock_client.profiles = mock.Mock( - return_value=self.data) + fake_profile = mock.Mock( + created_at="2015-03-01T14:28:25", + domain_id=None, + id="7fa885cd-fa39-4531-a42d-780af95c84a4", + metadata={}, + project_id="42d9e9663331431f97b75e25136307ff", + spec={"foo": 'bar'}, + type="os.heat.stack-1.0", + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_profile.name = "test_profile" + fake_profile.to_dict = mock.Mock(return_value={}) + self.mock_client.profiles = mock.Mock(return_value=[fake_profile]) + self.defaults = { + 'limit': None, + 'marker': None, + 'sort': None, + 'global_project': False, + } + self.columns = ['id', 'name', 'type', 'created_at'] def test_profile_list_defaults(self): arglist = [] @@ -189,8 +189,6 @@ class TestProfileList(TestProfile): self.assertEqual(self.columns, columns) def test_profile_list_sort_invalid_key(self): - self.mock_client.profiles = mock.Mock( - return_value=self.data) kwargs = copy.deepcopy(self.defaults) kwargs['sort'] = 'bad_key' arglist = ['--sort', 'bad_key'] @@ -200,8 +198,6 @@ class TestProfileList(TestProfile): self.cmd.take_action, parsed_args) def test_profile_list_sort_invalid_direction(self): - self.mock_client.profiles = mock.Mock( - return_value=self.data) kwargs = copy.deepcopy(self.defaults) kwargs['sort'] = 'id:bad_direction' arglist = ['--sort', 'id:bad_direction'] @@ -221,6 +217,7 @@ class TestProfileList(TestProfile): class TestProfileDelete(TestProfile): + def setUp(self): super(TestProfileDelete, self).setUp() self.cmd = osc_profile.DeleteProfile(self.app, None) @@ -296,50 +293,46 @@ class TestProfileDelete(TestProfile): class TestProfileCreate(TestProfile): spec_path = 'senlinclient/tests/test_specs/nova_server.yaml' - response = {"profile": { - "created_at": "2016-02-17T12:10:57", - "domain": None, - "id": "e3057c77-a178-4265-bafd-16b2fae50eea", - "metadata": {}, - "name": "pro-nova", - "project": "5f1cc92b578e4e25a3b284179cf20a9b", - "spec": {"properties": { - "flavor": 1, - "image": "cirros-0.3.4-x86_64-uec", - "name": "cirros_server"}, - "type": "os.nova.server", - "version": 1.0}, - "type": "os.nova.server-1.0", - "updated_at": None, - "user": "2d7aca950f3e465d8ef0c81720faf6ff"}} - - defaults = { - "spec": { - "version": 1.0, - "type": "os.nova.server", - "properties": { - "flavor": 1, - "name": "cirros_server", - "image": "cirros-0.3.4-x86_64-uec" - }, - }, - "name": "my_profile", - "metadata": {} - } def setUp(self): super(TestProfileCreate, self).setUp() self.cmd = osc_profile.CreateProfile(self.app, None) - self.mock_client.create_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) - self.mock_client.get_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) + fake_profile = mock.Mock( + created_at="2015-03-01T14:28:25", + domain_id=None, + id="7fa885cd-fa39-4531-a42d-780af95c84a4", + metadata={}, + project_id="42d9e9663331431f97b75e25136307ff", + spec={"foo": 'bar'}, + type="os.heat.stack-1.0", + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_profile.name = "test_profile" + fake_profile.to_dict = mock.Mock(return_value={}) + self.mock_client.create_profile = mock.Mock(return_value=fake_profile) + self.mock_client.get_profile = mock.Mock(return_value=fake_profile) utils.get_dict_properties = mock.Mock(return_value='') + self.defaults = { + "spec": { + "version": 1.0, + "type": "os.nova.server", + "properties": { + "flavor": 1, + "name": "cirros_server", + "image": "cirros-0.3.4-x86_64-uec" + }, + }, + "name": "my_profile", + "metadata": {} + } def test_profile_create_defaults(self): arglist = ['my_profile', '--spec-file', self.spec_path] parsed_args = self.check_parser(self.cmd, arglist, []) + self.cmd.take_action(parsed_args) + self.mock_client.create_profile.assert_called_with(**self.defaults) def test_profile_create_metadata(self): @@ -354,52 +347,43 @@ class TestProfileCreate(TestProfile): class TestProfileUpdate(TestProfile): - response = {"profile": { - "created_at": "2016-02-17T12:10:57", - "domain": None, - "id": "e3057c77-a178-4265-bafd-16b2fae50eea", - "metadata": { - "nk1": "nv1", - "nk2": "nv2", - }, - "name": "new_profile", - "project": "5f1cc92b578e4e25a3b284179cf20a9b", - "spec": {"properties": { - "flavor": 1, - "image": "cirros-0.3.4-x86_64-uec", - "name": "cirros_server"}, - "type": "os.nova.server", - "version": 1.0}, - "type": "os.nova.server-1.0", - "updated_at": None, - "user": "2d7aca950f3e465d8ef0c81720faf6ff"}} - - defaults = { - "name": "new_profile", - "metadata": { - "nk1": "nv1", - "nk2": "nv2", - } - } - def setUp(self): super(TestProfileUpdate, self).setUp() self.cmd = osc_profile.UpdateProfile(self.app, None) - self.mock_client.update_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) - self.mock_client.get_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) - self.mock_client.find_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) + fake_profile = mock.Mock( + created_at="2015-03-01T14:28:25", + domain_id=None, + id="7fa885cd-fa39-4531-a42d-780af95c84a4", + metadata={}, + project_id="42d9e9663331431f97b75e25136307ff", + spec={"foo": 'bar'}, + type="os.heat.stack-1.0", + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_profile.name = "test_profile" + fake_profile.to_dict = mock.Mock(return_value={}) + self.mock_client.update_profile = mock.Mock(return_value=fake_profile) + self.mock_client.get_profile = mock.Mock(return_value=fake_profile) + self.mock_client.find_profile = mock.Mock(return_value=fake_profile) utils.get_dict_properties = mock.Mock(return_value='') def test_profile_update_defaults(self): arglist = ['--name', 'new_profile', '--metadata', 'nk1=nv1;nk2=nv2', 'e3057c77'] parsed_args = self.check_parser(self.cmd, arglist, []) + defaults = { + "name": "new_profile", + "metadata": { + "nk1": "nv1", + "nk2": "nv2", + } + } + self.cmd.take_action(parsed_args) + self.mock_client.update_profile.assert_called_with( - 'e3057c77-a178-4265-bafd-16b2fae50eea', **self.defaults) + "7fa885cd-fa39-4531-a42d-780af95c84a4", **defaults) def test_profile_update_not_found(self): arglist = ['--name', 'new_profile', '--metadata', 'nk1=nv1;nk2=nv2', @@ -416,23 +400,6 @@ class TestProfileUpdate(TestProfile): class TestProfileValidate(TestProfile): spec_path = 'senlinclient/tests/test_specs/nova_server.yaml' - response = {"profile": { - "created_at": None, - "domain": None, - "id": None, - "metadata": None, - "name": "validated_profile", - "project": "5f1cc92b578e4e25a3b284179cf20a9b", - "spec": {"properties": { - "flavor": 1, - "image": "cirros-0.3.4-x86_64-uec", - "name": "cirros_server"}, - "type": "os.nova.server", - "version": 1.0}, - "type": "os.nova.server-1.0", - "updated_at": None, - "user": "2d7aca950f3e465d8ef0c81720faf6ff"}} - defaults = { "spec": { "version": 1.0, @@ -448,8 +415,21 @@ class TestProfileValidate(TestProfile): def setUp(self): super(TestProfileValidate, self).setUp() self.cmd = osc_profile.ValidateProfile(self.app, None) + fake_profile = mock.Mock( + created_at=None, + domain_id=None, + id=None, + metadata={}, + project_id="42d9e9663331431f97b75e25136307ff", + spec={"foo": 'bar'}, + type="os.heat.stack-1.0", + updated_at=None, + user_id="5e5bf8027826429c96af157f68dc9072" + ) + fake_profile.name = "test_profile" + fake_profile.to_dict = mock.Mock(return_value={}) self.mock_client.validate_profile = mock.Mock( - return_value=sdk_profile.Profile(**self.response['profile'])) + return_value=fake_profile) utils.get_dict_properties = mock.Mock(return_value='') def test_profile_validate(self): @@ -457,14 +437,13 @@ class TestProfileValidate(TestProfile): parsed_args = self.check_parser(self.cmd, arglist, []) self.cmd.take_action(parsed_args) self.mock_client.validate_profile.assert_called_with(**self.defaults) + profile = self.mock_client.validate_profile(**self.defaults) - self.assertEqual(self.response['profile']['project'], + + self.assertEqual("42d9e9663331431f97b75e25136307ff", profile.project_id) - self.assertEqual(self.response['profile']['user'], - profile.user_id) - self.assertEqual(self.response['profile']['id'], profile.id) - self.assertEqual(self.response['profile']['metadata'], - profile.metadata) - self.assertEqual(self.response['profile']['name'], profile.name) - self.assertEqual(self.response['profile']['spec'], profile.spec) - self.assertEqual(self.response['profile']['type'], profile.type) + self.assertEqual("5e5bf8027826429c96af157f68dc9072", profile.user_id) + self.assertIsNone(profile.id) + self.assertEqual({}, profile.metadata) + self.assertEqual("test_profile", profile.name) + self.assertEqual("os.heat.stack-1.0", profile.type) diff --git a/senlinclient/tests/unit/v1/test_profile_type.py b/senlinclient/tests/unit/v1/test_profile_type.py index 21633285..42b46967 100644 --- a/senlinclient/tests/unit/v1/test_profile_type.py +++ b/senlinclient/tests/unit/v1/test_profile_type.py @@ -11,7 +11,6 @@ # under the License. import mock -from openstack.cluster.v1 import profile_type as sdk_profile_type from openstack import exceptions as sdk_exc from osc_lib import exceptions as exc @@ -26,54 +25,57 @@ class TestProfileType(fakes.TestClusteringv1): class TestProfileTypeList(TestProfileType): - expected_columns = ['name', 'version', 'support_status'] - list_response = [ - sdk_profile_type.ProfileType( - name='BBB', schema={'foo': 'bar'}, - support_status={ - "1.0": [{"status": "SUPPORTED", "since": "2016.10"}] - } - ), - sdk_profile_type.ProfileType( - name='AAA', schema={'foo': 'bar'}, - support_status={ - "1.0": [{"status": "DEPRECATED", "since": "2016.01"}] - } - ), - ] - expected_rows = [ - ('AAA', '1.0', 'DEPRECATED since 2016.01'), - ('BBB', '1.0', 'SUPPORTED since 2016.10') - ] def setUp(self): super(TestProfileTypeList, self).setUp() self.cmd = osc_profile_type.ProfileTypeList(self.app, None) - self.mock_client.profile_types = mock.Mock( - return_value=self.list_response) + pt1 = mock.Mock( + schema={'foo': 'bar'}, + support_status={ + "1.0": [{"status": "SUPPORTED", "since": "2016.10"}] + } + ) + pt1.name = "BBB" + pt2 = mock.Mock( + schema={'foo': 'bar'}, + support_status={ + "1.0": [{"status": "DEPRECATED", "since": "2016.01"}] + } + ) + pt2.name = "AAA" + self.mock_client.profile_types = mock.Mock(return_value=[pt1, pt2]) def test_profile_type_list(self): arglist = [] parsed_args = self.check_parser(self.cmd, arglist, []) + expected_rows = [ + ('AAA', '1.0', 'DEPRECATED since 2016.01'), + ('BBB', '1.0', 'SUPPORTED since 2016.10') + ] + expected_columns = ['name', 'version', 'support_status'] + columns, rows = self.cmd.take_action(parsed_args) self.mock_client.profile_types.assert_called_with() - self.assertEqual(self.expected_columns, columns) - self.assertEqual(self.expected_rows, rows) + self.assertEqual(expected_columns, columns) + self.assertEqual(expected_rows, rows) class TestProfileTypeShow(TestProfileType): - response = ({'name': 'os.heat.stack-1.0', - 'schema': { - 'foo': 'bar'}}) - def setUp(self): super(TestProfileTypeShow, self).setUp() self.cmd = osc_profile_type.ProfileTypeShow(self.app, None) - self.mock_client.get_profile_type = mock.Mock( - return_value=sdk_profile_type.ProfileType(**self.response) + fake_profile_type = mock.Mock( + schema={'foo': 'bar'}, + support_status={ + "1.0": [{"status": "DEPRECATED", "since": "2016.01"}] + } ) + fake_profile_type.name = "os.heat.stack-1.0" + fake_profile_type.to_dict = mock.Mock(return_value={}) + self.mock_client.get_profile_type = mock.Mock( + return_value=fake_profile_type) def test_profile_type_show(self): arglist = ['os.heat.stack-1.0']