From 0e559ec2c94b7862c5a946e21b6efbc00962add6 Mon Sep 17 00:00:00 2001 From: Ian McKellar Date: Tue, 19 Nov 2019 14:43:27 -0800 Subject: [PATCH] [fuchsia_ctl] Fix IPv6 URL formatting for amber_ctl (#46) * [fuchsia_ctl] Fix IPv6 URL formatting for amber_ctl If the local address of the interface that's connected to the Fuchsia device has an IPv6 address the URL to the Amber config.json was formatted incorrectly. * [fuchsia_ctl] Discover local address over ssh. * [fuchsia_ctl] remove author from pubspec.yaml --- packages/fuchsia_ctl/bin/main.dart | 17 ++++++++++++++--- .../fuchsia_ctl/lib/src/package_server.dart | 6 ++++++ packages/fuchsia_ctl/pubspec.yaml | 1 - .../fuchsia_ctl/test/package_server_test.dart | 5 +++++ 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/fuchsia_ctl/bin/main.dart b/packages/fuchsia_ctl/bin/main.dart index 2bb3a4754b..72a62aefd9 100644 --- a/packages/fuchsia_ctl/bin/main.dart +++ b/packages/fuchsia_ctl/bin/main.dart @@ -172,7 +172,6 @@ Future test( final List farFiles = args['far']; final String target = args['target']; try { - final String localIp = await devFinder.getLocalAddress(deviceName); final String targetIp = await devFinder.getTargetAddress(deviceName); stdout.writeln('Using ${repo.path} as repo to serve to $targetIp...'); repo.createSync(recursive: true); @@ -185,13 +184,23 @@ Future test( await server.serveRepo(repo.path, port: 0); + result = await ssh.runCommand(targetIp, + identityFilePath: identityFile, + command: ['echo \$SSH_CONNECTION']); + if (!result.success) { + stderr.writeln('failed to get local address, aborting.'); + stderr.writeln(result.error); + return result; + } + final String localIp = result.info.split(' ')[0].replaceAll('%', '%25'); + result = await ssh.runCommand( targetIp, identityFilePath: identityFile, command: [ 'amberctl', 'add_src', - '-f', 'http://$localIp:${server.serverPort}/config.json', // + '-f', 'http://[$localIp]:${server.serverPort}/config.json', // '-n', uuid, ], ); @@ -245,6 +254,8 @@ Future test( return testResult; } finally { repo.deleteSync(recursive: true); - await server.close(); + if (server.serving) { + await server.close(); + } } } diff --git a/packages/fuchsia_ctl/lib/src/package_server.dart b/packages/fuchsia_ctl/lib/src/package_server.dart index c9a84cd689..1d99a6cc19 100644 --- a/packages/fuchsia_ctl/lib/src/package_server.dart +++ b/packages/fuchsia_ctl/lib/src/package_server.dart @@ -38,6 +38,11 @@ class PackageServer { int _serverPort; + /// Is the server up? + bool get serving { + return _pmServerProcess != null; + } + /// Creates a new local repository and associated key material. /// /// Corresponds to `pm newrepo`. @@ -115,6 +120,7 @@ class PackageServer { } _pmServerProcess.kill(); final int exitCode = await _pmServerProcess.exitCode; + _pmServerProcess = null; if (exitCode == 0) { return OperationResult.success(); } diff --git a/packages/fuchsia_ctl/pubspec.yaml b/packages/fuchsia_ctl/pubspec.yaml index 9040849336..be9d031ccc 100644 --- a/packages/fuchsia_ctl/pubspec.yaml +++ b/packages/fuchsia_ctl/pubspec.yaml @@ -3,7 +3,6 @@ description: > A Dart package for paving, serving packages to, and running commands on a Fuchsia Device. This package is primarily intended for use in Flutter's continuous integration/testing infrastructure. -author: Flutter Team homepage: https://github.com/flutter/packags/tree/master/packages/fuchsia_ctl version: 0.0.8 diff --git a/packages/fuchsia_ctl/test/package_server_test.dart b/packages/fuchsia_ctl/test/package_server_test.dart index 09617f8807..a8e99b0d7b 100644 --- a/packages/fuchsia_ctl/test/package_server_test.dart +++ b/packages/fuchsia_ctl/test/package_server_test.dart @@ -95,7 +95,10 @@ void main() { processManager: processManager, ); + expect(server.serving, false); + await server.serveRepo(repoPath, port: 0); + expect(server.serving, true); final List capturedStartArgs = verify(processManager.start(captureAny)) @@ -115,6 +118,8 @@ void main() { expect(result.success, true); expect(serverProcess.killed, true); + + expect(server.serving, false); }); }