Unverified Commit 778c2ce9 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Convert some code_signing_tests to testWithoutContext (#53142)

parent 47582223
...@@ -4,11 +4,14 @@ ...@@ -4,11 +4,14 @@
import 'dart:async'; import 'dart:async';
import 'package:meta/meta.dart';
import 'package:process/process.dart';
import 'package:quiver/strings.dart'; import 'package:quiver/strings.dart';
import '../application_package.dart'; import '../application_package.dart';
import '../base/common.dart'; import '../base/common.dart';
import '../base/io.dart'; import '../base/io.dart';
import '../base/logger.dart';
import '../base/process.dart'; import '../base/process.dart';
import '../convert.dart' show utf8; import '../convert.dart' show utf8;
import '../globals.dart' as globals; import '../globals.dart' as globals;
...@@ -95,7 +98,9 @@ final RegExp _certificateOrganizationalUnitExtractionPattern = RegExp(r'OU=([a-z ...@@ -95,7 +98,9 @@ final RegExp _certificateOrganizationalUnitExtractionPattern = RegExp(r'OU=([a-z
/// Will return null if none are found, if the user cancels or if the Xcode /// Will return null if none are found, if the user cancels or if the Xcode
/// project has a development team set in the project's build settings. /// project has a development team set in the project's build settings.
Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
BuildableIOSApp iosApp, @required BuildableIOSApp iosApp,
@required ProcessManager processManager,
@required Logger logger,
}) async { }) async {
final Map<String, String> buildSettings = await iosApp.project.buildSettings; final Map<String, String> buildSettings = await iosApp.project.buildSettings;
if (buildSettings == null) { if (buildSettings == null) {
...@@ -105,7 +110,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ ...@@ -105,7 +110,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
// If the user already has it set in the project build settings itself, // If the user already has it set in the project build settings itself,
// continue with that. // continue with that.
if (isNotEmpty(buildSettings['DEVELOPMENT_TEAM'])) { if (isNotEmpty(buildSettings['DEVELOPMENT_TEAM'])) {
globals.printStatus( logger.printStatus(
'Automatically signing iOS for device deployment using specified development ' 'Automatically signing iOS for device deployment using specified development '
'team in Xcode project: ${buildSettings['DEVELOPMENT_TEAM']}' 'team in Xcode project: ${buildSettings['DEVELOPMENT_TEAM']}'
); );
...@@ -118,6 +123,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ ...@@ -118,6 +123,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
// If the user's environment is missing the tools needed to find and read // If the user's environment is missing the tools needed to find and read
// certificates, abandon. Tools should be pre-equipped on macOS. // certificates, abandon. Tools should be pre-equipped on macOS.
final ProcessUtils processUtils = ProcessUtils(processManager: processManager, logger: logger);
if (!await processUtils.exitsHappy(const <String>['which', 'security']) || if (!await processUtils.exitsHappy(const <String>['which', 'security']) ||
!await processUtils.exitsHappy(const <String>['which', 'openssl'])) { !await processUtils.exitsHappy(const <String>['which', 'openssl'])) {
return null; return null;
...@@ -133,7 +139,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ ...@@ -133,7 +139,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
throwOnError: true, throwOnError: true,
)).stdout.trim(); )).stdout.trim();
} on ProcessException catch (error) { } on ProcessException catch (error) {
globals.printTrace('Unexpected failure from find-identity: $error.'); logger.printTrace('Unexpected failure from find-identity: $error.');
return null; return null;
} }
...@@ -148,14 +154,14 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ ...@@ -148,14 +154,14 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
.toSet() // Unique. .toSet() // Unique.
.toList(); .toList();
final String signingIdentity = await _chooseSigningIdentity(validCodeSigningIdentities); final String signingIdentity = await _chooseSigningIdentity(validCodeSigningIdentities, logger);
// If none are chosen, return null. // If none are chosen, return null.
if (signingIdentity == null) { if (signingIdentity == null) {
return null; return null;
} }
globals.printStatus('Signing iOS app for device deployment using developer identity: "$signingIdentity"'); logger.printStatus('Signing iOS app for device deployment using developer identity: "$signingIdentity"');
final String signingCertificateId = final String signingCertificateId =
_securityFindIdentityCertificateCnExtractionPattern _securityFindIdentityCertificateCnExtractionPattern
...@@ -174,7 +180,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ ...@@ -174,7 +180,7 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
throwOnError: true, throwOnError: true,
)).stdout.trim(); )).stdout.trim();
} on ProcessException catch (error) { } on ProcessException catch (error) {
globals.printTrace("Couldn't find the certificate: $error."); logger.printTrace("Couldn't find the certificate: $error.");
return null; return null;
} }
...@@ -198,10 +204,10 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({ ...@@ -198,10 +204,10 @@ Future<Map<String, String>> getCodeSigningIdentityDevelopmentTeam({
}; };
} }
Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) async { Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities, Logger logger) async {
// The user has no valid code signing identities. // The user has no valid code signing identities.
if (validCodeSigningIdentities.isEmpty) { if (validCodeSigningIdentities.isEmpty) {
globals.printError(noCertificatesInstruction, emphasis: true); logger.printError(noCertificatesInstruction, emphasis: true);
throwToolExit('No development certificates available to code sign app for device deployment'); throwToolExit('No development certificates available to code sign app for device deployment');
} }
...@@ -214,10 +220,10 @@ Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) a ...@@ -214,10 +220,10 @@ Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) a
if (savedCertChoice != null) { if (savedCertChoice != null) {
if (validCodeSigningIdentities.contains(savedCertChoice)) { if (validCodeSigningIdentities.contains(savedCertChoice)) {
globals.printStatus('Found saved certificate choice "$savedCertChoice". To clear, use "flutter config".'); logger.printStatus('Found saved certificate choice "$savedCertChoice". To clear, use "flutter config".');
return savedCertChoice; return savedCertChoice;
} else { } else {
globals.printError('Saved signing certificate "$savedCertChoice" is not a valid development certificate'); logger.printError('Saved signing certificate "$savedCertChoice" is not a valid development certificate');
} }
} }
...@@ -228,14 +234,14 @@ Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) a ...@@ -228,14 +234,14 @@ Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) a
} }
final int count = validCodeSigningIdentities.length; final int count = validCodeSigningIdentities.length;
globals.printStatus( logger.printStatus(
'Multiple valid development certificates available (your choice will be saved):', 'Multiple valid development certificates available (your choice will be saved):',
emphasis: true, emphasis: true,
); );
for (int i=0; i<count; i++) { for (int i=0; i<count; i++) {
globals.printStatus(' ${i+1}) ${validCodeSigningIdentities[i]}', emphasis: true); logger.printStatus(' ${i+1}) ${validCodeSigningIdentities[i]}', emphasis: true);
} }
globals.printStatus(' a) Abort', emphasis: true); logger.printStatus(' a) Abort', emphasis: true);
final String choice = await globals.terminal.promptForCharInput( final String choice = await globals.terminal.promptForCharInput(
List<String>.generate(count, (int number) => '${number + 1}') List<String>.generate(count, (int number) => '${number + 1}')
...@@ -243,14 +249,14 @@ Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) a ...@@ -243,14 +249,14 @@ Future<String> _chooseSigningIdentity(List<String> validCodeSigningIdentities) a
prompt: 'Please select a certificate for code signing', prompt: 'Please select a certificate for code signing',
displayAcceptedCharacters: true, displayAcceptedCharacters: true,
defaultChoiceIndex: 0, // Just pressing enter chooses the first one. defaultChoiceIndex: 0, // Just pressing enter chooses the first one.
logger: globals.logger, logger: logger,
); );
if (choice == 'a') { if (choice == 'a') {
throwToolExit('Aborted. Code signing is required to build a deployable iOS app.'); throwToolExit('Aborted. Code signing is required to build a deployable iOS app.');
} else { } else {
final String selectedCert = validCodeSigningIdentities[int.parse(choice) - 1]; final String selectedCert = validCodeSigningIdentities[int.parse(choice) - 1];
globals.printStatus('Certificate choice "$selectedCert" saved'); logger.printStatus('Certificate choice "$selectedCert" saved');
globals.config.setValue('ios-signing-cert', selectedCert); globals.config.setValue('ios-signing-cert', selectedCert);
return selectedCert; return selectedCert;
} }
......
...@@ -172,7 +172,11 @@ Future<XcodeBuildResult> buildXcodeProject({ ...@@ -172,7 +172,11 @@ Future<XcodeBuildResult> buildXcodeProject({
Map<String, String> autoSigningConfigs; Map<String, String> autoSigningConfigs;
if (codesign && buildForDevice) { if (codesign && buildForDevice) {
autoSigningConfigs = await getCodeSigningIdentityDevelopmentTeam(iosApp: app); autoSigningConfigs = await getCodeSigningIdentityDevelopmentTeam(
iosApp: app,
processManager: globals.processManager,
logger: globals.logger
);
} }
final FlutterProject project = FlutterProject.current(); final FlutterProject project = FlutterProject.current();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment