Mercurial > hg > configuration
annotate tests/unit.py @ 81:f3b2563b2a91
move to a class-based architecture
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Tue, 17 Apr 2012 11:36:01 -0700 (2012-04-17) |
| parents | 2a2e9aee5bc6 |
| children | 0804a706d6bf |
| rev | line source |
|---|---|
| 0 | 1 #!/usr/bin/env python |
| 2 | |
| 3 """ | |
| 4 unit tests | |
| 5 """ | |
| 6 | |
|
30
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
7 import configuration |
| 0 | 8 import os |
| 9 import sys | |
|
32
da4d5c5831c6
serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents:
30
diff
changeset
|
10 import tempfile |
| 0 | 11 import unittest |
| 12 | |
|
32
da4d5c5831c6
serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents:
30
diff
changeset
|
13 try: |
|
da4d5c5831c6
serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents:
30
diff
changeset
|
14 import json |
|
da4d5c5831c6
serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents:
30
diff
changeset
|
15 except ImportError: |
|
da4d5c5831c6
serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents:
30
diff
changeset
|
16 import simplejson as json |
|
da4d5c5831c6
serialization testing stubbing
Jeff Hammel <jhammel@mozilla.com>
parents:
30
diff
changeset
|
17 |
|
19
cadc9514f60a
we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
18 from example import ExampleConfiguration # example configuration to test |
|
11
e00afe2c83bf
stubbing configuration parser
Jeff Hammel <jhammel@mozilla.com>
parents:
0
diff
changeset
|
19 |
| 0 | 20 # globals |
| 21 here = os.path.dirname(os.path.abspath(__file__)) | |
| 22 | |
|
24
39f2611db9be
rename a bunch of things and begin to work on the sanity of validation
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
23 class ConfigurationUnitTest(unittest.TestCase): |
| 0 | 24 |
|
24
39f2611db9be
rename a bunch of things and begin to work on the sanity of validation
Jeff Hammel <jhammel@mozilla.com>
parents:
19
diff
changeset
|
25 def test_cli(self): |
|
28
c516ab813079
begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
26 """test command line interface""" |
|
c516ab813079
begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
27 |
|
19
cadc9514f60a
we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
28 example = ExampleConfiguration() |
|
cadc9514f60a
we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
29 |
|
cadc9514f60a
we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
30 # parse command line arguments |
|
65
2a2e9aee5bc6
refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
31 options, args = example.parse_args(['-a', 'ts', '--develop', '-e', '/home/jhammel/bin/firefox']) |
|
25
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
32 |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
33 # ensure that the options appropriately get set |
|
19
cadc9514f60a
we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
34 self.assertEqual(bool(args), False) # no arguments |
|
cadc9514f60a
we have a legitimately failing test!
Jeff Hammel <jhammel@mozilla.com>
parents:
11
diff
changeset
|
35 self.assertEqual(options.develop, True) |
|
25
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
36 self.assertEqual(options.activeTests, ['ts']) |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
37 self.assertEqual(options.browser_path, '/home/jhammel/bin/firefox') |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
38 |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
39 # ensure that the configuration appropriately gets updated |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
40 self.assertEqual(example.config['develop'], True) |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
41 self.assertEqual(example.config['activeTests'], ['ts']) |
|
b39e550402ea
we now update configuration correctly
Jeff Hammel <jhammel@mozilla.com>
parents:
24
diff
changeset
|
42 self.assertEqual(example.config['browser_path'], '/home/jhammel/bin/firefox') |
| 0 | 43 |
|
28
c516ab813079
begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
44 def test_configuration_providers(self): |
|
c516ab813079
begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
45 """test file-based configuration providers""" |
|
39
3c91bf85adb5
actually test serialization
Jeff Hammel <jhammel@mozilla.com>
parents:
38
diff
changeset
|
46 # requires json/simplejson to be installed |
|
30
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
47 |
|
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
48 example = ExampleConfiguration() |
|
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
49 |
|
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
50 # see what providers you got |
|
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
51 json_provider = example.configuration_provider('json') |
|
b27a7cb2dd5b
stub test for configuration providers
Jeff Hammel <jhammel@mozilla.com>
parents:
28
diff
changeset
|
52 self.assertTrue(isinstance(json_provider, configuration.JSON)) |
|
28
c516ab813079
begin stubbing serialization/deserialization
Jeff Hammel <jhammel@mozilla.com>
parents:
25
diff
changeset
|
53 |
|
33
b7d6a90b0bb5
setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents:
32
diff
changeset
|
54 # serialize to a temporary file |
|
37
a1f8dec4d4f9
we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents:
36
diff
changeset
|
55 filename = tempfile.mktemp(suffix='.json') |
|
38
8909ae1cc4ea
fix serialization (stub) tests
Jeff Hammel <jhammel@mozilla.com>
parents:
37
diff
changeset
|
56 self.assertEqual(example.filename2format(filename), 'json') |
|
37
a1f8dec4d4f9
we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents:
36
diff
changeset
|
57 self.assertFalse(os.path.exists(filename)) |
|
34
79aca36abd9a
fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents:
33
diff
changeset
|
58 config = {'browser_path': '/home/jhammel/bin/firefox', |
|
79aca36abd9a
fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents:
33
diff
changeset
|
59 'activeTests': ['ts']} |
|
79aca36abd9a
fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents:
33
diff
changeset
|
60 example(config) |
|
79aca36abd9a
fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents:
33
diff
changeset
|
61 config['test_timeout'] = 1200 # default |
|
79aca36abd9a
fill in defaults if not present
Jeff Hammel <jhammel@mozilla.com>
parents:
33
diff
changeset
|
62 self.assertEqual(config, example.config) |
|
37
a1f8dec4d4f9
we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents:
36
diff
changeset
|
63 example.serialize(filename) |
|
a1f8dec4d4f9
we has another broken test
Jeff Hammel <jhammel@mozilla.com>
parents:
36
diff
changeset
|
64 self.assertTrue(os.path.exists(filename)) |
|
39
3c91bf85adb5
actually test serialization
Jeff Hammel <jhammel@mozilla.com>
parents:
38
diff
changeset
|
65 serialized = json.loads(file(filename).read()) |
|
3c91bf85adb5
actually test serialization
Jeff Hammel <jhammel@mozilla.com>
parents:
38
diff
changeset
|
66 self.assertEqual(serialized, config) |
| 42 | 67 |
| 68 # deserialize | |
| 69 deserialized = example.deserialize(filename) | |
| 70 self.assertEqual(deserialized, config) | |
| 71 | |
| 72 # cleanup | |
|
33
b7d6a90b0bb5
setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents:
32
diff
changeset
|
73 if os.path.exists(filename): |
|
b7d6a90b0bb5
setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents:
32
diff
changeset
|
74 os.remove(filename) |
|
b7d6a90b0bb5
setup for serialization testing
Jeff Hammel <jhammel@mozilla.com>
parents:
32
diff
changeset
|
75 |
|
48
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
76 def test_missing_values(self): |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
77 """ensure that Configuration raises a missing value exception""" |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
78 |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
79 example = ExampleConfiguration() |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
80 |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
81 exception = None |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
82 try: |
|
65
2a2e9aee5bc6
refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
83 example.parse_args(args=[]) |
|
48
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
84 except Exception, exception: |
|
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
85 pass |
| 49 | 86 self.assertTrue(isinstance(exception, configuration.MissingValueException)) |
|
48
84fb8ad5ba81
ensure that missing values raise the correct exception
Jeff Hammel <jhammel@mozilla.com>
parents:
43
diff
changeset
|
87 |
|
36
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
88 def test_required(self): |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
89 """ensure you have to have required values""" |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
90 |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
91 example = ExampleConfiguration() |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
92 |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
93 # ensure you get an exception |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
94 missingvalueexception = None |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
95 try: |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
96 example() |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
97 except configuration.MissingValueException, e: |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
98 missingvalueexception = e |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
99 self.assertTrue(isinstance(e, configuration.MissingValueException)) |
|
d218df4d0b4c
add test for missing values
Jeff Hammel <jhammel@mozilla.com>
parents:
34
diff
changeset
|
100 |
|
40
056280e7a6ea
stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
101 def test_multiple_configurations(self): |
|
056280e7a6ea
stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
102 """test having multiple configurations""" |
|
056280e7a6ea
stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
103 |
|
056280e7a6ea
stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
104 # simple override |
|
056280e7a6ea
stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
105 args1 = ['-e', '/opt/bin/firefox'] |
|
056280e7a6ea
stub munging configuration
Jeff Hammel <jhammel@mozilla.com>
parents:
39
diff
changeset
|
106 |
| 55 | 107 # simple serialized file |
| 108 json_file = os.path.join(here, 'base.json') | |
| 109 assert os.path.exists(json_file) | |
| 110 json_config = json.loads(file(json_file).read()) | |
| 111 | |
| 112 # parse the json file | |
| 113 example = ExampleConfiguration() | |
|
65
2a2e9aee5bc6
refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
114 example.parse_args([json_file]) |
| 55 | 115 self.assertEqual(example.config, json_config) |
| 116 | |
| 117 # parse the json file with overrides | |
| 118 example = ExampleConfiguration() | |
|
65
2a2e9aee5bc6
refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
119 example.parse_args([json_file] + args1) |
| 55 | 120 config = json_config.copy() |
| 121 config['browser_path'] = '/opt/bin/firefox' | |
| 122 self.assertEqual(example.config, config) | |
| 43 | 123 |
|
56
7f8e9c5d1606
introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents:
55
diff
changeset
|
124 # it shouldn't matter in which order the arguments are |
|
7f8e9c5d1606
introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents:
55
diff
changeset
|
125 example = ExampleConfiguration() |
|
65
2a2e9aee5bc6
refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
126 example.parse_args(args1 + [json_file]) |
|
56
7f8e9c5d1606
introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents:
55
diff
changeset
|
127 self.assertEqual(example.config, config) |
|
7f8e9c5d1606
introduce a somewhat redundant test
Jeff Hammel <jhammel@mozilla.com>
parents:
55
diff
changeset
|
128 |
|
58
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
129 # Now a tricky case: |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
130 # the default value for test_timeout is 1200: |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
131 example = ExampleConfiguration() |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
132 self.assertEqual(example.options['test_timeout']['default'], 1200) |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
133 # The value from base.json is 60: |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
134 self.assertEqual(json_config['test_timeout'], 60) |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
135 self.assertEqual(config['test_timeout'], 60) |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
136 # but we can override it back from the "command line" |
|
65
2a2e9aee5bc6
refactor completed and tests pass again
Jeff Hammel <jhammel@mozilla.com>
parents:
58
diff
changeset
|
137 example.parse_args(args1 + [json_file, '--test_timeout', '1200']) |
|
58
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
138 config['test_timeout'] = 1200 |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
139 self.assertEqual(example.config, config) |
|
f7dc5cf2540c
add complex test, now we can refactor
Jeff Hammel <jhammel@mozilla.com>
parents:
56
diff
changeset
|
140 |
| 0 | 141 if __name__ == '__main__': |
| 142 unittest.main() |
