Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bin/internal/libimobiledevice.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
487e6ed10c2ffcb389ff4eec10530e8a9c37e987
0bf0f9e941c85d06ce4b5909d7a61b3a4f2a6a05
2 changes: 1 addition & 1 deletion bin/internal/libimobiledeviceglue.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c1be125a7366458516b6c9dfeb7df0a5e513f9a4
050ff3bf8fdab6ce53a2ddc6ae49b11b1c02a168
2 changes: 1 addition & 1 deletion bin/internal/libplist.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
b7f09ccdddc75d82ccaed867eb60e6997a7cad40
cf5897a71ea412ea2aeb1e2f6b5ea74d4fabfd8c
2 changes: 1 addition & 1 deletion bin/internal/libusbmuxd.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
b297379871dec238726a8c4a08ec64db467694d2
19d6bec393c9f9b31ccb090059f59268da32e281
2 changes: 1 addition & 1 deletion bin/internal/openssl.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c1eeb9406b6142148f267594197d853403d10208
22dbb176deef7d9a80f5c94f57a4b518ea935f50
43 changes: 2 additions & 41 deletions dev/bots/suite_runners/run_verify_binaries_codesigned_tests.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import '../utils.dart';

Future<void> verifyCodesignedTestRunner() async {
printProgress('${green}Running binaries codesign verification$reset');
await runCommand(path.join(flutterRoot, 'bin', 'flutter'), <String>[
await runCommand('flutter', <String>[
'precache',
'--android',
'--ios',
Expand All @@ -23,14 +23,13 @@ Future<void> verifyCodesignedTestRunner() async {

await verifyExist(flutterRoot);
await verifySignatures(flutterRoot);
await verifyFatBinaries(flutterRoot);
}

/// Some binaries should always be codesigned, even on master. Verify that they
/// are codesigned and have the correct entitlements.
Future<void> verifyPreCodesignedTestRunner() async {
printProgress('${green}Running binaries codesign verification$reset');
await runCommand(path.join(flutterRoot, 'bin', 'flutter'), <String>[
await runCommand('flutter', <String>[
'precache',
'--android',
'--ios',
Expand All @@ -39,7 +38,6 @@ Future<void> verifyPreCodesignedTestRunner() async {

await verifyExist(flutterRoot);
await verifySignatures(flutterRoot, forRelease: false);
await verifyFatBinaries(flutterRoot);
}

const List<String> expectedEntitlements = <String>[
Expand Down Expand Up @@ -337,43 +335,6 @@ Future<void> verifySignatures(
print('Verified that files are codesigned and have expected entitlements.');
}

/// Verify that specific binaries are fat binaries containing both x86_64 and arm64 slices.
Future<void> verifyFatBinaries(
String flutterRoot, {
@visibleForTesting ProcessManager processManager = const LocalProcessManager(),
}) async {
final List<String> fatBinaries =
presignedBinariesWithEntitlements(flutterRoot) +
presignedBinariesWithoutEntitlements(flutterRoot);
final failedBinaries = <String>[];

for (final binaryPath in fatBinaries) {
print('Verifying fat binary architectures for $binaryPath');
final io.ProcessResult result = await processManager.run(<String>['file', binaryPath]);

if (result.exitCode != 0) {
print('Failed to run file command on $binaryPath');
failedBinaries.add(binaryPath);
continue;
}

final output = result.stdout as String;
final bool containsX86_64 = output.contains('x86_64');
final bool containsArm64 = output.contains('arm64');

if (!containsX86_64 || !containsArm64) {
print('Binary $binaryPath is not a fat binary containing both x86_64 and arm64.');
print('Output: $output');
failedBinaries.add(binaryPath);
}
}

if (failedBinaries.isNotEmpty) {
throw Exception('Failed fat binary verification for:\n${failedBinaries.join('\n')}');
}
print('All expected fat binaries verified.');
}

/// Find every binary file in the given [rootDirectory].
Future<List<String>> findBinaryPaths(
String rootDirectory, {
Expand Down
51 changes: 0 additions & 51 deletions dev/bots/test/codesign_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -282,55 +282,4 @@ void main() async {
);
});
});

group('verifyFatBinaries', () {
test('succeeds if every binary is fat', () async {
final commandList = <FakeCommand>[];
final List<String> fatBinaries =
presignedBinariesWithEntitlements(flutterRoot) +
presignedBinariesWithoutEntitlements(flutterRoot);

for (final binaryPath in fatBinaries) {
commandList.add(
FakeCommand(
command: <String>['file', binaryPath],
stdout:
'Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]',
),
);
}
final ProcessManager processManager = FakeProcessManager.list(commandList);
await expectLater(verifyFatBinaries(flutterRoot, processManager: processManager), completes);
});

test('fails if a binary is not fat', () async {
final commandList = <FakeCommand>[];
final List<String> fatBinaries =
presignedBinariesWithEntitlements(flutterRoot) +
presignedBinariesWithoutEntitlements(flutterRoot);

if (fatBinaries.isNotEmpty) {
commandList.add(
FakeCommand(
command: <String>['file', fatBinaries.first],
stdout: 'Mach-O 64-bit executable x86_64',
),
);
for (final String binaryPath in fatBinaries.skip(1)) {
commandList.add(
FakeCommand(
command: <String>['file', binaryPath],
stdout:
'Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]',
),
);
}
}
final ProcessManager processManager = FakeProcessManager.list(commandList);
expect(
() async => verifyFatBinaries(flutterRoot, processManager: processManager),
throwsExceptionWith('Failed fat binary verification for:'),
);
});
});
}
Loading