| 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 |