Example #1
0
    def testAsDict(self):
        result = mre_result.MreResult()

        with map_single_trace.TemporaryMapScript("""
      tr.mre.FunctionRegistry.register(
          function MyMapFunction(result, model) {
            var canonicalUrl = model.canonicalUrl;
            result.addPair('result', {
                numProcesses: model.getAllProcesses().length
              });
          });
      """) as map_script:

            module = function_handle.ModuleToLoad(filename=map_script.filename)
            map_handle = function_handle.FunctionHandle(
                modules_to_load=[module], function_name='MyMapFunction')
            job = job_module.Job(map_handle, None)
            failure = failure_module.Failure(job, '2', '3', 'err', 'desc',
                                             'stack')
            result.AddFailure(failure)

            result.AddPair('foo', 'bar')

            result_dict = result.AsDict()

            self.assertEquals(result_dict['failures'], [failure.AsDict()])
            self.assertEquals(result_dict['pairs'], {'foo': 'bar'})
Example #2
0
    def testAsDict(self):
        map_function_handle = _SingleFileFunctionHandle('foo.html', 'Foo', '2')
        job = job_module.Job(map_function_handle, '1')
        failure = failure_module.Failure(job, 'foo.html:Foo',
                                         'file://foo.html', 'err', 'desc',
                                         'stack')

        self.assertEquals(
            failure.AsDict(), {
                'job_guid': '1',
                'function_handle_string': 'foo.html:Foo',
                'trace_canonical_url': 'file://foo.html',
                'type': 'err',
                'description': 'desc',
                'stack': 'stack'
            })
    def testComputeTBMv2MetricsFailure(self):
        in_results = testing.IntermediateResults([
            testing.TestResult(
                'benchmark/story1',
                output_artifacts={
                    compute_metrics.HTML_TRACE_NAME:
                    testing.Artifact('/trace1.html', 'gs://trace1.html')
                },
                tags=['tbmv2:metric1'],
            ),
        ])

        metrics_result = mre_result.MreResult()
        metrics_result.AddFailure(failure.Failure(job.Job(0), 0, 0, 0, 0, 0))

        with mock.patch(GETSIZE_METHOD) as getsize_mock:
            with mock.patch(RUN_METRICS_METHOD) as run_metrics_mock:
                getsize_mock.return_value = 100
                run_metrics_mock.return_value = metrics_result
                histogram_dicts = compute_metrics.ComputeTBMv2Metrics(
                    in_results)

        self.assertEqual(histogram_dicts, [])
        self.assertEqual(in_results['testResults'][0]['status'], 'FAIL')
Example #4
0
def MapSingleTrace(trace_handle, job, extra_import_options=None, timeout=None):
    assert (isinstance(
        extra_import_options,
        (type(None),
         dict))), ('extra_import_options should be a dict or None.')
    project = tracing_project.TracingProject()

    all_source_paths = list(project.source_paths)
    all_source_paths.append(project.trace_processor_root_path)

    result = mre_result.MreResult()

    with trace_handle.PrepareFileForProcessing() as prepared_trace_handle:
        js_args = [
            json.dumps(prepared_trace_handle.AsDict()),
            json.dumps(job.AsDict()),
        ]
        if extra_import_options:
            js_args.append(json.dumps(extra_import_options))

        # Use 8gb heap space to make sure we don't OOM'ed on big trace, but not
        # on ARM devices since we use 32-bit d8 binary.
        if platform.machine() == 'armv7l' or platform.machine() == 'aarch64':
            v8_args = None
        else:
            v8_args = ['--max-old-space-size=8192']

        try:
            res = vinn.RunFile(_MAP_SINGLE_TRACE_CMDLINE_PATH,
                               source_paths=all_source_paths,
                               js_args=js_args,
                               v8_args=v8_args,
                               timeout=timeout)
        except RuntimeError as e:
            result.AddFailure(
                failure.Failure(job, trace_handle.canonical_url, 'Error',
                                'vinn runtime error while mapping trace.',
                                e.message, 'Unknown stack'))
            return result

    stdout = res.stdout
    if not isinstance(stdout, str):
        stdout = stdout.decode('utf-8', errors='replace')

    if res.returncode != 0:
        sys.stderr.write(stdout)
        result.AddFailure(
            failure.Failure(job, trace_handle.canonical_url, 'Error',
                            'vinn runtime error while mapping trace.',
                            'vinn runtime error while mapping trace.',
                            'Unknown stack'))
        return result

    for line in stdout.split('\n'):
        m = re.match('^MRE_RESULT: (.+)', line, re.DOTALL)
        if m:
            found_dict = json.loads(m.group(1))
            failures = [
                failure.Failure.FromDict(f, job,
                                         _FAILURE_NAME_TO_FAILURE_CONSTRUCTOR)
                for f in found_dict['failures']
            ]

            for f in failures:
                result.AddFailure(f)

            for k, v in found_dict['pairs'].items():
                result.AddPair(k, v)

        else:
            if len(line) > 0:
                sys.stderr.write(line)
                sys.stderr.write('\n')

    if not (len(result.pairs) or len(result.failures)):
        raise InternalMapError('Internal error: No results were produced!')

    return result