summaryrefslogtreecommitdiffstats
path: root/python/mozperftest/mozperftest/tests/test_macos.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozperftest/mozperftest/tests/test_macos.py')
-rw-r--r--python/mozperftest/mozperftest/tests/test_macos.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/python/mozperftest/mozperftest/tests/test_macos.py b/python/mozperftest/mozperftest/tests/test_macos.py
new file mode 100644
index 0000000000..6999f4792d
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_macos.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+import os
+import platform
+import subprocess
+from pathlib import Path
+from unittest import mock
+
+import mozunit
+import pytest
+
+from mozperftest.system.macos import MacosDevice
+from mozperftest.tests.support import DMG, get_running_env
+
+
+def run_proc(*args, **kw):
+ if args[0][1] == "attach":
+ where = args[0][4]
+ bindir = Path(where, "firefox.app", "Contents", "MacOS")
+ os.makedirs(str(bindir))
+ firefox_bin = bindir / "firefox"
+ with firefox_bin.open("w") as f:
+ f.write("OK")
+
+
+def mock_calls(test):
+ # on macOS we don't mock the system calls
+ # so we're mounting for real using hdiutil
+ if platform.system() == "Darwin":
+ return test
+
+ # on other platforms, we're unsing run_proc
+ @mock.patch("mozperftest.system.macos.MacosDevice._run_process", new=run_proc)
+ def wrapped(*args, **kw):
+ return test(*args, **kw)
+
+
+@mock_calls
+def test_mount_dmg():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary=str(DMG))
+ device = MacosDevice(env, mach_cmd)
+ try:
+ device.run(metadata)
+ finally:
+ device.teardown()
+
+ target = Path(DMG.parent, "firefox", "Contents", "MacOS", "firefox")
+ assert env.get_arg("browsertime-binary") == str(target)
+
+
+def run_fail(cmd):
+ def _run_fail(self, args):
+ run_cmd = " ".join(args)
+ if cmd not in run_cmd:
+ run_proc(args)
+ return
+ raise subprocess.CalledProcessError(returncode=2, cmd=" ".join(args))
+
+ return _run_fail
+
+
+@mock.patch("mozperftest.system.macos.MacosDevice._run_process", new=run_fail("attach"))
+def test_attach_fails():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary=str(DMG))
+ device = MacosDevice(env, mach_cmd)
+
+ with pytest.raises(subprocess.CalledProcessError):
+ try:
+ device.run(metadata)
+ finally:
+ device.teardown()
+
+
+@mock.patch("mozperftest.system.macos.MacosDevice._run_process", new=run_fail("detach"))
+def test_detach_fails():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary=str(DMG))
+ device = MacosDevice(env, mach_cmd)
+ # detaching will be swallowed
+ try:
+ device.run(metadata)
+ finally:
+ device.teardown()
+
+ target = Path(DMG.parent, "firefox", "Contents", "MacOS", "firefox")
+ assert env.get_arg("browsertime-binary") == str(target)
+
+
+def test_no_op():
+ mach_cmd, metadata, env = get_running_env(browsertime_binary="notadmg")
+ device = MacosDevice(env, mach_cmd)
+ device.run(metadata)
+
+
+if __name__ == "__main__":
+ mozunit.main()