Add SRIOV support
[yardstick.git] / tests / unit / benchmark / contexts / test_heat.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2015 Ericsson AB and others.
5 #
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 ##############################################################################
11
12 # Unittest for yardstick.benchmark.contexts.heat
13
14 from __future__ import absolute_import
15
16 import logging
17 import os
18 import unittest
19 import uuid
20
21 import mock
22
23 from yardstick.benchmark.contexts import heat
24 from yardstick.benchmark.contexts import model
25
26
27 LOG = logging.getLogger(__name__)
28
29
30 class HeatContextTestCase(unittest.TestCase):
31
32     def setUp(self):
33         self.test_context = heat.HeatContext()
34         self.mock_context = mock.Mock(spec=heat.HeatContext())
35
36     def test_construct(self):
37
38         self.assertIsNone(self.test_context.name)
39         self.assertIsNone(self.test_context.stack)
40         self.assertEqual(self.test_context.networks, [])
41         self.assertEqual(self.test_context.servers, [])
42         self.assertEqual(self.test_context.placement_groups, [])
43         self.assertEqual(self.test_context.server_groups, [])
44         self.assertIsNone(self.test_context.keypair_name)
45         self.assertIsNone(self.test_context.secgroup_name)
46         self.assertEqual(self.test_context._server_map, {})
47         self.assertIsNone(self.test_context._image)
48         self.assertIsNone(self.test_context._flavor)
49         self.assertIsNone(self.test_context._user)
50         self.assertIsNone(self.test_context.template_file)
51         self.assertIsNone(self.test_context.heat_parameters)
52         self.assertIsNotNone(self.test_context.key_uuid)
53         self.assertIsNotNone(self.test_context.key_filename)
54
55     @mock.patch('yardstick.benchmark.contexts.heat.PlacementGroup')
56     @mock.patch('yardstick.benchmark.contexts.heat.ServerGroup')
57     @mock.patch('yardstick.benchmark.contexts.heat.Network')
58     @mock.patch('yardstick.benchmark.contexts.heat.Server')
59     def test_init(self, mock_server, mock_network, mock_sg, mock_pg):
60
61         pgs = {'pgrp1': {'policy': 'availability'}}
62         sgs = {'servergroup1': {'policy': 'affinity'}}
63         networks = {'bar': {'cidr': '10.0.1.0/24'}}
64         servers = {'baz': {'floating_ip': True, 'placement': 'pgrp1'}}
65         attrs = {'name': 'foo',
66                  'placement_groups': pgs,
67                  'server_groups': sgs,
68                  'networks': networks,
69                  'servers': servers}
70
71         self.test_context.init(attrs)
72
73         self.assertEqual(self.test_context.name, "foo")
74         self.assertEqual(self.test_context.keypair_name, "foo-key")
75         self.assertEqual(self.test_context.secgroup_name, "foo-secgroup")
76
77         mock_pg.assert_called_with('pgrp1', self.test_context,
78                                    pgs['pgrp1']['policy'])
79         mock_sg.assert_called_with('servergroup1', self.test_context,
80                                    sgs['servergroup1']['policy'])
81         self.assertTrue(len(self.test_context.placement_groups) == 1)
82         self.assertTrue(len(self.test_context.server_groups) == 1)
83
84         mock_network.assert_called_with(
85             'bar', self.test_context, networks['bar'])
86         self.assertTrue(len(self.test_context.networks) == 1)
87
88         mock_server.assert_called_with('baz', self.test_context,
89                                        servers['baz'])
90         self.assertTrue(len(self.test_context.servers) == 1)
91
92         if os.path.exists(self.test_context.key_filename):
93             try:
94                 os.remove(self.test_context.key_filename)
95                 os.remove(self.test_context.key_filename + ".pub")
96             except OSError:
97                 LOG.exception("key_filename: %s",
98                               self.test_context.key_filename)
99
100     @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
101     def test__add_resources_to_template_no_servers(self, mock_template):
102
103         self.test_context.keypair_name = "foo-key"
104         self.test_context.secgroup_name = "foo-secgroup"
105         self.test_context.key_uuid = "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b"
106         netattrs = {'cidr': '10.0.0.0/24', 'provider': None, 'external_network': 'ext_net'}
107         self.mock_context.name = 'bar'
108         self.test_context.networks = [model.Network("fool-network", self.mock_context, netattrs)]
109
110         self.test_context._add_resources_to_template(mock_template)
111         mock_template.add_keypair.assert_called_with(
112             "foo-key",
113             "2f2e4997-0a8e-4eb7-9fa4-f3f8fbbc393b")
114         mock_template.add_security_group.assert_called_with("foo-secgroup")
115         mock_template.add_network.assert_called_with("bar-fool-network", 'physnet1', None)
116         mock_template.add_router.assert_called_with("bar-fool-network-router", netattrs["external_network"], "bar-fool-network-subnet")
117         mock_template.add_router_interface.assert_called_with("bar-fool-network-router-if0", "bar-fool-network-router", "bar-fool-network-subnet")
118
119     @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
120     def test_deploy(self, mock_template):
121
122         self.test_context.name = 'foo'
123         self.test_context.template_file = '/bar/baz/some-heat-file'
124         self.test_context.heat_parameters = {'image': 'cirros'}
125         self.test_context.deploy()
126
127         mock_template.assert_called_with(self.test_context.name,
128                                          self.test_context.template_file,
129                                          self.test_context.heat_parameters)
130         self.assertIsNotNone(self.test_context.stack)
131
132     @mock.patch('yardstick.benchmark.contexts.heat.HeatTemplate')
133     def test_undeploy(self, mock_template):
134
135         self.test_context.stack = mock_template
136         self.test_context.undeploy()
137
138         self.assertTrue(mock_template.delete.called)
139
140     def test__get_server(self):
141
142         self.mock_context.name = 'bar'
143         self.mock_context.stack.outputs = {'public_ip': '127.0.0.1',
144                                            'private_ip': '10.0.0.1'}
145         self.mock_context.key_uuid = uuid.uuid4()
146
147         attr_name = {'name': 'foo.bar',
148                      'public_ip_attr': 'public_ip',
149                      'private_ip_attr': 'private_ip'}
150         result = heat.HeatContext._get_server(self.mock_context, attr_name)
151
152         self.assertEqual(result['ip'], '127.0.0.1')
153         self.assertEqual(result['private_ip'], '10.0.0.1')