Backed out changeset 1ccda1d0c3ea (bug 1650363) for causing a serious regression in packaging time

This commit is contained in:
Bogdan Tara 2020-08-05 04:23:20 +03:00
Родитель c8dfe8b2b0
Коммит abfa3262b8
15 изменённых файлов: 56 добавлений и 493 удалений

Просмотреть файл

@ -1,234 +0,0 @@
"use strict";
var performance = performance || {};
performance.now = (function() {
return (
performance.now ||
performance.mozNow ||
performance.msNow ||
performance.oNow ||
performance.webkitNow ||
Date.now
);
})();
let h3Route;
let httpsOrigin;
let h3AltSvc;
let prefs;
let tests = [
// This test must be the first because it setsup alt-svc connection, that
// other tests use.
test_https_alt_svc,
test_download,
testsDone,
];
let current_test = 0;
function run_next_test() {
if (current_test < tests.length) {
dump("starting test number " + current_test + "\n");
tests[current_test]();
current_test++;
}
}
function run_test() {
let env = Cc["@mozilla.org/process/environment;1"].getService(
Ci.nsIEnvironment
);
let h2Port = env.get("MOZHTTP2_PORT");
Assert.notEqual(h2Port, null);
Assert.notEqual(h2Port, "");
let h3Port = env.get("MOZHTTP3_PORT");
Assert.notEqual(h3Port, null);
Assert.notEqual(h3Port, "");
h3AltSvc = ":" + h3Port;
h3Route = "foo.example.com:" + h3Port;
do_get_profile();
prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prefs.setBoolPref("network.http.http3.enabled", true);
prefs.setCharPref("network.dns.localDomains", "foo.example.com");
// The certificate for the http3server server is for foo.example.com and
// is signed by http2-ca.pem so add that cert to the trust list as a
// signing cert.
let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
Ci.nsIX509CertDB
);
addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u");
httpsOrigin = "https://foo.example.com:" + h2Port + "/";
run_next_test();
}
function makeChan(uri) {
let chan = NetUtil.newChannel({
uri,
loadUsingSystemPrincipal: true,
}).QueryInterface(Ci.nsIHttpChannel);
chan.loadFlags = Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI;
return chan;
}
let Http3CheckListener = function() {};
Http3CheckListener.prototype = {
onDataAvailableFired: false,
expectedRoute: "",
onStartRequest: function testOnStartRequest(request) {
Assert.ok(request instanceof Ci.nsIHttpChannel);
Assert.equal(request.status, Cr.NS_OK);
Assert.equal(request.responseStatus, 200);
},
onDataAvailable: function testOnDataAvailable(request, stream, off, cnt) {
this.onDataAvailableFired = true;
read_stream(stream, cnt);
},
onStopRequest: function testOnStopRequest(request, status) {
dump("status is " + status + "\n");
Assert.equal(status, Cr.NS_OK);
let routed = "NA";
try {
routed = request.getRequestHeader("Alt-Used");
} catch (e) {}
dump("routed is " + routed + "\n");
Assert.equal(routed, this.expectedRoute);
let httpVersion = "";
try {
httpVersion = request.protocolVersion;
} catch (e) {}
Assert.equal(httpVersion, "h3");
Assert.equal(this.onDataAvailableFired, true);
},
};
let WaitForHttp3Listener = function() {};
WaitForHttp3Listener.prototype = new Http3CheckListener();
WaitForHttp3Listener.prototype.uri = "";
WaitForHttp3Listener.prototype.h3AltSvc = "";
WaitForHttp3Listener.prototype.onStopRequest = function testOnStopRequest(
request,
status
) {
Assert.equal(status, Cr.NS_OK);
let routed = "NA";
try {
routed = request.getRequestHeader("Alt-Used");
} catch (e) {}
dump("routed is " + routed + "\n");
if (routed == this.expectedRoute) {
Assert.equal(routed, this.expectedRoute); // always true, but a useful log
let httpVersion = "";
try {
httpVersion = request.protocolVersion;
} catch (e) {}
Assert.equal(httpVersion, "h3");
run_next_test();
} else {
dump("poll later for alt svc mapping\n");
do_test_pending();
do_timeout(500, () => {
doTest(this.uri, this.expectedRoute, this.h3AltSvc);
});
}
do_test_finished();
};
function doTest(uri, expectedRoute, altSvc) {
let chan = makeChan(uri);
let listener = new WaitForHttp3Listener();
listener.uri = uri;
listener.expectedRoute = expectedRoute;
listener.h3AltSvc = altSvc;
chan.setRequestHeader("x-altsvc", altSvc, false);
chan.asyncOpen(listener);
}
// Test Alt-Svc for http3.
// H2 server returns alt-svc=h3-27=:h3port
function test_https_alt_svc() {
dump("test_https_alt_svc()\n");
do_test_pending();
doTest(httpsOrigin + "http3-test", h3Route, h3AltSvc);
}
let PerfHttp3Listener = function() {};
PerfHttp3Listener.prototype = new Http3CheckListener();
PerfHttp3Listener.prototype.amount = 0;
PerfHttp3Listener.prototype.bytesRead = 0;
PerfHttp3Listener.prototype.startTime = 0;
PerfHttp3Listener.prototype.onStartRequest = function testOnStartRequest(
request
) {
this.startTime = performance.now();
Http3CheckListener.prototype.onStartRequest.call(this, request);
};
PerfHttp3Listener.prototype.onDataAvailable = function testOnStopRequest(
request,
stream,
off,
cnt
) {
this.bytesRead += cnt;
Http3CheckListener.prototype.onDataAvailable.call(
this,
request,
stream,
off,
cnt
);
};
PerfHttp3Listener.prototype.onStopRequest = function testOnStopRequest(
request,
status
) {
let stopTime = performance.now();
Http3CheckListener.prototype.onStopRequest.call(this, request, status);
Assert.equal(this.bytesRead, this.amount);
let speed = (this.bytesRead * 1000) / (stopTime - this.startTime);
info("perfMetrics", { speed });
run_next_test();
do_test_finished();
};
function test_download() {
dump("test_download()\n");
let listener = new PerfHttp3Listener();
listener.expectedRoute = h3Route;
listener.amount = 1024 * 1024;
let chan = makeChan(httpsOrigin + listener.amount.toString());
chan.asyncOpen(listener);
do_test_pending();
}
function testsDone() {
prefs.clearUserPref("network.http.http3.enabled");
prefs.clearUserPref("network.dns.localDomains");
dump("testDone\n");
do_test_pending();
do_test_finished();
}

Просмотреть файл

@ -427,8 +427,6 @@ skip-if = os == "android"
skip-if = asan || tsan || os == 'win' || os =='android' skip-if = asan || tsan || os == 'win' || os =='android'
[test_http3_421.js] [test_http3_421.js]
skip-if = asan || tsan || os == 'win' || os =='android' skip-if = asan || tsan || os == 'win' || os =='android'
[test_http3_perf.js]
skip-if = asan || tsan || os == 'win' || os =='android'
[test_node_execute.js] [test_node_execute.js]
[test_loadgroup_cancel.js] [test_loadgroup_cancel.js]
[test_obs-fold.js] [test_obs-fold.js]

Просмотреть файл

@ -510,35 +510,7 @@ ARCHIVE_FILES = {
}, },
{ {
'source': buildconfig.topsrcdir, 'source': buildconfig.topsrcdir,
'pattern': 'testing/mozharness/**' 'pattern': 'testing/mozharness/**'
},
{
'source': buildconfig.topsrcdir,
'pattern': 'browser/config/**'
},
{
'source': buildconfig.topsrcdir,
'pattern': 'build/moz.configure/**'
},
{
'source': buildconfig.topobjdir,
'pattern': 'dist/bin/**',
},
{
'source': buildconfig.topobjdir,
'base': '_tests/modules',
'pattern': '**',
'dest': 'dist/bin/modules'
},
{
'source': buildconfig.topobjdir,
'pattern': 'dist/plugins/**'
},
{
'source': buildconfig.topsrcdir,
'base': 'netwerk/test/http3serverDB',
'pattern': '**',
'dest': 'netwerk/test/http3serverDB',
} }
], ],
'condprof': [ 'condprof': [

Просмотреть файл

@ -11,7 +11,7 @@ try:
from mozbuild.base import MozbuildObject, MachCommandConditions as conditions from mozbuild.base import MozbuildObject, MachCommandConditions as conditions
build_obj = MozbuildObject.from_environment(cwd=here) build_obj = MozbuildObject.from_environment(cwd=here)
except Exception: except ImportError:
build_obj = None build_obj = None
conditions = None conditions = None

Просмотреть файл

@ -11,7 +11,7 @@ from mozbuild.base import MachCommandBase, MachCommandConditions as conditions
_TRY_PLATFORMS = {"g5": "perftest-android-hw-g5", "p2": "perftest-android-hw-p2"} _TRY_PLATFORMS = {"g5": "perftest-android-hw-g5", "p2": "perftest-android-hw-p2"}
HERE = os.path.dirname(__file__) ON_TRY = "MOZ_AUTOMATION" in os.environ
def get_perftest_parser(): def get_perftest_parser():
@ -124,18 +124,9 @@ class PerftestTests(MachCommandBase):
def run_tests(self, **kwargs): def run_tests(self, **kwargs):
MachCommandBase.activate_virtualenv(self) MachCommandBase.activate_virtualenv(self)
from pathlib import Path
from mozperftest.utils import temporary_env
with temporary_env(
COVERAGE_RCFILE=str(Path(HERE, ".coveragerc")), RUNNING_TESTS="YES"
):
self._run_tests(**kwargs)
def _run_tests(self, **kwargs):
from pathlib import Path from pathlib import Path
from mozperftest.runner import _setup_path from mozperftest.runner import _setup_path
from mozperftest.utils import install_package, ON_TRY from mozperftest.utils import install_package, temporary_env
skip_linters = kwargs.get("skip_linters", False) skip_linters = kwargs.get("skip_linters", False)
verbose = kwargs.get("verbose", False) verbose = kwargs.get("verbose", False)
@ -166,20 +157,21 @@ class PerftestTests(MachCommandBase):
for dep in vendors: for dep in vendors:
install_package(self.virtualenv_manager, str(Path(pydeps, dep))) install_package(self.virtualenv_manager, str(Path(pydeps, dep)))
here = Path(__file__).parent.resolve()
if not ON_TRY and not skip_linters: if not ON_TRY and not skip_linters:
# formatting the code with black # formatting the code with black
assert self._run_python_script("black", str(HERE)) assert self._run_python_script("black", str(here))
# checking flake8 correctness # checking flake8 correctness
if not (ON_TRY and sys.platform == "darwin") and not skip_linters: if not (ON_TRY and sys.platform == "darwin") and not skip_linters:
assert self._run_python_script("flake8", str(HERE)) assert self._run_python_script("flake8", str(here))
# running pytest with coverage # running pytest with coverage
# coverage is done in three steps: # coverage is done in three steps:
# 1/ coverage erase => erase any previous coverage data # 1/ coverage erase => erase any previous coverage data
# 2/ coverage run pytest ... => run the tests and collect info # 2/ coverage run pytest ... => run the tests and collect info
# 3/ coverage report => generate the report # 3/ coverage report => generate the report
tests_dir = Path(HERE, "tests").resolve() tests_dir = Path(here, "tests").resolve()
tests = kwargs.get("tests", []) tests = kwargs.get("tests", [])
if tests == []: if tests == []:
tests = str(tests_dir) tests = str(tests_dir)
@ -200,20 +192,21 @@ class PerftestTests(MachCommandBase):
if kwargs.get("verbose"): if kwargs.get("verbose"):
options += "v" options += "v"
if run_coverage_check: with temporary_env(COVERAGE_RCFILE=str(here / ".coveragerc")):
if run_coverage_check:
assert self._run_python_script(
"coverage", "erase", label="remove old coverage data"
)
args = [
"run",
pytest.__file__,
options,
tests,
]
assert self._run_python_script( assert self._run_python_script(
"coverage", "erase", label="remove old coverage data" "coverage", *args, label="running tests", verbose=verbose
) )
args = [ if run_coverage_check and not self._run_python_script(
"run", "coverage", "report", display=True
pytest.__file__, ):
options, raise ValueError("Coverage is too low!")
tests,
]
assert self._run_python_script(
"coverage", *args, label="running tests", verbose=verbose
)
if run_coverage_check and not self._run_python_script(
"coverage", "report", display=True
):
raise ValueError("Coverage is too low!")

Просмотреть файл

@ -28,13 +28,10 @@ import os
import shutil import shutil
import sys import sys
import logging import logging
from pathlib import Path
TASKCLUSTER = "TASK_ID" in os.environ.keys() HERE = os.path.dirname(__file__)
RUNNING_TESTS = "RUNNING_TESTS" in os.environ.keys() SRC_ROOT = os.path.join(HERE, "..", "..", "..")
HERE = Path(__file__).parent
SRC_ROOT = Path(HERE, "..", "..", "..").resolve()
SEARCH_PATHS = [ SEARCH_PATHS = [
"python/mach", "python/mach",
"python/mozboot", "python/mozboot",
@ -51,7 +48,6 @@ SEARCH_PATHS = [
"testing/mozbase/mozprofile", "testing/mozbase/mozprofile",
"testing/mozbase/mozproxy", "testing/mozbase/mozproxy",
"third_party/python/attrs/src", "third_party/python/attrs/src",
"third_party/python/blessings",
"third_party/python/distro", "third_party/python/distro",
"third_party/python/dlmanager", "third_party/python/dlmanager",
"third_party/python/esprima", "third_party/python/esprima",
@ -66,25 +62,23 @@ SEARCH_PATHS = [
] ]
if TASKCLUSTER:
SEARCH_PATHS.append("xpcshell")
# XXX need to make that for all systems flavors # XXX need to make that for all systems flavors
if "SHELL" not in os.environ: if "SHELL" not in os.environ:
os.environ["SHELL"] = "/bin/bash" os.environ["SHELL"] = "/bin/bash"
def _setup_path(): def _setup_path():
"""Adds all available dependencies in the path. """Adds all dependencies in the path.
This is done so the runner can be used with no prior This is done so the runner can be used with no prior
install in all execution environments. install in all execution environments.
""" """
for path in SEARCH_PATHS: for path in SEARCH_PATHS:
path = Path(SRC_ROOT, path).resolve() path = os.path.abspath(path)
if path.exists(): path = os.path.join(SRC_ROOT, path)
sys.path.insert(0, str(path)) if not os.path.exists(path):
raise IOError("Can't find %s" % path)
sys.path.insert(0, path)
def run_tests(mach_cmd, **kwargs): def run_tests(mach_cmd, **kwargs):
@ -156,41 +150,16 @@ def main(argv=sys.argv[1:]):
""" """
_setup_path() _setup_path()
from mozbuild.mozconfig import MozconfigLoader
from mozbuild.base import MachCommandBase, MozbuildObject from mozbuild.base import MachCommandBase, MozbuildObject
from mozperftest import PerftestArgumentParser from mozperftest import PerftestArgumentParser
from mozboot.util import get_state_dir from mozboot.util import get_state_dir
from mach.logging import LoggingManager from mach.logging import LoggingManager
mozconfig = SRC_ROOT / "browser" / "config" / "mozconfig" config = MozbuildObject.from_environment()
if mozconfig.exists():
os.environ["MOZCONFIG"] = str(mozconfig)
if "--xpcshell-mozinfo" in argv:
mozinfo = argv[argv.index("--xpcshell-mozinfo") + 1]
topobjdir = Path(mozinfo).parent
else:
topobjdir = None
config = MozbuildObject(
str(SRC_ROOT),
None,
LoggingManager(),
topobjdir=topobjdir,
mozconfig=MozconfigLoader.AUTODETECT,
)
config.topdir = config.topsrcdir config.topdir = config.topsrcdir
config.cwd = os.getcwd() config.cwd = os.getcwd()
config.state_dir = get_state_dir() config.state_dir = get_state_dir()
config.log_manager = LoggingManager()
# This monkey patch forces mozbuild to reuse
# our configuration when it tries to re-create
# it from the environment.
def _here(*args, **kw):
return config
MozbuildObject.from_environment = _here
mach_cmd = MachCommandBase(config) mach_cmd = MachCommandBase(config)
parser = PerftestArgumentParser(description="vanilla perftest") parser = PerftestArgumentParser(description="vanilla perftest")
args = parser.parse_args(args=argv) args = parser.parse_args(args=argv)

Просмотреть файл

@ -1,9 +1,9 @@
# This Source Code Form is subject to the terms of the Mozilla Public # This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this # License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/. # file, You can obtain one at http://mozilla.org/MPL/2.0/.
import os
from pathlib import Path from pathlib import Path
from collections import defaultdict from collections import defaultdict
from mozperftest.layers import Layer from mozperftest.layers import Layer
from mozperftest.utils import temp_dir, silence from mozperftest.utils import temp_dir, silence
@ -39,22 +39,6 @@ class XPCShell(Layer):
arguments = { arguments = {
"cycles": {"type": int, "default": 13, "help": "Number of full cycles"}, "cycles": {"type": int, "default": 13, "help": "Number of full cycles"},
"binary": {
"type": str,
"default": None,
"help": (
"xpcshell binary path. If not provided, "
"looks for it in the source tree."
),
},
"mozinfo": {
"type": str,
"default": None,
"help": (
"mozinfo binary path. If not provided, looks for it in the obj tree."
),
},
"nodejs": {"type": str, "default": None, "help": "nodejs binary path."},
} }
def __init__(self, env, mach_cmd): def __init__(self, env, mach_cmd):
@ -67,7 +51,6 @@ class XPCShell(Layer):
self.bindir = mach_cmd.bindir self.bindir = mach_cmd.bindir
self.statedir = mach_cmd.statedir self.statedir = mach_cmd.statedir
self.metrics = [] self.metrics = []
self.topsrcdir = mach_cmd.topsrcdir
def setup(self): def setup(self):
self.mach_cmd.activate_virtualenv() self.mach_cmd.activate_virtualenv()
@ -87,63 +70,31 @@ class XPCShell(Layer):
if not manifest.exists(): if not manifest.exists():
raise FileNotFoundError(str(manifest)) raise FileNotFoundError(str(manifest))
nodejs = self.get_arg("nodejs")
if nodejs is not None:
os.environ["MOZ_NODE_PATH"] = nodejs
import runxpcshelltests import runxpcshelltests
verbose = self.get_arg("verbose")
xpcshell = runxpcshelltests.XPCShellTests(log=self) xpcshell = runxpcshelltests.XPCShellTests(log=self)
kwargs = {} kwargs = {}
kwargs["testPaths"] = test.name kwargs["testPaths"] = test.name
kwargs["verbose"] = verbose kwargs["verbose"] = True
binary = self.get_arg("binary") kwargs["xpcshell"] = self.mach_cmd.get_binary_path("xpcshell")
if binary is None: kwargs["mozInfo"] = str(Path(self.topobjdir, "mozinfo.json"))
binary = self.mach_cmd.get_binary_path("xpcshell")
kwargs["xpcshell"] = binary
binary = Path(binary)
mozinfo = self.get_arg("mozinfo")
if mozinfo is None:
mozinfo = binary.parent / ".." / "mozinfo.json"
if not mozinfo.exists():
mozinfo = Path(self.topobjdir, "mozinfo.json")
else:
mozinfo = Path(mozinfo)
kwargs["mozInfo"] = str(mozinfo)
kwargs["symbolsPath"] = str(Path(self.distdir, "crashreporter-symbols")) kwargs["symbolsPath"] = str(Path(self.distdir, "crashreporter-symbols"))
kwargs["logfiles"] = True kwargs["logfiles"] = True
kwargs["profileName"] = "firefox" kwargs["profileName"] = "firefox"
plugins = binary.parent / "plugins" kwargs["pluginsPath"] = str(Path(self.distdir, "plugins"))
if not plugins.exists(): kwargs["testingModulesDir"] = str(Path(self.topobjdir, "_tests/modules"))
plugins = Path(self.distdir, "plugins")
kwargs["pluginsPath"] = str(plugins)
modules = binary.parent / "modules"
if not modules.exists():
modules = Path(self.topobjdir, "_tests", "modules")
kwargs["testingModulesDir"] = str(modules)
kwargs["utility_path"] = self.bindir kwargs["utility_path"] = self.bindir
kwargs["manifest"] = manifest kwargs["manifest"] = manifest
kwargs["totalChunks"] = 1 kwargs["totalChunks"] = 1
cycles = self.get_arg("cycles", 1) cycles = self.get_arg("cycles", 1)
self.info("Running %d cycles" % cycles) self.info("Running %d cycles" % cycles)
class _display:
def __enter__(self, *args, **kw):
return self
__exit__ = __enter__
may_silence = not verbose and silence or _display
for cycle in range(cycles): for cycle in range(cycles):
self.info("Cycle %d" % (cycle + 1)) with temp_dir() as tmp, silence():
with temp_dir() as tmp, may_silence():
kwargs["tempDir"] = tmp kwargs["tempDir"] = tmp
if not xpcshell.runTests(kwargs): if not xpcshell.runTests(kwargs):
raise XPCShellTestError() raise XPCShellTestError()
self.info("Cycle %d" % (cycle + 1))
self.info("tests done.") self.info("tests done.")
results = defaultdict(list) results = defaultdict(list)
@ -154,7 +105,7 @@ class XPCShell(Layer):
metadata.add_result( metadata.add_result(
{ {
"name": test.name, "name": test.name,
"framework": {"name": "mozperftest"}, "framework": {"name": "xpcshell"},
"transformer": "mozperftest.test.xpcshell:XPCShellData", "transformer": "mozperftest.test.xpcshell:XPCShellData",
"results": [ "results": [
{"values": measures, "name": subtest} {"values": measures, "name": subtest}

Просмотреть файл

@ -1 +0,0 @@
{"appname": "firefox", "artifact": false, "asan": false, "bin_suffix": "", "bits": 64, "buildapp": "browser", "buildtype_guess": "opt", "cc_type": "clang", "ccov": false, "crashreporter": true, "datareporting": true, "debug": false, "devedition": false, "early_beta_or_earlier": true, "healthreport": true, "mozconfig": "/Users/tarek/Dev/gecko/mozilla-central-opt/browser/config/mozconfig", "nightly_build": true, "normandy": true, "official": false, "os": "mac", "pgo": false, "platform_guess": "macosx64", "processor": "x86_64", "release_or_beta": false, "require_signing": false, "stylo": true, "sync": true, "telemetry": false, "tests_enabled": true, "toolkit": "cocoa", "topsrcdir": "/Users/tarek/Dev/gecko/mozilla-central-opt", "tsan": false, "ubsan": false, "updater": true}

Просмотреть файл

@ -1 +0,0 @@
#

Просмотреть файл

@ -16,7 +16,6 @@ EXAMPLE_TEST = os.path.join(EXAMPLE_TESTS_DIR, "perftest_example.js")
EXAMPLE_XPCSHELL_TEST = Path(EXAMPLE_TESTS_DIR, "test_xpcshell.js") EXAMPLE_XPCSHELL_TEST = Path(EXAMPLE_TESTS_DIR, "test_xpcshell.js")
BT_DATA = Path(HERE, "data", "browsertime-results", "browsertime.json") BT_DATA = Path(HERE, "data", "browsertime-results", "browsertime.json")
DMG = Path(HERE, "data", "firefox.dmg") DMG = Path(HERE, "data", "firefox.dmg")
MOZINFO = Path(HERE, "data", "mozinfo.json")
@contextlib.contextmanager @contextlib.contextmanager

Просмотреть файл

@ -17,10 +17,10 @@ Registrar.commands_by_category = {"testing": set()}
from mozperftest.environment import MachEnvironment # noqa from mozperftest.environment import MachEnvironment # noqa
from mozperftest.mach_commands import Perftest, PerftestTests # noqa from mozperftest.mach_commands import Perftest, PerftestTests, ON_TRY # noqa
from mozperftest import utils # noqa from mozperftest import mach_commands # noqa
from mozperftest.tests.support import EXAMPLE_TESTS_DIR # noqa from mozperftest.tests.support import EXAMPLE_TESTS_DIR # noqa
from mozperftest.utils import temporary_env, silence, ON_TRY # noqa from mozperftest.utils import temporary_env, silence # noqa
ITERATION_HOOKS = Path(__file__).parent / "data" / "hooks_iteration.py" ITERATION_HOOKS = Path(__file__).parent / "data" / "hooks_iteration.py"
@ -111,14 +111,14 @@ def test_doc_flavor(mocked_func):
@mock.patch("mozperftest.mach_commands.PerftestTests._run_python_script") @mock.patch("mozperftest.mach_commands.PerftestTests._run_python_script")
def test_test_runner(*mocked): def test_test_runner(*mocked):
# simulating on try to run the paths parser # simulating on try to run the paths parser
old = utils.ON_TRY old = mach_commands.ON_TRY
utils.ON_TRY = True mach_commands.ON_TRY = True
with _get_command(PerftestTests) as test, silence(test), temporary_env( with _get_command(PerftestTests) as test, silence(test), temporary_env(
MOZ_AUTOMATION="1" MOZ_AUTOMATION="1"
): ):
test.run_tests(tests=[EXAMPLE_TESTS_DIR]) test.run_tests(tests=[EXAMPLE_TESTS_DIR])
utils.ON_TRY = old mach_commands.ON_TRY = old
@mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment) @mock.patch("mozperftest.MachEnvironment", new=_TestMachEnvironment)

Просмотреть файл

@ -4,16 +4,9 @@ import shutil
import pytest import pytest
from mozperftest.tests.support import ( from mozperftest.tests.support import get_running_env, EXAMPLE_XPCSHELL_TEST, temp_file
get_running_env,
EXAMPLE_XPCSHELL_TEST,
temp_file,
MOZINFO,
)
from mozperftest.environment import TEST, SYSTEM, METRICS from mozperftest.environment import TEST, SYSTEM, METRICS
from mozperftest.test.xpcshell import XPCShellTestError from mozperftest.test.xpcshell import XPCShellTestError
from mozperftest import utils
from mozperftest.test import xpcshell
class XPCShellTests: class XPCShellTests:
@ -50,13 +43,9 @@ class XPCShellTestsFail(XPCShellTests):
return False return False
def running_env(**kw):
return get_running_env(flavor="xpcshell", xpcshell_mozinfo=MOZINFO, **kw)
@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests) @mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests)
def test_xpcshell_metrics(*mocked): def test_xpcshell_metrics(*mocked):
mach_cmd, metadata, env = running_env() mach_cmd, metadata, env = get_running_env(flavor="xpcshell")
sys = env.layers[SYSTEM] sys = env.layers[SYSTEM]
xpcshell = env.layers[TEST] xpcshell = env.layers[TEST]
@ -79,7 +68,7 @@ def test_xpcshell_metrics(*mocked):
@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTestsFail) @mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTestsFail)
def test_xpcshell_metrics_fail(*mocked): def test_xpcshell_metrics_fail(*mocked):
mach_cmd, metadata, env = running_env() mach_cmd, metadata, env = get_running_env(flavor="xpcshell")
sys = env.layers[SYSTEM] sys = env.layers[SYSTEM]
xpcshell = env.layers[TEST] xpcshell = env.layers[TEST]
env.set_arg("tests", [str(EXAMPLE_XPCSHELL_TEST)]) env.set_arg("tests", [str(EXAMPLE_XPCSHELL_TEST)])
@ -93,23 +82,9 @@ def test_xpcshell_metrics_fail(*mocked):
@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests) @mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests)
def test_xpcshell_perfherder(*mocked): def test_xpcshell_perfherder(*mocked):
return _test_xpcshell_perfherder(*mocked) mach_cmd, metadata, env = get_running_env(
flavor="xpcshell", perfherder=True, xpcshell_cycles=10
)
@mock.patch("runxpcshelltests.XPCShellTests", new=XPCShellTests)
def test_xpcshell_perfherder_on_try(*mocked):
old = utils.ON_TRY
utils.ON_TRY = xpcshell.ON_TRY = not utils.ON_TRY
try:
return _test_xpcshell_perfherder(*mocked)
finally:
utils.ON_TRY = old
xpcshell.ON_TRY = old
def _test_xpcshell_perfherder(*mocked):
mach_cmd, metadata, env = running_env(perfherder=True, xpcshell_cycles=10)
sys = env.layers[SYSTEM] sys = env.layers[SYSTEM]
xpcshell = env.layers[TEST] xpcshell = env.layers[TEST]
@ -130,7 +105,7 @@ def _test_xpcshell_perfherder(*mocked):
# Check some metadata # Check some metadata
assert output["application"]["name"] == "firefox" assert output["application"]["name"] == "firefox"
assert output["framework"]["name"] == "mozperftest" assert output["framework"]["name"] == "xpcshell"
# Check some numbers in our data # Check some numbers in our data
assert len(output["suites"]) == 1 assert len(output["suites"]) == 1

Просмотреть файл

@ -21,7 +21,6 @@ RETRY_SLEEP = 10
API_ROOT = "https://firefox-ci-tc.services.mozilla.com/api/index/v1" API_ROOT = "https://firefox-ci-tc.services.mozilla.com/api/index/v1"
MULTI_REVISION_ROOT = f"{API_ROOT}/namespaces" MULTI_REVISION_ROOT = f"{API_ROOT}/namespaces"
MULTI_TASK_ROOT = f"{API_ROOT}/tasks" MULTI_TASK_ROOT = f"{API_ROOT}/tasks"
ON_TRY = "MOZ_AUTOMATION" in os.environ
@contextlib.contextmanager @contextlib.contextmanager

Просмотреть файл

@ -8,13 +8,8 @@ job-defaults:
toolchain: toolchain:
- linux64-node-10 - linux64-node-10
- linux64-geckodriver - linux64-geckodriver
- linux64-minidump-stackwalk
- linux64-fix-stacks
build: build:
- artifact: target.mozinfo.json
- artifact: target.common.tests.tar.gz
- artifact: target.perftests.tests.tar.gz - artifact: target.perftests.tests.tar.gz
- artifact: target.xpcshell.tests.tar.gz
- artifact: target.tar.bz2 - artifact: target.tar.bz2
platform: linux64-shippable/opt platform: linux64-shippable/opt
require-build: require-build:
@ -40,30 +35,6 @@ domcount:
--browsertime-geckodriver ${MOZ_FETCHES_DIR}/geckodriver --browsertime-geckodriver ${MOZ_FETCHES_DIR}/geckodriver
--output $MOZ_FETCHES_DIR/../artifacts --output $MOZ_FETCHES_DIR/../artifacts
http3:
description: Run HTTP/3 test
treeherder:
symbol: perftest(http3)
attributes:
batch: false
cron: true
run:
command: >-
mkdir -p $MOZ_FETCHES_DIR/../artifacts &&
cd $MOZ_FETCHES_DIR &&
python3.8 python/mozperftest/mozperftest/runner.py
xpcshell/tests/netwerk/test/unit/test_http3_perf.js
--flavor xpcshell
--perfherder
--perfherder-metrics name:speed,unit:bps
--output $MOZ_FETCHES_DIR/../artifacts
--xpcshell-binary ${MOZ_FETCHES_DIR}/dist/bin/xpcshell
--xpcshell-mozinfo ${MOZ_FETCHES_DIR}/target.mozinfo.json
--xpcshell-nodejs ${MOZ_FETCHES_DIR}/node/bin/node
--xpcshell-cycles 13
--output $MOZ_FETCHES_DIR/../artifacts
--verbose
livesites: livesites:
description: Live site performance testing description: Live site performance testing
variants: [http3] variants: [http3]

Просмотреть файл

@ -6,9 +6,6 @@ job-defaults:
worker-type: t-osx-1014 worker-type: t-osx-1014
fetches: fetches:
build: build:
- artifact: target.mozinfo.json
- artifact: target.common.tests.tar.gz
- artifact: target.xpcshell.tests.tar.gz
- artifact: target.perftests.tests.tar.gz - artifact: target.perftests.tests.tar.gz
- artifact: target.dmg - artifact: target.dmg
extract: false extract: false
@ -41,31 +38,6 @@ domcount:
--browsertime-geckodriver ${MOZ_FETCHES_DIR}/geckodriver --browsertime-geckodriver ${MOZ_FETCHES_DIR}/geckodriver
--output $MOZ_FETCHES_DIR/../artifacts --output $MOZ_FETCHES_DIR/../artifacts
http3:
description: Run HTTP/3 test
treeherder:
symbol: perftest(http3)
attributes:
batch: false
cron: true
run:
command: >-
mkdir -p $MOZ_FETCHES_DIR/../artifacts &&
cd $MOZ_FETCHES_DIR &&
python3 -m venv . &&
bin/python3 python/mozperftest/mozperftest/runner.py
xpcshell/tests/netwerk/test/unit/test_http3_perf.js
--flavor xpcshell
--perfherder
--perfherder-metrics name:speed,unit:bps
--output $MOZ_FETCHES_DIR/../artifacts
--xpcshell-binary ${MOZ_FETCHES_DIR}/dist/bin/xpcshell
--xpcshell-mozinfo ${MOZ_FETCHES_DIR}/target.mozinfo.json
--xpcshell-nodejs ${MOZ_FETCHES_DIR}/node/bin/node
--xpcshell-cycles 13
--output $MOZ_FETCHES_DIR/../artifacts
--verbose
livesites: livesites:
description: Live site performance testing description: Live site performance testing