| // Copyright 2014 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:io' as io; | |
| import 'package:flutter_devicelab/framework/utils.dart'; | |
| import 'package:path/path.dart' as path; | |
| import 'common.dart'; | |
| void main() { | |
| group('grep', () { | |
| test('greps lines', () { | |
| expect(grep('b', from: 'ab\ncd\nba'), <String>['ab', 'ba']); | |
| }); | |
| test('understands RegExp', () { | |
| expect(grep(RegExp('^b'), from: 'ab\nba'), <String>['ba']); | |
| }); | |
| }); | |
| group('parse service', () { | |
| const badOutput = 'No uri here'; | |
| const sampleOutput = | |
| 'A Dart VM Service on ' | |
| 'Pixel 3 XL is available at: http://127.0.0.1:9090/LpjUpsdEjqI=/'; | |
| test('uri', () { | |
| expect(parseServiceUri(sampleOutput), Uri.parse('http://127.0.0.1:9090/LpjUpsdEjqI=/')); | |
| expect(parseServiceUri(badOutput), null); | |
| }); | |
| test('port', () { | |
| expect(parseServicePort(sampleOutput), 9090); | |
| expect(parseServicePort(badOutput), null); | |
| }); | |
| }); | |
| group('engine environment declarations', () { | |
| test('localEngine', () { | |
| expect(localEngineFromEnv, null); | |
| expect(localEngineHostFromEnv, null); | |
| expect(localEngineSrcPathFromEnv, null); | |
| }); | |
| }); | |
| group('filesystem safety guard', () { | |
| test('isolates modifications to system temp directory', () { | |
| final tempFile = io.File( | |
| path.join(io.Directory.systemTemp.path, 'devicelab_fs_guard_test_safe.txt'), | |
| ); | |
| addTearDown(() { | |
| if (tempFile.existsSync()) { | |
| tempFile.deleteSync(); | |
| } | |
| }); | |
| // Writing under system temp should succeed | |
| tempFile.writeAsStringSync('safe-devicelab-content'); | |
| expect(tempFile.readAsStringSync(), 'safe-devicelab-content'); | |
| // Modifying outside system temp should fail and throw our guarded exception | |
| final String root = path.rootPrefix(io.Directory.current.absolute.path); | |
| final unsafeFile = io.File(path.join(root, 'tmp_unsafe_devicelab.txt')); | |
| expect(unsafeFile.existsSync(), false); | |
| expect( | |
| () => unsafeFile.writeAsStringSync('unsafe-content'), | |
| throwsA( | |
| isA<io.FileSystemException>().having( | |
| (e) => e.message, | |
| 'message', | |
| contains('Test attempted to modify file outside of temp directory'), | |
| ), | |
| ), | |
| ); | |
| }); | |
| }); | |
| } |