| // 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'), |
| ), |
| ), |
| ); |
| }); |
| }); |
| } |