OLD | NEW |
1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import unittest | 5 import unittest |
6 | 6 |
7 import fieldtrial_util | 7 import fieldtrial_util |
8 import os | 8 import os |
9 import tempfile | 9 import tempfile |
10 | 10 |
11 | 11 |
12 class FieldTrialUtilUnittest(unittest.TestCase): | 12 class FieldTrialUtilUnittest(unittest.TestCase): |
13 | 13 |
14 def runGenerateArgs(self, config): | 14 def runGenerateArgs(self, config, platform): |
15 result = None | 15 result = None |
16 with tempfile.NamedTemporaryFile('w', delete=False) as base_file: | 16 with tempfile.NamedTemporaryFile('w', delete=False) as base_file: |
17 try: | 17 try: |
18 base_file.write(config) | 18 base_file.write(config) |
19 base_file.close() | 19 base_file.close() |
20 result = fieldtrial_util.GenerateArgs(base_file.name) | 20 result = fieldtrial_util.GenerateArgs(base_file.name, platform) |
21 finally: | 21 finally: |
22 os.unlink(base_file.name) | 22 os.unlink(base_file.name) |
23 return result | 23 return result |
24 | 24 |
25 def test_GenArgsEmptyPaths(self): | 25 def test_GenArgsEmptyPaths(self): |
26 args = fieldtrial_util.GenerateArgs('') | 26 args = fieldtrial_util.GenerateArgs('', 'linux') |
27 self.assertEqual([], args) | 27 self.assertEqual([], args) |
28 | 28 |
29 def test_GenArgsOneConfig(self): | 29 def test_GenArgsOneConfig(self): |
30 config = '''{ | 30 config = '''{ |
31 "BrowserBlackList": [ | 31 "BrowserBlackList": [ |
32 { "group_name": "Enabled" } | |
33 ], | |
34 "c": [ | |
35 { | 32 { |
36 "group_name": "d.", | 33 "platforms": ["win"], |
37 "params": {"url": "http://www.google.com"}, | 34 "experiments": [{"name": "Enabled"}] |
38 "enable_features": ["x"], | |
39 "disable_features": ["y"] | |
40 } | 35 } |
41 ], | 36 ], |
42 "SimpleParams": [ | 37 "SimpleParams": [ |
43 { | 38 { |
44 "group_name": "Default", | 39 "platforms": ["win"], |
45 "params": {"id": "abc"}, | 40 "experiments": [ |
46 "enable_features": ["a", "b"] | 41 { |
| 42 "name": "Default", |
| 43 "params": {"id": "abc"}, |
| 44 "enable_features": ["a", "b"] |
| 45 } |
| 46 ] |
| 47 } |
| 48 ], |
| 49 "c": [ |
| 50 { |
| 51 "platforms": ["win"], |
| 52 "experiments": [ |
| 53 { |
| 54 "name": "d.", |
| 55 "params": {"url": "http://www.google.com"}, |
| 56 "enable_features": ["x"], |
| 57 "disable_features": ["y"] |
| 58 } |
| 59 ] |
47 } | 60 } |
48 ] | 61 ] |
49 }''' | 62 }''' |
50 result = self.runGenerateArgs(config) | 63 result = self.runGenerateArgs(config, 'win') |
51 self.assertEqual(['--force-fieldtrials=' | 64 self.assertEqual(['--force-fieldtrials=' |
52 'BrowserBlackList/Enabled/c/d./SimpleParams/Default', | 65 'BrowserBlackList/Enabled/SimpleParams/Default/c/d.', |
53 '--force-fieldtrial-params=' | 66 '--force-fieldtrial-params=' |
54 'c.d%2E:url/http%3A%2F%2Fwww%2Egoogle%2Ecom,' | 67 'SimpleParams.Default:id/abc,' |
55 'SimpleParams.Default:id/abc', | 68 'c.d%2E:url/http%3A%2F%2Fwww%2Egoogle%2Ecom', |
56 '--enable-features=x,a,b', | 69 '--enable-features=a,b,x', |
57 '--disable-features=y'], result) | 70 '--disable-features=y'], result) |
58 | 71 |
59 def test_DuplicateEnableFeatures(self): | 72 def test_DuplicateEnableFeatures(self): |
60 config = '''{ | 73 config = '''{ |
61 "X": [ | 74 "X": [ |
62 { | 75 { |
63 "group_name": "x", | 76 "platforms": ["win"], |
64 "enable_features": ["x"] | 77 "experiments": [ |
| 78 { |
| 79 "name": "x", |
| 80 "enable_features": ["x"] |
| 81 } |
| 82 ] |
65 } | 83 } |
66 ], | 84 ], |
67 "Y": [ | 85 "Y": [ |
68 { | 86 { |
69 "group_name": "Default", | 87 "platforms": ["win"], |
70 "enable_features": ["x", "y"] | 88 "experiments": [ |
| 89 { |
| 90 "name": "Default", |
| 91 "enable_features": ["x", "y"] |
| 92 } |
| 93 ] |
71 } | 94 } |
72 ] | 95 ] |
73 }''' | 96 }''' |
74 with self.assertRaises(Exception) as raised: | 97 with self.assertRaises(Exception) as raised: |
75 self.runGenerateArgs(config) | 98 self.runGenerateArgs(config, 'win') |
76 self.assertEqual('Duplicate feature(s) in enable_features: x', | 99 self.assertEqual('Duplicate feature(s) in enable_features: x', |
77 str(raised.exception)) | 100 str(raised.exception)) |
78 | 101 |
79 def test_DuplicateDisableFeatures(self): | 102 def test_DuplicateDisableFeatures(self): |
80 config = '''{ | 103 config = '''{ |
81 "X": [ | 104 "X": [ |
82 { | 105 { |
83 "group_name": "x", | 106 "platforms": ["win"], |
84 "enable_features": ["y", "z"] | 107 "experiments": [ |
| 108 { |
| 109 "name": "x", |
| 110 "enable_features": ["y", "z"] |
| 111 } |
| 112 ] |
85 } | 113 } |
86 ], | 114 ], |
87 "Y": [ | 115 "Y": [ |
88 { | 116 { |
89 "group_name": "Default", | 117 "platforms": ["win"], |
90 "enable_features": ["z", "x", "y"] | 118 "experiments": [ |
| 119 { |
| 120 "name": "Default", |
| 121 "enable_features": ["z", "x", "y"] |
| 122 } |
| 123 ] |
91 } | 124 } |
92 ] | 125 ] |
93 }''' | 126 }''' |
94 with self.assertRaises(Exception) as raised: | 127 with self.assertRaises(Exception) as raised: |
95 self.runGenerateArgs(config) | 128 self.runGenerateArgs(config, 'win') |
96 self.assertEqual('Duplicate feature(s) in enable_features: y, z', | 129 self.assertEqual('Duplicate feature(s) in enable_features: y, z', |
97 str(raised.exception)) | 130 str(raised.exception)) |
98 | 131 |
99 | 132 |
100 def test_DuplicateEnableDisable(self): | 133 def test_DuplicateEnableDisable(self): |
101 config = '''{ | 134 config = '''{ |
102 "X": [ | 135 "X": [ |
103 { | 136 { |
104 "group_name": "x", | 137 "platforms": ["win"], |
105 "enable_features": ["x"] | 138 "experiments": [ |
| 139 { |
| 140 "name": "x", |
| 141 "enable_features": ["x"] |
| 142 } |
| 143 ] |
106 } | 144 } |
107 ], | 145 ], |
108 "Y": [ | 146 "Y": [ |
109 { | 147 { |
110 "group_name": "Default", | 148 "platforms": ["win"], |
111 "disable_features": ["x", "y"] | 149 "experiments": [ |
| 150 { |
| 151 "name": "Default", |
| 152 "disable_features": ["x", "y"] |
| 153 } |
| 154 ] |
112 } | 155 } |
113 ] | 156 ] |
114 }''' | 157 }''' |
115 with self.assertRaises(Exception) as raised: | 158 with self.assertRaises(Exception) as raised: |
116 self.runGenerateArgs(config) | 159 self.runGenerateArgs(config, 'win') |
117 self.assertEqual('Conflicting features set as both enabled and disabled: x', | 160 self.assertEqual('Conflicting features set as both enabled and disabled: x', |
118 str(raised.exception)) | 161 str(raised.exception)) |
119 | 162 |
120 if __name__ == '__main__': | 163 if __name__ == '__main__': |
121 unittest.main() | 164 unittest.main() |
OLD | NEW |