test_androidlog.py (2727B)
1 #!/usr/bin/env python 2 import pathlib 3 from unittest import mock 4 5 import mozunit 6 7 from mozperftest.environment import METRICS, SYSTEM, TEST 8 from mozperftest.tests.support import EXAMPLE_TEST, get_running_env, temp_file 9 from mozperftest.utils import temp_dir 10 11 HERE = pathlib.Path(__file__).parent 12 LOGCAT = HERE / "data" / "logcat" 13 14 15 def fetch(self, url): 16 return str(HERE / "fetched_artifact.zip") 17 18 19 class FakeDevice: 20 def __init__(self, **args): 21 self.apps = [] 22 23 def shell_output(self, *args, **kwargs): 24 return "A Fake Device" 25 26 def uninstall_app(self, apk_name): 27 return True 28 29 def install_app(self, apk, replace=True): 30 if apk not in self.apps: 31 self.apps.append(apk) 32 33 def install_app_baseline_profile(self, apk, replace=True): 34 if apk not in self.apps: 35 self.apps.append(apk) 36 37 def is_app_installed(self, app_name): 38 return True 39 40 def get_logcat(self): 41 with LOGCAT.open() as f: 42 yield from f 43 44 45 def fake_version_producer(self, metadata): 46 return metadata 47 48 49 @mock.patch("mozperftest.system.VersionProducer.run", new=fake_version_producer) 50 @mock.patch("mozperftest.test.browsertime.runner.install_package") 51 @mock.patch( 52 "mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True 53 ) 54 @mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch) 55 @mock.patch( 56 "mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages", 57 new=lambda x, y: None, 58 ) 59 @mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice) 60 def test_android_log(*mocked): 61 with temp_file() as logcat, temp_dir() as output: 62 args = { 63 "flavor": "mobile-browser", 64 "app": "fenix", 65 "android-install-apk": ["this.apk"], 66 "android": True, 67 "console": True, 68 "android-timeout": 30, 69 "android-capture-adb": "stdout", 70 "android-capture-logcat": logcat, 71 "android-app-name": "org.mozilla.fenix", 72 "androidlog": True, 73 "output": output, 74 "browsertime-no-window-recorder": False, 75 "browsertime-viewport-size": "1234x567", 76 "tests": [EXAMPLE_TEST], 77 } 78 79 mach_cmd, metadata, env = get_running_env(**args) 80 81 with env.layers[SYSTEM] as sys, env.layers[TEST] as andro: 82 metadata = andro(sys(metadata)) 83 84 # we want to drop the first result 85 metadata._results = metadata._results[1:] 86 with env.layers[METRICS] as metrics: 87 metadata = metrics(metadata) 88 89 assert pathlib.Path(output, "LogCatstd-output.json").exists() 90 91 92 if __name__ == "__main__": 93 mozunit.main()