1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::{build_contracts::build_contract, opts::RunTestsCmd};
use std::{
    io,
    process::{Command, ExitStatus},
};
use util::get_target_dir;

const CONTRACTS: &[&str] = &["bios", "msig", "token", "wrap"];

fn eosio_contract_tests() -> io::Result<ExitStatus> {
    let target_dir = get_target_dir()?;
    let mut cmd = Command::new("docker");
    cmd.arg("run").arg("--rm");

    for name in CONTRACTS {
        let crate_name = format!("eosio_{}", name);
        let contract_name = format!("eosio.{}", name);
        build_contract(&crate_name);
        let volume = {
            let name = format!("{}_gc.wasm", crate_name);
            let path = target_dir.join(name);
            format!(
                "{}:/eosio.contracts/build/contracts/{}/{}.wasm:ro",
                path.to_string_lossy(),
                contract_name,
                contract_name
            )
        };
        cmd.arg("--volume").arg(volume);
    }

    cmd.arg("--entrypoint")
        .arg("/eosio.contracts/build/tests/unit_test")
        .arg("sagansoftware/eosio.contracts:1.9.0")
        .arg("--show_progress=yes");

    for name in CONTRACTS {
        cmd.arg(format!("--run_test=eosio_{}_tests", name));
    }

    // cmd.arg("--run_test=eosio_system_tests");

    cmd.status()
}

pub fn run_test(_opts: RunTestsCmd) {
    eosio_contract_tests().unwrap();
}