
Partial re-land of https://github.com/flutter/flutter/pull/165628: - Fixes the mistake that the `Cocoon` class did things that well, were not specific to Cocoon. - Renamed to `MetricsResultWriter`, as that is all it does now. --- Closes https://github.com/flutter/flutter/issues/165618. The `devicelab/bin/test_runner.dart upload-metrics` command use to have _two_ responsibilities: - Well, upload test **metrics** (benchmarks) to Skia Perf (it still does that) - Upload test **status** to Cocoon (it did until https://github.com/flutter/flutter/pull/165614) As https://github.com/flutter/flutter/pull/165614 proved, this API predated the current LUCI setup, where Cocoon itself receives task status updates from LUCI, and it turns out this entire time, DeviceLab was making (at best) NOP calls, and at worst, causing crashes and corrupt data (https://github.com/flutter/flutter/issues/165610).
82 lines
2.4 KiB
Dart
82 lines
2.4 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:file/file.dart';
|
|
import 'package:file/memory.dart';
|
|
import 'package:flutter_devicelab/framework/metrics_result_writer.dart';
|
|
import 'package:flutter_devicelab/framework/task_result.dart';
|
|
|
|
import 'common.dart';
|
|
|
|
void main() {
|
|
late ProcessResult processResult;
|
|
ProcessResult runSyncStub(
|
|
String executable,
|
|
List<String> args, {
|
|
Map<String, String>? environment,
|
|
bool includeParentEnvironment = true,
|
|
bool runInShell = false,
|
|
Encoding? stderrEncoding,
|
|
Encoding? stdoutEncoding,
|
|
String? workingDirectory,
|
|
}) => processResult;
|
|
|
|
// Expected test values.
|
|
const String commitSha = 'a4952838bf288a81d8ea11edfd4b4cd649fa94cc';
|
|
|
|
late MetricsResultWriter writer;
|
|
late FileSystem fs;
|
|
|
|
setUp(() {
|
|
fs = MemoryFileSystem();
|
|
});
|
|
|
|
test('returns expected commit sha', () {
|
|
processResult = ProcessResult(1, 0, commitSha, '');
|
|
writer = MetricsResultWriter(fs: fs, processRunSync: runSyncStub);
|
|
|
|
expect(writer.commitSha, commitSha);
|
|
});
|
|
|
|
test('throws exception on git cli errors', () {
|
|
processResult = ProcessResult(1, 1, '', '');
|
|
writer = MetricsResultWriter(fs: fs, processRunSync: runSyncStub);
|
|
|
|
expect(() => writer.commitSha, throwsA(isA<CocoonException>()));
|
|
});
|
|
|
|
test('writes expected update task json', () async {
|
|
processResult = ProcessResult(1, 0, commitSha, '');
|
|
final TaskResult result = TaskResult.fromJson(<String, dynamic>{
|
|
'success': true,
|
|
'data': <String, dynamic>{'i': 0, 'j': 0, 'not_a_metric': 'something'},
|
|
'benchmarkScoreKeys': <String>['i', 'j'],
|
|
});
|
|
|
|
writer = MetricsResultWriter(fs: fs, processRunSync: runSyncStub);
|
|
|
|
const String resultsPath = 'results.json';
|
|
await writer.writeTaskResultToFile(
|
|
builderName: 'builderAbc',
|
|
gitBranch: 'master',
|
|
result: result,
|
|
resultsPath: resultsPath,
|
|
);
|
|
|
|
final String resultJson = fs.file(resultsPath).readAsStringSync();
|
|
const String expectedJson =
|
|
'{'
|
|
'"CommitBranch":"master",'
|
|
'"CommitSha":"$commitSha",'
|
|
'"BuilderName":"builderAbc",'
|
|
'"NewStatus":"Succeeded",'
|
|
'"ResultData":{"i":0.0,"j":0.0,"not_a_metric":"something"},'
|
|
'"BenchmarkScoreKeys":["i","j"]}';
|
|
expect(resultJson, expectedJson);
|
|
});
|
|
}
|