Test engine version hash, but skip for Dart HHH bot (#55223)
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 035d07b..b84566a 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -28,12 +28,26 @@
/// appropriate error message.
typedef OutputChecker = String Function(CapturedOutput);
+final String exe = Platform.isWindows ? '.exe' : '';
+final String bat = Platform.isWindows ? '.bat' : '';
final String flutterRoot = path.dirname(path.dirname(path.dirname(path.fromUri(Platform.script))));
-final String flutter = path.join(flutterRoot, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter');
-final String dart = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'dart.exe' : 'dart');
-final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'pub.bat' : 'pub');
+final String flutter = path.join(flutterRoot, 'bin', 'flutter$bat');
+final String dart = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', 'dart$exe');
+final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', 'pub$bat');
final String pubCache = path.join(flutterRoot, '.pub-cache');
final String toolRoot = path.join(flutterRoot, 'packages', 'flutter_tools');
+final String engineVersionFile = path.join(flutterRoot, 'bin', 'internal', 'engine.version');
+
+String get platformFolderName {
+ if (Platform.isWindows)
+ return 'windows-x64';
+ if (Platform.isMacOS)
+ return 'darwin-x64';
+ if (Platform.isLinux)
+ return 'linux-x64';
+ throw UnsupportedError('The platform ${Platform.operatingSystem} is not supported by this script.');
+}
+final String flutterTester = path.join(flutterRoot, 'bin', 'cache', 'artifacts', 'engine', platformFolderName, 'flutter_tester$exe');
/// The arguments to pass to `flutter test` (typically the local engine
/// configuration) -- prefilled with the arguments passed to test.dart.
@@ -118,8 +132,37 @@
print('$clock ${bold}Test successful.$reset');
}
+/// Verify the Flutter Engine is the revision in
+/// bin/cache/internal/engine.version.
+Future<void> _validateEngineHash() async {
+ final String luciBotId = Platform.environment['SWARMING_BOT_ID'] ?? '';
+ if (luciBotId.startsWith('luci-dart-')) {
+ // The Dart HHH bots intentionally modify the local artifact cache
+ // and then use this script to run Flutter's test suites.
+ // Because the artifacts have been changed, this particular test will return
+ // a false positive and should be skipped.
+ print('${yellow}Skipping Flutter Engine Version Validation for swarming '
+ 'bot $luciBotId.');
+ return;
+ }
+ final String expectedVersion = File(engineVersionFile).readAsStringSync().trim();
+ final CapturedOutput flutterTesterOutput = CapturedOutput();
+ await runCommand(flutterTester, <String>['--help'], output: flutterTesterOutput, outputMode: OutputMode.capture);
+ final String actualVersion = flutterTesterOutput.stderr.split('\n').firstWhere((final String line) {
+ return line.startsWith('Flutter Engine Version:');
+ });
+ if (!actualVersion.contains(expectedVersion)) {
+ print('${red}Expected "Flutter Engine Version: $expectedVersion", '
+ 'but found "$actualVersion".');
+ exit(1);
+ }
+}
+
Future<void> _runSmokeTests() async {
print('${green}Running smoketests...$reset');
+
+ await _validateEngineHash();
+
// Verify that the tests actually return failure on failure and success on
// success.
final String automatedTests = path.join(flutterRoot, 'dev', 'automated_tests');
@@ -1249,7 +1292,6 @@
}
Future<String> _getAuthors() async {
- final String exe = Platform.isWindows ? '.exe' : '';
final String author = await runAndGetStdout(
'git$exe', <String>['-c', 'log.showSignature=false', 'log', gitHash, '--pretty="%an <%ae>"'],
workingDirectory: flutterRoot,