Merge "Add test case description and task file for TC049"
[yardstick.git] / tests / unit / benchmark / contexts / test_node.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2015 Huawei Technologies Co.,Ltd 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.node
13
14 import os
15 import unittest
16
17 from yardstick.benchmark.contexts import node
18
19
20 class NodeContextTestCase(unittest.TestCase):
21
22     NODES_SAMPLE = "nodes_sample.yaml"
23     NODES_DUPLICATE_SAMPLE = "nodes_duplicate_sample.yaml"
24     def setUp(self):
25         self.test_context = node.NodeContext()
26
27     def test_construct(self):
28
29         self.assertIsNone(self.test_context.name)
30         self.assertIsNone(self.test_context.file_path)
31         self.assertEqual(self.test_context.nodes, [])
32         self.assertEqual(self.test_context.controllers, [])
33         self.assertEqual(self.test_context.computes, [])
34         self.assertEqual(self.test_context.baremetals, [])
35
36     def test_unsuccessful_init(self):
37
38         attrs = {
39             'name': 'foo',
40             'file': self._get_file_abspath("error_file")
41         }
42
43         self.assertRaises(SystemExit, self.test_context.init, attrs)
44
45     def test_successful_init(self):
46
47         attrs = {
48             'name': 'foo',
49             'file': self._get_file_abspath(self.NODES_SAMPLE)
50         }
51
52         self.test_context.init(attrs)
53
54         self.assertEqual(self.test_context.name, "foo")
55         self.assertEqual(len(self.test_context.nodes), 4)
56         self.assertEqual(len(self.test_context.controllers), 2)
57         self.assertEqual(len(self.test_context.computes), 1)
58         self.assertEqual(self.test_context.computes[0]["name"], "node3")
59         self.assertEqual(len(self.test_context.baremetals), 1)
60         self.assertEqual(self.test_context.baremetals[0]["name"], "node4")
61
62     def test__get_server_with_dic_attr_name(self):
63
64         attrs = {
65             'name': 'foo',
66             'file': self._get_file_abspath(self.NODES_SAMPLE)
67         }
68
69         self.test_context.init(attrs)
70
71         attr_name = {'name': 'foo.bar'}
72         result = self.test_context._get_server(attr_name)
73
74         self.assertEqual(result, None)
75
76     def test__get_server_not_found(self):
77
78         attrs = {
79             'name': 'foo',
80             'file': self._get_file_abspath(self.NODES_SAMPLE)
81         }
82
83         self.test_context.init(attrs)
84
85         attr_name = 'bar.foo'
86         result = self.test_context._get_server(attr_name)
87
88         self.assertEqual(result, None)
89
90     def test__get_server_duplicate(self):
91
92         attrs = {
93             'name': 'foo',
94             'file': self._get_file_abspath(self.NODES_DUPLICATE_SAMPLE)
95         }
96
97         self.test_context.init(attrs)
98
99         attr_name = 'node1.foo'
100
101         self.assertRaises(SystemExit, self.test_context._get_server, attr_name)
102
103     def test__get_server_found(self):
104
105         attrs = {
106             'name': 'foo',
107             'file': self._get_file_abspath(self.NODES_SAMPLE)
108         }
109
110         self.test_context.init(attrs)
111
112         attr_name = 'node1.foo'
113         result = self.test_context._get_server(attr_name)
114
115         self.assertEqual(result['ip'], '10.229.47.137')
116         self.assertEqual(result['name'], 'node1.foo')
117         self.assertEqual(result['user'], 'root')
118         self.assertEqual(result['key_filename'], '/root/.yardstick_key')
119
120     def _get_file_abspath(self, filename):
121         curr_path = os.path.dirname(os.path.abspath(__file__))
122         file_path = os.path.join(curr_path, filename)
123         return file_path