diff options
| author | Mátyás Mustoha <mmatyas@inf.u-szeged.hu> | 2017-04-11 12:10:05 +0200 |
|---|---|---|
| committer | Mátyás Mustoha <mmatyas@inf.u-szeged.hu> | 2017-05-04 12:43:22 +0200 |
| commit | b194def3a24e5d95c3f8eb7667b24e1237d823d3 (patch) | |
| tree | 6527039d85f7ac1246c5c1564b456cb7202b4c94 /src/tools | |
| parent | b16c7a235fa0f57fed6b7ec13ffd3cff1bcdd9ad (diff) | |
| download | rust-b194def3a24e5d95c3f8eb7667b24e1237d823d3.tar.gz rust-b194def3a24e5d95c3f8eb7667b24e1237d823d3.zip | |
Add remote device testing support
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/remote-test-client/src/main.rs | 16 | ||||
| -rw-r--r-- | src/tools/remote-test-server/src/main.rs | 55 |
2 files changed, 61 insertions, 10 deletions
diff --git a/src/tools/remote-test-client/src/main.rs b/src/tools/remote-test-client/src/main.rs index 265354ff800..1a41b2c0f39 100644 --- a/src/tools/remote-test-client/src/main.rs +++ b/src/tools/remote-test-client/src/main.rs @@ -25,6 +25,8 @@ use std::process::{Command, Stdio}; use std::thread; use std::time::Duration; +const REMOTE_ADDR_ENV: &'static str = "TEST_DEVICE_ADDR"; + macro_rules! t { ($e:expr) => (match $e { Ok(e) => e, @@ -56,7 +58,11 @@ fn spawn_emulator(target: &str, server: &Path, tmpdir: &Path, rootfs: Option<PathBuf>) { - if target.contains("android") { + let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or("127.0.0.1:12345".to_string()); + + if env::var(REMOTE_ADDR_ENV).is_ok() { + println!("Connecting to remote device {} ...", device_address); + } else if target.contains("android") { start_android_emulator(server); } else { let rootfs = rootfs.as_ref().expect("need rootfs on non-android"); @@ -66,7 +72,7 @@ fn spawn_emulator(target: &str, // Wait for the emulator to come online loop { let dur = Duration::from_millis(100); - if let Ok(mut client) = TcpStream::connect("127.0.0.1:12345") { + if let Ok(mut client) = TcpStream::connect(&device_address) { t!(client.set_read_timeout(Some(dur))); t!(client.set_write_timeout(Some(dur))); if client.write_all(b"ping").is_ok() { @@ -162,7 +168,8 @@ fn start_qemu_emulator(rootfs: &Path, server: &Path, tmpdir: &Path) { } fn push(path: &Path) { - let client = t!(TcpStream::connect("127.0.0.1:12345")); + let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or("127.0.0.1:12345".to_string()); + let client = t!(TcpStream::connect(device_address)); let mut client = BufWriter::new(client); t!(client.write_all(b"push")); send(path, &mut client); @@ -178,7 +185,8 @@ fn push(path: &Path) { } fn run(files: String, args: Vec<String>) { - let client = t!(TcpStream::connect("127.0.0.1:12345")); + let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or("127.0.0.1:12345".to_string()); + let client = t!(TcpStream::connect(device_address)); let mut client = BufWriter::new(client); t!(client.write_all(b"run ")); diff --git a/src/tools/remote-test-server/src/main.rs b/src/tools/remote-test-server/src/main.rs index 308ccdbef77..ae13acd58bb 100644 --- a/src/tools/remote-test-server/src/main.rs +++ b/src/tools/remote-test-server/src/main.rs @@ -8,10 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -/// This is a small server which is intended to run inside of an emulator. This -/// server pairs with the `remote-test-client` program in this repository. The -/// `remote-test-client` connects to this server over a TCP socket and performs -/// work such as: +/// This is a small server which is intended to run inside of an emulator or +/// on a remote test device. This server pairs with the `remote-test-client` +/// program in this repository. The `remote-test-client` connects to this +/// server over a TCP socket and performs work such as: /// /// 1. Pushing shared libraries to the server /// 2. Running tests through the server @@ -21,6 +21,7 @@ /// basically custom format suiting our needs. use std::cmp; +use std::env; use std::fs::{self, File, Permissions}; use std::io::prelude::*; use std::io::{self, BufReader}; @@ -42,12 +43,54 @@ macro_rules! t { static TEST: AtomicUsize = ATOMIC_USIZE_INIT; +struct Config { + pub remote: bool, + pub verbose: bool, +} + +impl Config { + pub fn default() -> Config { + Config { + remote: false, + verbose: false, + } + } + + pub fn parse_args() -> Config { + let mut config = Config::default(); + + let args = env::args().skip(1); + for argument in args { + match &argument[..] { + "remote" => { + config.remote = true; + }, + "verbose" | "-v" => { + config.verbose = true; + } + arg => panic!("unknown argument: {}", arg), + } + } + + config + } +} + fn main() { println!("starting test server"); + + let config = Config::parse_args(); + + let bind_addr = if cfg!(target_os = "android") || config.remote { + "0.0.0.0:12345" + } else { + "10.0.2.15:12345" + }; + let (listener, work) = if cfg!(target_os = "android") { - (t!(TcpListener::bind("0.0.0.0:12345")), "/data/tmp/work") + (t!(TcpListener::bind(bind_addr)), "/data/tmp/work") } else { - (t!(TcpListener::bind("10.0.2.15:12345")), "/tmp/work") + (t!(TcpListener::bind(bind_addr)), "/tmp/work") }; println!("listening!"); |
