catch failure to parse FLUTTER_STORAGE_BASE_URL (#43599)

This commit is contained in:
Jonah Williams 2019-10-28 10:54:03 -07:00 committed by GitHub
parent 450a72488d
commit b142c9bbdb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 6 deletions

View file

@ -482,16 +482,23 @@ abstract class CachedArtifact extends ArtifactSet {
/// Template method to perform artifact update.
Future<void> updateInner();
String get _storageBaseUrl {
@visibleForTesting
String get storageBaseUrl {
final String overrideUrl = platform.environment['FLUTTER_STORAGE_BASE_URL'];
if (overrideUrl == null) {
return 'https://storage.googleapis.com';
}
// verify that this is a valid URI.
try {
Uri.parse(overrideUrl);
} on FormatException catch (err) {
throwToolExit('"FLUTTER_STORAGE_BASE_URL" contains an invalid URI:\n$err');
}
_maybeWarnAboutStorageOverride(overrideUrl);
return overrideUrl;
}
Uri _toStorageUri(String path) => Uri.parse('$_storageBaseUrl/$path');
Uri _toStorageUri(String path) => Uri.parse('$storageBaseUrl/$path');
/// Download an archive from the given [url] and unzip it to [location].
Future<void> _downloadArchive(String message, Uri url, Directory location, bool verifier(File f), void extractor(File f, Directory d)) {
@ -587,7 +594,7 @@ class FlutterWebSdk extends CachedArtifact {
} else if (platform.isWindows) {
platformName += 'windows-x64';
}
final Uri url = Uri.parse('$_storageBaseUrl/flutter_infra/flutter/$version/$platformName.zip');
final Uri url = Uri.parse('$storageBaseUrl/flutter_infra/flutter/$version/$platformName.zip');
await _downloadZipArchive('Downloading Web SDK...', url, location);
// This is a temporary work-around for not being able to safely download into a shared directory.
for (FileSystemEntity entity in location.listSync(recursive: true)) {
@ -652,7 +659,7 @@ abstract class EngineCachedArtifact extends CachedArtifact {
@override
Future<void> updateInner() async {
final String url = '$_storageBaseUrl/flutter_infra/flutter/$version/';
final String url = '$storageBaseUrl/flutter_infra/flutter/$version/';
final Directory pkgDir = cache.getCacheDir('pkg');
for (String pkgName in getPackageDirs()) {
@ -687,7 +694,7 @@ abstract class EngineCachedArtifact extends CachedArtifact {
Future<bool> checkForArtifacts(String engineVersion) async {
engineVersion ??= version;
final String url = '$_storageBaseUrl/flutter_infra/flutter/$engineVersion/';
final String url = '$storageBaseUrl/flutter_infra/flutter/$engineVersion/';
bool exists = false;
for (String pkgName in getPackageDirs()) {
@ -1111,7 +1118,7 @@ class IosUsbArtifacts extends CachedArtifact {
}
@visibleForTesting
Uri get archiveUri => Uri.parse('$_storageBaseUrl/flutter_infra/ios-usb-dependencies${cache.useUnsignedMacBinaries ? '/unsigned' : ''}/$name/$version/$name.zip');
Uri get archiveUri => Uri.parse('$storageBaseUrl/flutter_infra/ios-usb-dependencies${cache.useUnsignedMacBinaries ? '/unsigned' : ''}/$name/$version/$name.zip');
}
// Many characters are problematic in filenames, especially on Windows.

View file

@ -5,6 +5,7 @@
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:file_testing/file_testing.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:meta/meta.dart';
import 'package:mockito/mockito.dart';
import 'package:platform/platform.dart';
@ -202,6 +203,18 @@ void main() {
);
}
});
testUsingContext('Invalid URI for FLUTTER_STORAGE_BASE_URL throws ToolExit', () async {
when(platform.environment).thenReturn(const <String, String>{
'FLUTTER_STORAGE_BASE_URL': ' http://foo',
});
final Cache cache = Cache();
final CachedArtifact artifact = MaterialFonts(cache);
expect(() => artifact.storageBaseUrl, throwsA(isInstanceOf<ToolExit>()));
}, overrides: <Type, Generator>{
Platform: () => MockPlatform(),
});
});
testUsingContext('flattenNameSubdirs', () {
@ -379,3 +392,4 @@ class MockIosUsbArtifacts extends Mock implements IosUsbArtifacts {}
class MockInternetAddress extends Mock implements InternetAddress {}
class MockCache extends Mock implements Cache {}
class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {}
class MockPlatform extends Mock implements Platform {}