Skip to content

Commit

Permalink
Rollup merge of #72318 - tblah:remote-test-client-doc, r=nikomatsakis
Browse files Browse the repository at this point in the history
Add help text for remote-test-client

Add help text describing the usage of remote-test-client
  • Loading branch information
Dylan-DPC authored May 18, 2020
2 parents 0b63bc7 + 5b9941c commit 256ce18
Showing 1 changed file with 51 additions and 5 deletions.
56 changes: 51 additions & 5 deletions src/tools/remote-test-client/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use std::thread;
use std::time::Duration;

const REMOTE_ADDR_ENV: &str = "TEST_DEVICE_ADDR";
const DEFAULT_ADDR: &str = "127.0.0.1:12345";

macro_rules! t {
($e:expr) => {
Expand All @@ -30,8 +31,12 @@ macro_rules! t {

fn main() {
let mut args = env::args().skip(1);
let next = args.next();
if next.is_none() {
return help();
}

match &args.next().unwrap()[..] {
match &next.unwrap()[..] {
"spawn-emulator" => spawn_emulator(
&args.next().unwrap(),
Path::new(&args.next().unwrap()),
Expand All @@ -40,12 +45,16 @@ fn main() {
),
"push" => push(Path::new(&args.next().unwrap())),
"run" => run(args.next().unwrap(), args.collect()),
cmd => panic!("unknown command: {}", cmd),
"help" | "-h" | "--help" => help(),
cmd => {
println!("unknown command: {}", cmd);
help();
}
}
}

fn spawn_emulator(target: &str, server: &Path, tmpdir: &Path, rootfs: Option<PathBuf>) {
let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or("127.0.0.1:12345".to_string());
let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or(DEFAULT_ADDR.to_string());

if env::var(REMOTE_ADDR_ENV).is_ok() {
println!("Connecting to remote device {} ...", device_address);
Expand Down Expand Up @@ -172,7 +181,7 @@ fn start_qemu_emulator(target: &str, rootfs: &Path, server: &Path, tmpdir: &Path
}

fn push(path: &Path) {
let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or("127.0.0.1:12345".to_string());
let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or(DEFAULT_ADDR.to_string());
let client = t!(TcpStream::connect(device_address));
let mut client = BufWriter::new(client);
t!(client.write_all(b"push"));
Expand All @@ -189,7 +198,7 @@ fn push(path: &Path) {
}

fn run(files: String, args: Vec<String>) {
let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or("127.0.0.1:12345".to_string());
let device_address = env::var(REMOTE_ADDR_ENV).unwrap_or(DEFAULT_ADDR.to_string());
let client = t!(TcpStream::connect(device_address));
let mut client = BufWriter::new(client);
t!(client.write_all(b"run "));
Expand Down Expand Up @@ -284,3 +293,40 @@ fn send(path: &Path, dst: &mut dyn Write) {
t!(dst.write_all(&[(amt >> 24) as u8, (amt >> 16) as u8, (amt >> 8) as u8, (amt >> 0) as u8,]));
t!(io::copy(&mut file, dst));
}

fn help() {
println!(
"
Usage: {0} <command> [<args>]
Sub-commands:
spawn-emulator <target> <server> <tmpdir> [rootfs] See below
push <path> Copy <path> to emulator
run <files> [args...] Run program on emulator
help Display help message
Spawning an emulator:
For Android <target>s, adb will push the <server>, set up TCP forwarding and run
the <server>. Otherwise qemu emulates the target using a rootfs image created in
<tmpdir> and generated from <rootfs> plus the <server> executable.
If {1} is set in the environment, this step is skipped.
Pushing a path to a running emulator:
A running emulator or adb device is connected to at the IP address and port in
the {1} environment variable or {2} if this isn't
specified. The file at <path> is sent to this target.
Executing commands on a running emulator:
First the target emulator/adb session is connected to as for pushing files. Next
the colon separated list of <files> is pushed to the target. Finally, the first
file in <files> is executed in the emulator, preserving the current environment.
That command's status code is returned.
",
env::args().next().unwrap(),
REMOTE_ADDR_ENV,
DEFAULT_ADDR
);
}

0 comments on commit 256ce18

Please sign in to comment.