control_data_unittest.py revision e0493a4af57c1a73376a7bafaed542c01f588196
1#!/usr/bin/python
2
3import os, sys, unittest
4import common
5from autotest_lib.client.common_lib import control_data, autotemp
6
7ControlData = control_data.ControlData
8
9CONTROL = """
10AUTHOR = 'Author'
11DEPENDENCIES = "console, power"
12DOC = \"\"\"\
13doc stuff\"\"\"
14# EXPERIMENTAL should implicitly be False
15NAME = 'nA' "mE"
16RUN_VERIFY = False
17SYNC_COUNT = 2
18TIME='short'
19TEST_CLASS=u'Kernel'
20TEST_CATEGORY='Stress'
21TEST_TYPE='client'
22"""
23
24
25class ParseControlTest(unittest.TestCase):
26    def setUp(self):
27        self.control_tmp = autotemp.tempfile(unique_id='control_unit',
28                                             text=True)
29        os.write(self.control_tmp.fd, CONTROL)
30
31
32    def tearDown(self):
33        self.control_tmp.clean()
34
35
36    def test_parse_control(self):
37        cd = control_data.parse_control(self.control_tmp.name, True)
38        self.assertEquals(cd.author, "Author")
39        self.assertEquals(cd.dependencies, set(['console', 'power']))
40        self.assertEquals(cd.doc, "doc stuff")
41        self.assertEquals(cd.experimental, False)
42        self.assertEquals(cd.name, "nAmE")
43        self.assertEquals(cd.run_verify, False)
44        self.assertEquals(cd.sync_count, 2)
45        self.assertEquals(cd.time, "short")
46        self.assertEquals(cd.test_class, "kernel")
47        self.assertEquals(cd.test_category, "stress")
48        self.assertEquals(cd.test_type, "client")
49
50
51class SetMethodTests(unittest.TestCase):
52    def setUp(self):
53        self.required_vars = control_data.REQUIRED_VARS
54        control_data.REQUIRED_VARS = set()
55
56
57    def tearDown(self):
58        control_data.REQUIRED_VARS = self.required_vars
59
60
61    def test_bool(self):
62        cd = ControlData({}, 'filename')
63        cd._set_bool('foo', 'False')
64        self.assertEquals(cd.foo, False)
65        cd._set_bool('foo', True)
66        self.assertEquals(cd.foo, True)
67        cd._set_bool('foo', 'FALSE')
68        self.assertEquals(cd.foo, False)
69        cd._set_bool('foo', 'true')
70        self.assertEquals(cd.foo, True)
71        self.assertRaises(ValueError, cd._set_bool, 'foo', '')
72        self.assertRaises(ValueError, cd._set_bool, 'foo', 1)
73        self.assertRaises(ValueError, cd._set_bool, 'foo', [])
74        self.assertRaises(ValueError, cd._set_bool, 'foo', None)
75
76
77    def test_int(self):
78        cd = ControlData({}, 'filename')
79        cd._set_int('foo', 0)
80        self.assertEquals(cd.foo, 0)
81        cd._set_int('foo', '0')
82        self.assertEquals(cd.foo, 0)
83        cd._set_int('foo', '-1', min=-2, max=10)
84        self.assertEquals(cd.foo, -1)
85        self.assertRaises(ValueError, cd._set_int, 'foo', 0, min=1)
86        self.assertRaises(ValueError, cd._set_int, 'foo', 1, max=0)
87        self.assertRaises(ValueError, cd._set_int, 'foo', 'x')
88        self.assertRaises(ValueError, cd._set_int, 'foo', '')
89        self.assertRaises(TypeError, cd._set_int, 'foo', None)
90
91
92    def test_set(self):
93        cd = ControlData({}, 'filename')
94        cd._set_set('foo', 'a')
95        self.assertEquals(cd.foo, set(['a']))
96        cd._set_set('foo', 'a,b,c')
97        self.assertEquals(cd.foo, set(['a', 'b', 'c']))
98        cd._set_set('foo', ' a , b , c     ')
99        self.assertEquals(cd.foo, set(['a', 'b', 'c']))
100        cd._set_set('foo', None)
101        self.assertEquals(cd.foo, set(['None']))
102
103
104    def test_string(self):
105        cd = ControlData({}, 'filename')
106        cd._set_string('foo', 'a')
107        self.assertEquals(cd.foo, 'a')
108        cd._set_string('foo', 'b')
109        self.assertEquals(cd.foo, 'b')
110        cd._set_string('foo', 'B')
111        self.assertEquals(cd.foo, 'B')
112        cd._set_string('foo', 1)
113        self.assertEquals(cd.foo, '1')
114        cd._set_string('foo', None)
115        self.assertEquals(cd.foo, 'None')
116        cd._set_string('foo', [])
117        self.assertEquals(cd.foo, '[]')
118
119
120    def test_option(self):
121        options = ['a', 'b']
122        cd = ControlData({}, 'filename')
123        cd._set_option('foo', 'a', options)
124        self.assertEquals(cd.foo, 'a')
125        cd._set_option('foo', 'b', options)
126        self.assertEquals(cd.foo, 'b')
127        cd._set_option('foo', 'B', options)
128        self.assertEquals(cd.foo, 'B')
129        self.assertRaises(ValueError, cd._set_option,
130                          'foo', 'x', options)
131        self.assertRaises(ValueError, cd._set_option,
132                          'foo', 1, options)
133        self.assertRaises(ValueError, cd._set_option,
134                          'foo', [], options)
135        self.assertRaises(ValueError, cd._set_option,
136                          'foo', None, options)
137
138
139# this is so the test can be run in standalone mode
140if __name__ == '__main__':
141    unittest.main()
142