use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::fs::File;
use std::io::prelude::*;
use std::process::Command;
mod common;
#[test]
fn set_value() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = common::create_project("set-value")?;
let folder = root_dir.path();
common::create_service(folder, "hello-world")?;
let mut cmd = Command::cargo_bin("orcs")?;
cmd.env("ORCS_SERVICE", "hello-world")
.env("ORCS_STAGE", "my_stage")
.arg("-p")
.arg(&folder)
.arg("set")
.arg("my_param")
.arg("my-param-value");
cmd.assert().success();
let mut file = File::open(&folder.join(".store").join("store.json"))?;
let mut data = String::new();
file.read_to_string(&mut data)?;
assert!(predicate::str::contains("{\"hello-world:my_param\":\"my-param-value\"}").eval(&data));
Ok(())
}
#[test]
fn set_file() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = common::create_project("set-value")?;
let folder = root_dir.path();
common::create_service(folder, "hello-world")?;
let param_filename = &folder.join("test.txt");
let mut param_file = File::create(¶m_filename)?;
let param_data = "Hello, world!";
param_file.write_all(param_data.as_bytes())?;
let mut cmd = Command::cargo_bin("orcs")?;
cmd.env("ORCS_SERVICE", "hello-world")
.env("ORCS_STAGE", "my_stage")
.arg("-p")
.arg(&folder)
.arg("set-file")
.arg("my_param")
.arg(¶m_filename);
cmd.assert().success();
let mut file = File::open(&folder.join(".store").join("hello-world:my_param.store"))?;
let mut data = String::new();
file.read_to_string(&mut data)?;
assert_eq!(data, param_data);
Ok(())
}
#[test]
fn set_get_value() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = common::create_project("set-value")?;
let folder = root_dir.path();
common::create_service(folder, "service-a")?;
common::create_service(folder, "service-b")?;
let mut cfg_file = File::create(folder.join("orcs.toml"))?;
let cfg_data = "[stages.my_stage]";
cfg_file.write_all(cfg_data.as_bytes())?;
let mut cfg_file = File::create(folder.join("srv").join("service-b").join("orcs.toml"))?;
let cfg_data = "stages.my_stage.depends_on = [\"service-a\"]";
cfg_file.write_all(cfg_data.as_bytes())?;
let mut cmd = Command::cargo_bin("orcs")?;
cmd.env("ORCS_SERVICE", "service-a")
.env("ORCS_STAGE", "my_stage")
.arg("-p")
.arg(&folder)
.arg("set")
.arg("my_param")
.arg("my-param-value");
cmd.assert().success();
let mut cmd = Command::cargo_bin("orcs")?;
cmd.env("ORCS_SERVICE", "service-b")
.env("ORCS_STAGE", "my_stage")
.arg("-p")
.arg(&folder)
.arg("get")
.arg("service-a:my_param");
cmd.assert()
.success()
.stdout(predicate::str::contains("my-param-value"));
Ok(())
}
#[test]
fn set_get_file() -> Result<(), Box<dyn std::error::Error>> {
let root_dir = common::create_project("set-value")?;
let folder = root_dir.path();
common::create_service(folder, "service-a")?;
common::create_service(folder, "service-b")?;
let mut cfg_file = File::create(folder.join("orcs.toml"))?;
let cfg_data = "[stages.my_stage]";
cfg_file.write_all(cfg_data.as_bytes())?;
let mut cfg_file = File::create(folder.join("srv").join("service-b").join("orcs.toml"))?;
let cfg_data = "stages.my_stage.depends_on = [\"service-a\"]";
cfg_file.write_all(cfg_data.as_bytes())?;
let param_filename = &folder.join("test.txt");
let mut param_file = File::create(¶m_filename)?;
let param_data = "Hello, world!";
param_file.write_all(param_data.as_bytes())?;
let mut cmd = Command::cargo_bin("orcs")?;
cmd.env("ORCS_SERVICE", "service-a")
.env("ORCS_STAGE", "my_stage")
.arg("-p")
.arg(&folder)
.arg("set-file")
.arg("my_param")
.arg(¶m_filename);
cmd.assert().success();
let param2_filename = &folder.join("test2.txt");
let mut cmd = Command::cargo_bin("orcs")?;
cmd.env("ORCS_SERVICE", "service-b")
.env("ORCS_STAGE", "my_stage")
.arg("-p")
.arg(&folder)
.arg("get-file")
.arg("service-a:my_param")
.arg(¶m2_filename);
cmd.assert().success();
let mut param2_file = File::open(param2_filename)?;
let mut param2_data = String::new();
param2_file.read_to_string(&mut param2_data)?;
assert_eq!(param_data, param2_data);
Ok(())
}