3 ##############################################################################
4 # Copyright (c) 2017 Intel Corporation
6 # All rights reserved. This program and the accompanying materials
7 # are made available under the terms of the Apache License, Version 2.0
8 # which accompanies this distribution, and is available at
9 # http://www.apache.org/licenses/LICENSE-2.0
10 ##############################################################################
12 # Unittest for yardstick.benchmark.orchestrator.heat
14 from tempfile import NamedTemporaryFile
19 from yardstick.benchmark.contexts import node
20 from yardstick.orchestrator import heat
23 class HeatContextTestCase(unittest.TestCase):
25 def test_get_short_key_uuid(self):
27 k = heat.get_short_key_uuid(u)
28 self.assertEqual(heat.HEAT_KEY_UUID_LENGTH, len(k))
29 self.assertIn(k, str(u))
31 class HeatTemplateTestCase(unittest.TestCase):
34 self.template = heat.HeatTemplate('test')
36 def test_add_tenant_network(self):
37 self.template.add_network('some-network')
39 self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::Net')
41 def test_add_provider_network(self):
42 self.template.add_network('some-network', 'physnet2', 'sriov')
44 self.assertEqual(self.template.resources['some-network']['type'], 'OS::Neutron::ProviderNet')
45 self.assertEqual(self.template.resources['some-network']['properties']['physical_network'], 'physnet2')
47 def test_add_subnet(self):
48 netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
49 self.template.add_subnet('some-subnet', "some-network", netattrs['cidr'])
51 self.assertEqual(self.template.resources['some-subnet']['type'], 'OS::Neutron::Subnet')
52 self.assertEqual(self.template.resources['some-subnet']['properties']['cidr'], '10.0.0.0/24')
54 def test_add_router(self):
55 self.template.add_router('some-router', 'ext-net', 'some-subnet')
57 self.assertEqual(self.template.resources['some-router']['type'], 'OS::Neutron::Router')
58 self.assertIn('some-subnet', self.template.resources['some-router']['depends_on'])
60 def test_add_router_interface(self):
61 self.template.add_router_interface('some-router-if', 'some-router', 'some-subnet')
63 self.assertEqual(self.template.resources['some-router-if']['type'], 'OS::Neutron::RouterInterface')
64 self.assertIn('some-subnet', self.template.resources['some-router-if']['depends_on'])
66 def test_add_servergroup(self):
67 self.template.add_servergroup('some-server-group', 'anti-affinity')
69 self.assertEqual(self.template.resources['some-server-group']['type'], 'OS::Nova::ServerGroup')
70 self.assertEqual(self.template.resources['some-server-group']['properties']['policies'], ['anti-affinity'])
72 def test__add_resources_to_template_raw(self):
74 self.test_context = node.NodeContext()
75 self.test_context.name = 'foo'
76 self.test_context.template_file = '/tmp/some-heat-file'
77 self.test_context.heat_parameters = {'image': 'cirros'}
78 self.test_context.key_filename = "/tmp/1234"
79 self.test_context.keypair_name = "foo-key"
80 self.test_context.secgroup_name = "foo-secgroup"
81 self.test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
87 self.heat_object = heat.HeatObject()
88 self.heat_tmp_object = heat.HeatObject()
90 self.heat_stack = heat.HeatStack("tmpStack")
91 self.heat_stack.stacks_exist()
93 self.test_context.tmpfile = NamedTemporaryFile(delete=True, mode='w+t')
94 self.test_context.tmpfile.write("heat_template_version: 2015-04-30")
95 self.test_context.tmpfile.flush()
96 self.test_context.tmpfile.seek(0)
97 self.heat_tmp_template = heat.HeatTemplate(self.heat_tmp_object, self.test_context.tmpfile.name,
98 heat_parameters= {"dict1": 1, "dict2": 2})
100 self.heat_template = heat.HeatTemplate(self.heat_object)
101 self.heat_template.resources = {}
103 self.heat_template.add_network("network1")
104 self.heat_template.add_network("network2")
105 self.heat_template.add_security_group("sec_group1")
106 self.heat_template.add_security_group("sec_group2")
107 self.heat_template.add_subnet("subnet1", "network1", "cidr1")
108 self.heat_template.add_subnet("subnet2", "network2", "cidr2")
109 self.heat_template.add_router("router1", "gw1", "subnet1")
110 self.heat_template.add_router_interface("router_if1", "router1", "subnet1")
111 self.heat_template.add_port("port1", "network1", "subnet1")
112 self.heat_template.add_port("port2", "network2", "subnet2", sec_group_id="sec_group1",provider="not-sriov")
113 self.heat_template.add_port("port3", "network2", "subnet2", sec_group_id="sec_group1",provider="sriov")
114 self.heat_template.add_floating_ip("floating_ip1", "network1", "port1", "router_if1")
115 self.heat_template.add_floating_ip("floating_ip2", "network2", "port2", "router_if2", "foo-secgroup")
116 self.heat_template.add_floating_ip_association("floating_ip1_association", "floating_ip1", "port1")
117 self.heat_template.add_servergroup("server_grp2", "affinity")
118 self.heat_template.add_servergroup("server_grp3", "anti-affinity")
119 self.heat_template.add_security_group("security_group")
120 self.heat_template.add_server(name="server1", image="image1", flavor="flavor1", flavors=[])
121 self.heat_template.add_server_group(name="servergroup", policies=["policy1","policy2"])
122 self.heat_template.add_server_group(name="servergroup", policies="policy1")
123 self.heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=[], ports=["port1", "port2"],
124 networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
125 key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
126 additional_properties={"prop1": 1, "prop2": 2})
127 self.heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor1", "flavor2"],
128 ports=["port1", "port2"],
129 networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
130 key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
131 additional_properties={"prop1": 1, "prop2": 2} )
132 self.heat_template.add_server(name="server2", image="image1", flavor="flavor1", flavors=["flavor3", "flavor4"],
133 ports=["port1", "port2"],
134 networks=["network1", "network2"], scheduler_hints="hints1", user="user1",
135 key_name="foo-key", user_data="user", metadata={"cat": 1, "doc": 2},
136 additional_properties={"prop1": 1, "prop2": 2})
137 self.heat_template.add_flavor(name="flavor1", vcpus=1, ram=2048, disk=1,extra_specs={"cat": 1, "dog": 2})
138 self.heat_template.add_flavor(name=None, vcpus=1, ram=2048)
139 self.heat_template.add_server(name="server1",
143 ports=["port1", "port2"],
144 networks=["network1", "network2"],
145 scheduler_hints="hints1",
149 metadata={"cat": 1, "doc": 2},
150 additional_properties= {"prop1": 1, "prop2": 2} )
151 self.heat_template.add_network("network1")
153 self.heat_template.add_flavor("test")
154 self.assertEqual(self.heat_template.resources['test']['type'], 'OS::Nova::Flavor')
157 class HeatStackTestCase(unittest.TestCase):
159 def test_delete_calls__delete_multiple_times(self):
160 stack = heat.HeatStack('test')
162 with mock.patch.object(stack, "_delete") as delete_mock:
164 # call once and then call again if uuid is not none
165 self.assertGreater(delete_mock.call_count, 1)
167 def test_delete_all_calls_delete(self):
168 stack = heat.HeatStack('test')
170 with mock.patch.object(stack, "delete") as delete_mock:
172 self.assertGreater(delete_mock.call_count, 0)