blob: 6e8576d4c10847e837c8751d70542b764515da46 [file] [log] [blame]
// Copyright 2013 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:ffi' show Abi;
import 'package:engine_tool/src/commands/command_runner.dart';
import 'package:logging/logging.dart' as log;
import 'package:test/test.dart';
import 'fixtures.dart' as fixtures;
import 'src/test_build_configs.dart';
import 'utils.dart';
void main() {
List<String> stringsFromLogs(List<log.LogRecord> logs) {
return logs.map((log.LogRecord r) => r.message).toList();
}
final cannedProcesses = <CannedProcess>[
CannedProcess(
(command) => command.contains('desc'),
stdout: fixtures.gnDescOutput(),
),
];
test('query command returns builds for the host platform.', () async {
final testEnvironment = TestEnvironment.withTestEngine(
// Intentionally use the default parameter to make it explicit.
// ignore: avoid_redundant_argument_values
abi: Abi.linuxX64,
cannedProcesses: cannedProcesses,
);
addTearDown(testEnvironment.cleanup);
final linuxBuilders1 = TestBuilderConfig();
linuxBuilders1.addBuild(
name: 'ci/build_name',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'linux/android_debug_arm64',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'ci/android_debug_rbe_arm64',
dimension: TestDroneDimension.linux,
);
final linuxBuilders2 = TestBuilderConfig();
linuxBuilders2.addBuild(
name: 'ci/build_name2',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'linux/host_debug2',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'linux/android_debug2_arm64',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'ci/android_debug2_rbe_arm64',
dimension: TestDroneDimension.linux,
);
final macOSBuilders = TestBuilderConfig();
macOSBuilders.addBuild(
name: 'ci/build_name',
dimension: TestDroneDimension.mac,
);
macOSBuilders.addBuild(
name: 'mac/host_debug',
dimension: TestDroneDimension.mac,
);
macOSBuilders.addBuild(
name: 'mac/android_debug_arm64',
dimension: TestDroneDimension.mac,
);
macOSBuilders.addBuild(
name: 'ci/android_debug_rbe_arm64',
dimension: TestDroneDimension.mac,
);
final runner = ToolCommandRunner(
environment: testEnvironment.environment,
configs: {
'linux_test_config': linuxBuilders1.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
'linux_test_config2': linuxBuilders2.buildConfig(
path: 'ci/builders/linux_test_config2.json',
),
'mac_test_config': macOSBuilders.buildConfig(
path: 'ci/builders/mac_test_config.json',
),
},
);
final result = await runner.run(<String>[
'query',
'builders',
]);
printOnFailure(testEnvironment.testLogs.map((r) => r.message).join('\n'));
expect(result, equals(0));
expect(
stringsFromLogs(testEnvironment.testLogs),
equals(<String>[
'Add --verbose to see detailed information about each builder\n',
'\n',
'"linux_test_config" builder:\n',
' "ci/build_name" config\n',
' "linux/host_debug" config\n',
' "linux/android_debug_arm64" config\n',
' "ci/android_debug_rbe_arm64" config\n',
'"linux_test_config2" builder:\n',
' "ci/build_name2" config\n',
' "linux/host_debug2" config\n',
' "linux/android_debug2_arm64" config\n',
' "ci/android_debug2_rbe_arm64" config\n',
]),
);
});
test('query command returns only from the named builder.', () async {
final testEnvironment = TestEnvironment.withTestEngine(
// Intentionally use the default parameter to make it explicit.
// ignore: avoid_redundant_argument_values
abi: Abi.linuxX64,
cannedProcesses: cannedProcesses,
);
addTearDown(testEnvironment.cleanup);
final linuxBuilders1 = TestBuilderConfig();
linuxBuilders1.addBuild(
name: 'ci/build_name',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'linux/android_debug_arm64',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'ci/android_debug_rbe_arm64',
dimension: TestDroneDimension.linux,
);
final linuxBuilders2 = TestBuilderConfig();
linuxBuilders2.addBuild(
name: 'ci/build_name2',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'linux/host_debug2',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'linux/android_debug2_arm64',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'ci/android_debug2_rbe_arm64',
dimension: TestDroneDimension.linux,
);
final runner = ToolCommandRunner(
environment: testEnvironment.environment,
configs: {
'linux_test_config': linuxBuilders1.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
'linux_test_config2': linuxBuilders2.buildConfig(
path: 'ci/builders/linux_test_config2.json',
),
},
);
final result = await runner.run(<String>[
'query',
'builders',
'--builder',
'linux_test_config',
]);
printOnFailure(testEnvironment.testLogs.map((r) => r.message).join('\n'));
expect(result, equals(0));
expect(
stringsFromLogs(testEnvironment.testLogs),
equals(<String>[
'Add --verbose to see detailed information about each builder\n',
'\n',
'"linux_test_config" builder:\n',
' "ci/build_name" config\n',
' "linux/host_debug" config\n',
' "linux/android_debug_arm64" config\n',
' "ci/android_debug_rbe_arm64" config\n',
]));
});
test('query command with --all returns all builds.', () async {
final testEnvironment = TestEnvironment.withTestEngine(
cannedProcesses: cannedProcesses,
);
addTearDown(testEnvironment.cleanup);
final linuxBuilders1 = TestBuilderConfig();
linuxBuilders1.addBuild(
name: 'ci/build_name',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'linux/android_debug_arm64',
dimension: TestDroneDimension.linux,
);
linuxBuilders1.addBuild(
name: 'ci/android_debug_rbe_arm64',
dimension: TestDroneDimension.linux,
);
final linuxBuilders2 = TestBuilderConfig();
linuxBuilders2.addBuild(
name: 'ci/build_name2',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'linux/host_debug2',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'linux/android_debug2_arm64',
dimension: TestDroneDimension.linux,
);
linuxBuilders2.addBuild(
name: 'ci/android_debug2_rbe_arm64',
dimension: TestDroneDimension.linux,
);
final macOSBuilders = TestBuilderConfig();
macOSBuilders.addBuild(
name: 'ci/build_name',
dimension: TestDroneDimension.mac,
);
macOSBuilders.addBuild(
name: 'mac/host_debug',
dimension: TestDroneDimension.mac,
);
macOSBuilders.addBuild(
name: 'mac/android_debug_arm64',
dimension: TestDroneDimension.mac,
);
macOSBuilders.addBuild(
name: 'ci/android_debug_rbe_arm64',
dimension: TestDroneDimension.mac,
);
final runner = ToolCommandRunner(
environment: testEnvironment.environment,
configs: {
'linux_test_config': linuxBuilders1.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
'linux_test_config2': linuxBuilders2.buildConfig(
path: 'ci/builders/linux_test_config2.json',
),
'mac_test_config': macOSBuilders.buildConfig(
path: 'ci/builders/mac_test_config.json',
),
},
);
final result = await runner.run(<String>[
'query',
'builders',
'--all',
]);
printOnFailure(testEnvironment.testLogs.map((r) => r.message).join('\n'));
expect(result, equals(0));
expect(
stringsFromLogs(testEnvironment.testLogs),
equals(<String>[
'Add --verbose to see detailed information about each builder\n',
'\n',
'"linux_test_config" builder:\n',
' "ci/build_name" config\n',
' "linux/host_debug" config\n',
' "linux/android_debug_arm64" config\n',
' "ci/android_debug_rbe_arm64" config\n',
'"linux_test_config2" builder:\n',
' "ci/build_name2" config\n',
' "linux/host_debug2" config\n',
' "linux/android_debug2_arm64" config\n',
' "ci/android_debug2_rbe_arm64" config\n',
'"mac_test_config" builder:\n',
' "ci/build_name" config\n',
' "mac/host_debug" config\n',
' "mac/android_debug_arm64" config\n',
' "ci/android_debug_rbe_arm64" config\n',
]),
);
});
test('query targets', () async {
final testEnvironment = TestEnvironment.withTestEngine(
cannedProcesses: cannedProcesses,
);
addTearDown(testEnvironment.cleanup);
final linuxBuilders1 = TestBuilderConfig();
linuxBuilders1.addBuild(
name: 'ci/build_name',
dimension: TestDroneDimension.linux,
targetDir: 'host_debug',
);
linuxBuilders1.addBuild(
name: 'linux/host_debug',
dimension: TestDroneDimension.linux,
targetDir: 'host_debug',
);
linuxBuilders1.addBuild(
name: 'linux/android_debug_arm64',
dimension: TestDroneDimension.linux,
targetDir: 'android_debug_arm64',
);
linuxBuilders1.addBuild(
name: 'ci/android_debug_rbe_arm64',
dimension: TestDroneDimension.linux,
targetDir: 'android_debug_arm64',
);
final runner = ToolCommandRunner(
environment: testEnvironment.environment,
configs: {
'linux_test_config': linuxBuilders1.buildConfig(
path: 'ci/builders/linux_test_config.json',
),
},
);
final result = await runner.run(<String>[
'query',
'targets',
]);
printOnFailure(testEnvironment.testLogs.map((r) => r.message).join('\n'));
expect(result, equals(0));
final expected = <String>[
'//flutter/display_list:display_list_unittests',
'//flutter/flow:flow_unittest',
'//flutter/fml:fml_arc_unittests',
];
final testLogs = stringsFromLogs(testEnvironment.testLogs);
for (final testLog in testLogs) {
// Expect one of the expected targets to be in the output.
// Then remove it from the list of expected targets.
for (final target in expected) {
if (testLog.contains(target)) {
expected.remove(target);
break;
}
}
}
expect(
expected.isEmpty,
isTrue,
reason: 'All expected targets were found',
);
});
}