Fix buildbot_data_test

+ clean up BuildUri state

R=floitsch@google.com

Review-Url: https://codereview.chromium.org/3002743002 .
This commit is contained in:
Johnni Winther
2017-08-16 15:31:16 +02:00
parent 6c5d1fba95
commit 8f4d7828df
4 changed files with 48 additions and 34 deletions
+19 -1
View File
@@ -551,10 +551,28 @@ const List<BuildGroup> buildGroups = const <BuildGroup>[
const BuildGroup(
groupName: 'chrome',
subgroups: const <BuildSubgroup>[
const BuildSubgroup(shardNames: const <String>[
'dart2js-linux-drt-csp-minified-be'
], testSteps: const <String>[
'dart2js-drt tests',
'dart2js-drt-observatory_ui tests',
'dart2js-drt-package tests',
'dart2js-drt-co19 tests',
'dart2js-drt-extra tests',
'dart2js-drt-fast-startup tests',
'dart2js-drt-observatory_ui-fast-startup tests',
'dart2js-drt-package-fast-startup tests',
'dart2js-drt-co19-fast-startup tests',
'dart2js-drt-extra-fast-startup tests',
'dart2js-drt-fast-startup-checked tests',
'dart2js-drt-observatory_ui-fast-startup-checked tests',
'dart2js-drt-package-fast-startup-checked tests',
'dart2js-drt-co19-fast-startup-checked tests',
'dart2js-drt-extra-fast-startup-checked tests',
], isActive: false),
const BuildSubgroup(shardNames: const <String>[
'dart2js-linux-drt-1-2-be',
'dart2js-linux-drt-2-2-be',
'dart2js-linux-drt-csp-minified-be'
], testSteps: const <String>[
'dart2js-drt tests',
'dart2js-drt-observatory_ui tests',
@@ -6,13 +6,9 @@ import 'util.dart';
/// The [Uri] of a build step stdio log split into its subparts.
class BuildUri {
final String scheme;
final String host;
final String prefix;
final String botName;
final int buildNumber;
final String stepName;
final String suffix;
factory BuildUri(Uri uri) {
List<String> parts = split(Uri.decodeFull(uri.path),
@@ -31,13 +27,7 @@ class BuildUri {
return new BuildUri(Uri.parse(url));
}
factory BuildUri.fromData(String botName, int buildNumber, String stepName) {
return new BuildUri.internal('https', 'build.chromium.org',
'/p/client.dart', botName, buildNumber, stepName, 'stdio/text');
}
BuildUri.internal(this.scheme, this.host, this.prefix, this.botName,
this.buildNumber, this.stepName, this.suffix);
BuildUri.fromData(this.botName, this.buildNumber, this.stepName);
BuildUri withBuildNumber(int buildNumber) {
return new BuildUri.fromData(botName, buildNumber, stepName);
@@ -50,7 +40,7 @@ class BuildUri {
String get buildName =>
'/builders/$botName/builds/$buildNumber/steps/$stepName';
String get path => '$prefix$buildName/logs/$suffix';
String get path => '/p/client.dart$buildName/logs/stdio/text';
/// Returns the path used in logdog for this build uri.
///
@@ -66,13 +56,12 @@ class BuildUri {
/// Creates the [Uri] for this build step stdio log.
Uri toUri() {
return new Uri(scheme: scheme, host: host, path: path);
return new Uri(scheme: 'https', host: 'build.chromium.org', path: path);
}
/// Returns the [BuildUri] the previous build of this build step.
BuildUri prev() {
return new BuildUri.internal(
scheme, host, prefix, botName, buildNumber - 1, stepName, suffix);
return new BuildUri.fromData(botName, buildNumber - 1, stepName);
}
String toString() {
+7 -2
View File
@@ -26,8 +26,11 @@ abstract class BuildbotClient {
class HttpBuildbotClient implements BuildbotClient {
final HttpClient _client = new HttpClient();
static const int maxSkips = 3;
@override
Future<BuildResult> readResult(BuildUri buildUri) async {
int skips = 0;
Duration timeout;
if (buildUri.buildNumber < 0) {
timeout = new Duration(seconds: 1);
@@ -43,13 +46,15 @@ class HttpBuildbotClient implements BuildbotClient {
try {
return await readBuildResultFromHttp(_client, buildUri, timeout);
} on TimeoutException {
if (timeout != null) {
if (timeout != null && skips < maxSkips) {
skips++;
skipToPreviousBuildNumber();
continue;
}
return null;
} on HttpException {
if (timeout != null) {
if (timeout != null && skips < maxSkips) {
skips++;
skipToPreviousBuildNumber();
continue;
}
+18 -16
View File
@@ -6,9 +6,9 @@
import 'package:args/args.dart';
import 'package:expect/expect.dart';
import 'package:gardening/src/bot.dart';
import 'package:gardening/src/buildbot_data.dart';
import 'package:gardening/src/buildbot_structures.dart';
import 'package:gardening/src/client.dart';
import 'package:gardening/src/util.dart';
main(List<String> args) async {
@@ -17,32 +17,34 @@ main(List<String> args) async {
processArgResults(argResults);
bool useLogdog = argResults['logdog'];
BuildbotClient client =
useLogdog ? new LogdogBuildbotClient() : new HttpBuildbotClient();
Bot bot = new Bot(logdog: useLogdog);
List<String> failingUris = <String>[];
List<BuildUri> buildUris = <BuildUri>[];
for (BuildGroup buildGroup in buildGroups) {
for (BuildSubgroup buildSubgroup in buildGroup.subgroups) {
if (!useLogdog && !buildSubgroup.isActive) continue;
List<BuildUri> buildUris =
buildSubgroup.createUris(client.mostRecentBuildNumber);
for (BuildUri buildUri in buildUris) {
BuildResult result = await client.readResult(buildUri);
if (result == null) {
failingUris.add('$buildUri');
}
}
buildUris.addAll(buildSubgroup.createUris(bot.mostRecentBuildNumber));
}
}
List<BuildResult> buildResults = await bot.readResults(buildUris);
for (int index = 0; index < buildResults.length; index++) {
BuildUri buildUri = buildUris[index];
BuildResult result = buildResults[index];
if (result == null) {
failingUris.add('$buildUri');
}
}
// TODO(johnniwinther): Find out why these steps cannot be read.
Expect.setEquals([
'/builders/pkg-mac10.11-release-be/builds/-2/'
'/builders/pkg-mac10.11-release-be/builds/-1/'
'steps/third_party/pkg_tested unit tests',
'/builders/pkg-linux-release-be/builds/-2/steps/'
'/builders/pkg-linux-release-be/builds/-1/steps/'
'third_party/pkg_tested unit tests',
'/builders/pkg-win7-release-be/builds/-2/steps/'
'/builders/pkg-win7-release-be/builds/-1/steps/'
'third_party/pkg_tested unit tests',
], failingUris, "Unexpected failing buildbot uris: $failingUris");
], failingUris,
"Unexpected failing buildbot uris:\n ${failingUris.join('\n ')}");
client.close();
bot.close();
}