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(())
}