fn main()

in yaml_test_runner/src/main.rs [43:124]


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

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

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

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

    let stack_version = std::env::var("STACK_VERSION").expect("Missing STACK_VERSION env var");

    if version != stack_version {
        bail!(
            "ES server version {} is inconsistent with STACK_VERSION={}",
            version,
            stack_version
        );
    }

    let rest_specs_dir = PathBuf::from(format!("./checkout/{}/rest-api-spec/api", stack_version));
    if !rest_specs_dir.is_dir() {
        bail!("No specs found at {:?}", rest_specs_dir);
    }

    let download_dir = PathBuf::from(format!("./checkout/{}/rest-api-spec/test", stack_version));
    let generated_dir = PathBuf::from(format!("./{}/tests", env!("CARGO_PKG_NAME")));

    let api = api_generator::generator::read_api(&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.flatten() {
            if let Ok(f) = entry.file_type() {
                if entry.file_name() != "common" {
                    if f.is_dir() {
                        fs::remove_dir_all(entry.path())?;
                    } else if f.is_file() {
                        fs::remove_file(entry.path())?;
                    }
                }
            }
        }
    }

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

    Ok(())
}