3 # The software in this package is distributed under the GNU General
4 # Public License version 2 (with a special exception described below).
6 # A copy of GNU General Public License (GPL) is included in this distribution,
7 # in the file COPYING.GPL.
9 # As a special exception, if other files instantiate templates or use macros
10 # or inline functions from this file, or you compile this file and link it
11 # with other works to produce a work based on this file, this file
12 # does not by itself cause the resulting work to be covered
13 # by the GNU General Public License.
15 # However the source code for this file must still be made available
16 # in accordance with section (3) of the GNU General Public License.
18 # This exception does not invalidate any other reasons why a work based
19 # on this file might be covered by the GNU General Public License.
21 # Copyright (c) 2016-2018 Intra2net AG <info@intra2net.com>
23 """Unit test for build_cnfvar.py"""
26 from src.cnfline.build_cnfvar import BuildCnfVar
28 TEST_CONFIG_FILENAME = 'some_config.cnf'
31 class BuildCnfVarTest(unittest.TestCase):
33 if os.path.isfile(TEST_CONFIG_FILENAME):
34 os.unlink(TEST_CONFIG_FILENAME)
36 def test_simple(self):
37 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
39 self.assertEqual('FOOBAR', cnfvar.name)
40 self.assertEqual(123, cnfvar.instance)
41 self.assertEqual('some_data', cnfvar.data)
42 self.assertEqual(10, cnfvar.line_no)
44 def test_find_child_line_no(self):
45 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
46 new_child_line_no = cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
48 self.assertEqual(new_child_line_no,
49 cnfvar.find_child_line_no('FOOBAR_CHILD'))
52 self.assertEqual(0, cnfvar.find_child_line_no('FOOBAR_SPACESHARK'))
54 def test_find_free_line_no(self):
55 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
56 self.assertEqual(11, cnfvar.find_free_line_no())
58 cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
59 self.assertEqual(12, cnfvar.find_free_line_no())
61 def test_find_free_child_instance(self):
62 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
63 cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
65 self.assertEqual(0, cnfvar.find_free_child_instance('FOOBAR_OTHER'))
66 self.assertEqual(1, cnfvar.find_free_child_instance('FOOBAR_CHILD'))
68 def test_update_cnf(self):
69 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
70 cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
72 # Update existing cnfvar
73 cnfvar.update_cnf('FOOBAR_CHILD', 0, 'abc')
75 self.assertEqual('10 FOOBAR,123: "some_data"\n'
76 '11 (10) FOOBAR_CHILD,0: "abc"\n', str(cnfvar))
78 def test_string_output(self):
79 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
80 cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
81 cnfvar.update_cnf('FOOBAR_CHILD', 0, 'abc')
82 cnfvar.add_cnf('FOOBAR_CHILD', 1, 'more data')
84 self.assertEqual('10 FOOBAR,123: "some_data"\n'
85 '11 (10) FOOBAR_CHILD,0: "abc"\n'
86 '12 (10) FOOBAR_CHILD,1: "more data"\n', str(cnfvar))
88 def test_del_cnf(self):
89 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
90 cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
91 cnfvar.add_cnf('FOOBAR_CHILD', 1, 'more data')
93 cnfvar.del_cnf('FOOBAR_CHILD')
95 self.assertEqual('10 FOOBAR,123: "some_data"\n', str(cnfvar))
97 def test_add_different_parent_no(self):
98 cnfvar = BuildCnfVar('FOOBAR', 123, 'some_data', 10)
99 sub_parent = cnfvar.add_cnf('FOOBAR_CHILD', 0, 'xxx')
100 cnfvar.add_cnf('FOOBAR_OTHER', 0, 'foo')
101 cnfvar.add_cnf('FOOBAR_CHILD_TYPE', 1, 'spaceshark', sub_parent)
102 cnfvar.add_cnf('FOOBAR_OTHER2', 0, 'foo2')
104 self.assertEqual('10 FOOBAR,123: "some_data"\n'
105 '11 (10) FOOBAR_CHILD,0: "xxx"\n'
106 '12 (10) FOOBAR_OTHER,0: "foo"\n'
107 '13 (11) FOOBAR_CHILD_TYPE,1: "spaceshark"\n'
108 '14 (10) FOOBAR_OTHER2,0: "foo2"\n', str(cnfvar))
110 def test_add_defaults(self):
111 cnfvar = BuildCnfVar('FOOBAR', 0, 'some_data')
113 defaults = {'FOOBAR_SOMETHING': 'abc',
114 'FOOBAR_MODE': 'optimize'}
115 cnfvar.add_defaults(defaults)
117 self.assertTrue('1 FOOBAR,0: "some_data"\n'
118 '2 (1) FOOBAR_SOMETHING,0: "abc"\n'
119 '3 (1) FOOBAR_MODE,0: "optimize"\n' == str(cnfvar)
120 or '1 FOOBAR,0: "some_data"\n'
121 '2 (1) FOOBAR_MODE,0: "optimize"\n'
122 '3 (1) FOOBAR_SOMETHING,0: "abc"\n' == str(cnfvar))
124 def test_mark_as_own_parent(self):
125 cnfvar = BuildCnfVar('FOOBAR_SOMETHING', 123, 'some_data', 10)
127 line_no = cnfvar.add_cnf('FOOBAR_OTHER', 0, 'xxx')
128 cnfvar.mark_as_own_parent(line_no)
130 self.assertEqual('10 FOOBAR_SOMETHING,123: "some_data"\n'
131 '11 FOOBAR_OTHER,0: "xxx"\n', str(cnfvar))
134 cnfvar = BuildCnfVar('FOOBAR', 0, 'some_data')
136 defaults = {'FOOBAR_SOMETHING': 'abc',
137 'FOOBAR_MODE': 'optimize'}
138 cnfvar.add_defaults(defaults)
140 cnfvar.save(TEST_CONFIG_FILENAME)
141 with open(TEST_CONFIG_FILENAME, 'r') as input:
142 read_back = input.read()
144 self.assertTrue('1 FOOBAR,0: "some_data"\n'
145 '2 (1) FOOBAR_SOMETHING,0: "abc"\n'
146 '3 (1) FOOBAR_MODE,0: "optimize"\n' == read_back
147 or '1 FOOBAR,0: "some_data"\n'
148 '2 (1) FOOBAR_MODE,0: "optimize"\n'
149 '3 (1) FOOBAR_SOMETHING,0: "abc"\n' == read_back)
151 os.unlink(TEST_CONFIG_FILENAME)
154 if __name__ == '__main__':