test_cmdline.py (8470B)
1 import os 2 import sys 3 from unittest import mock 4 5 import mozunit 6 import pytest 7 8 # need this so the raptor unit tests can find raptor/raptor classes 9 here = os.path.abspath(os.path.dirname(__file__)) 10 raptor_dir = os.path.join(os.path.dirname(here), "raptor") 11 sys.path.insert(0, raptor_dir) 12 13 from argparse import ArgumentParser, Namespace 14 15 from cmdline import create_parser, verify_options 16 17 18 def test_verify_options(filedir): 19 args = Namespace( 20 app="firefox", 21 binary="invalid/path", 22 gecko_profile="False", 23 page_cycles=1, 24 page_timeout=60000, 25 debug="True", 26 chimera=False, 27 browsertime_video=False, 28 browsertime_visualmetrics=False, 29 fission=True, 30 fission_mobile=False, 31 test_bytecode_cache=False, 32 webext=False, 33 extra_prefs=[], 34 benchmark_repository=None, 35 benchmark_revision=None, 36 benchmark_branch=None, 37 post_startup_delay=None, 38 power_test=False, 39 ) 40 parser = ArgumentParser() 41 42 with pytest.raises(SystemExit): 43 verify_options(parser, args) 44 45 args.binary = os.path.join(filedir, "fake_binary.exe") 46 verify_options(parser, args) # assert no exception 47 48 args = Namespace( 49 app="geckoview", 50 binary="org.mozilla.geckoview_example", 51 activity="org.mozilla.geckoview_example.GeckoViewActivity", 52 intent="android.intent.action.MAIN", 53 gecko_profile="False", 54 is_release_build=False, 55 host="sophie", 56 chimera=False, 57 browsertime_video=False, 58 browsertime_visualmetrics=False, 59 fission=True, 60 fission_mobile=False, 61 test_bytecode_cache=False, 62 webext=False, 63 extra_prefs=[], 64 benchmark_repository=None, 65 benchmark_revision=None, 66 benchmark_branch=None, 67 post_startup_delay=None, 68 power_test=False, 69 ) 70 verify_options(parser, args) # assert no exception 71 72 args = Namespace( 73 app="refbrow", 74 binary="org.mozilla.reference.browser", 75 activity="org.mozilla.reference.browser.BrowserTestActivity", 76 intent="android.intent.action.MAIN", 77 gecko_profile="False", 78 is_release_build=False, 79 host="sophie", 80 chimera=False, 81 browsertime_video=False, 82 browsertime_visualmetrics=False, 83 fission=True, 84 fission_mobile=False, 85 test_bytecode_cache=False, 86 webext=False, 87 extra_prefs=[], 88 benchmark_repository=None, 89 benchmark_revision=None, 90 benchmark_branch=None, 91 post_startup_delay=None, 92 power_test=False, 93 ) 94 verify_options(parser, args) # assert no exception 95 96 args = Namespace( 97 app="fenix", 98 binary="org.mozilla.fenix.browser", 99 activity="org.mozilla.fenix.browser.BrowserPerformanceTestActivity", 100 intent="android.intent.action.VIEW", 101 gecko_profile="False", 102 is_release_build=False, 103 host="sophie", 104 chimera=False, 105 browsertime_video=False, 106 browsertime_visualmetrics=False, 107 fission=True, 108 fission_mobile=False, 109 test_bytecode_cache=False, 110 webext=False, 111 extra_prefs=[], 112 benchmark_repository=None, 113 benchmark_revision=None, 114 benchmark_branch=None, 115 post_startup_delay=None, 116 power_test=False, 117 ) 118 verify_options(parser, args) # assert no exception 119 120 args = Namespace( 121 app="geckoview", 122 binary="org.mozilla.geckoview_example", 123 activity="org.mozilla.geckoview_example.GeckoViewActivity", 124 intent="android.intent.action.MAIN", 125 gecko_profile="False", 126 is_release_build=False, 127 host="sophie", 128 chimera=False, 129 browsertime_video=False, 130 browsertime_visualmetrics=False, 131 fission=True, 132 fission_mobile=False, 133 test_bytecode_cache=False, 134 webext=False, 135 extra_prefs=[], 136 benchmark_repository=None, 137 benchmark_revision=None, 138 benchmark_branch=None, 139 post_startup_delay=None, 140 power_test=False, 141 ) 142 verify_options(parser, args) # assert no exception 143 144 args = Namespace( 145 app="refbrow", 146 binary="org.mozilla.reference.browser", 147 activity=None, 148 intent="android.intent.action.MAIN", 149 gecko_profile="False", 150 is_release_build=False, 151 host="sophie", 152 chimera=False, 153 browsertime_video=False, 154 browsertime_visualmetrics=False, 155 fission=True, 156 fission_mobile=False, 157 test_bytecode_cache=False, 158 webext=False, 159 extra_prefs=[], 160 benchmark_repository=None, 161 benchmark_revision=None, 162 benchmark_branch=None, 163 post_startup_delay=None, 164 power_test=False, 165 ) 166 parser = ArgumentParser() 167 168 verify_options(parser, args) # also will work as uses default activity 169 170 171 @mock.patch("perftest.Perftest.build_browser_profile", new=mock.MagicMock()) 172 @pytest.mark.parametrize( 173 "args,settings_to_check", 174 [ 175 # Test that post_startup_delay is 30s as expected 176 [ 177 [ 178 "--test", 179 "test-page-1", 180 "--binary", 181 "invalid/path", 182 # This gets set automatically from mach_commands, but is set 183 # to False by default in the Perftest class 184 "--run-local", 185 ], 186 [ 187 ("post_startup_delay", 30000), 188 ("run_local", True), 189 ("debug_mode", False), 190 ], 191 ], 192 # Test that run_local is false by default 193 [ 194 [ 195 "--test", 196 "test-page-1", 197 "--binary", 198 "invalid/path", 199 ], 200 [ 201 ("post_startup_delay", 30000), 202 ("run_local", False), 203 ("debug_mode", False), 204 ], 205 ], 206 # Test that debug mode gets set when running locally 207 [ 208 [ 209 "--test", 210 "test-page-1", 211 "--binary", 212 "invalid/path", 213 "--debug-mode", 214 "--run-local", 215 ], 216 [ 217 ("post_startup_delay", 3000), 218 ("run_local", True), 219 ("debug_mode", True), 220 ], 221 ], 222 # Test that debug mode doesn't get set when we're not running locally 223 [ 224 [ 225 "--test", 226 "test-page-1", 227 "--binary", 228 "invalid/path", 229 "--debug-mode", 230 ], 231 [ 232 ("post_startup_delay", 30000), 233 ("run_local", False), 234 ("debug_mode", False), 235 ], 236 ], 237 ], 238 ) 239 def test_perftest_setup_with_args(ConcretePerftest, args, settings_to_check): 240 parser = create_parser() 241 args = parser.parse_args(args) 242 243 perftest = ConcretePerftest(**vars(args)) 244 for setting, expected in settings_to_check: 245 assert getattr(perftest, setting) == expected 246 247 248 @pytest.mark.parametrize( 249 "args, expected_failure", 250 [ 251 # Test that post_startup_delay is 30s as expected 252 [ 253 { 254 "app": "firefox", 255 "binary": "org.mozilla.reference.browser", 256 "activity": None, 257 "intent": "android.intent.action.MAIN", 258 "gecko_profile": "False", 259 "is_release_build": False, 260 "host": "sophie", 261 "chimera": False, 262 "browsertime_video": False, 263 "browsertime_visualmetrics": False, 264 "fission": True, 265 "fission_mobile": False, 266 "test_bytecode_cache": False, 267 "webext": False, 268 "extra_prefs": [], 269 "benchmark_repository": None, 270 "benchmark_revision": None, 271 "benchmark_branch": None, 272 "post_startup_delay": None, 273 "power_test": True, 274 }, 275 SystemExit, 276 ], 277 ], 278 ) 279 def test_verify_options_failure(ConcretePerftest, args, expected_failure): 280 args = Namespace(**args) 281 parser = ArgumentParser() 282 with pytest.raises(expected_failure): 283 verify_options(parser, args) 284 285 286 if __name__ == "__main__": 287 mozunit.main()