fn main()

in yaml_test_runner/src/main.rs [55:154]


fn main() -> Result<(), failure::Error> {
    simple_logger::SimpleLogger::new()
        .with_level(LevelFilter::Info)
        .init()
        .unwrap();

    let matches = App::new(env!("CARGO_PKG_NAME"))
        .about(env!("CARGO_PKG_DESCRIPTION"))
        .arg(Arg::with_name("url")
            .short("u")
            .long("url")
            .value_name("OPENSEARCH_URL")
            .help("The url of a running OpenSearch cluster. Used to determine the version, test suite and branch to use to compile tests")
            .required(true)
            .takes_value(true))
        .get_matches();

    let url = matches.value_of("url").expect("missing 'url' argument");
    let (branch, suite, version) = match branch_suite_and_version_from_opensearch(url) {
        Ok(v) => v,
        Err(e) => {
            error!(
                "Problem getting values from OpenSearch at {}. {:?}",
                url, e
            );
            exit(1);
        }
    };

    info!("Using version {}", &version.to_string());
    info!("Using branch {}", &branch);
    info!("Using test_suite {:?}", &suite);

    let rest_specs_dir = PathBuf::from("./api_generator/rest_specs");

    if !rest_specs_dir.exists()
        || rest_specs_dir
            .read_dir()
            .map(|mut e| e.next().is_none())
            .unwrap_or_else(|_| true)
    {
        error!(
            "No rest specs found at {}. Run api_generator project to download rest specs",
            rest_specs_dir.to_str().unwrap()
        );
        exit(1);
    }

    let last_downloaded_rest_spec_branch = {
        let mut p = rest_specs_dir.clone();
        p.push("last_downloaded_version");
        p
    };

    if !last_downloaded_rest_spec_branch.exists() {
        error!(
            "No last downloaded rest version found at {}.",
            last_downloaded_rest_spec_branch.to_str().unwrap()
        );
        exit(1);
    }
    let rest_spec_version = fs::read_to_string(last_downloaded_rest_spec_branch)?;
    info!("Using rest specs from {}", &rest_spec_version);

    let download_dir = PathBuf::from(format!("./{}/yaml", env!("CARGO_PKG_NAME")));
    let generated_dir = PathBuf::from(format!("./{}/tests", env!("CARGO_PKG_NAME")));

    github::download_test_suites(&branch, &download_dir)?;

    let api = api_generator::generator::read_api(&branch, &rest_specs_dir)?;

    // delete everything under the generated_dir except common dir
    if generated_dir.exists() {
        let entries = fs::read_dir(&generated_dir)?;
        for entry in entries {
            if let Ok(e) = entry {
                if let Ok(f) = e.file_type() {
                    if e.file_name() != "common" {
                        if f.is_dir() {
                            fs::remove_dir_all(e.path())?;
                        } else if f.is_file() {
                            fs::remove_file(e.path())?;
                        }
                    }
                }
            }
        }
    }

    generator::generate_tests_from_yaml(
        &api,
        &suite,
        &version,
        &download_dir,
        &download_dir,
        &generated_dir,
    )?;

    Ok(())
}