use super::artifact::{read_release_artifact, resolve_release_artifact_path};
use super::config::{
attach_app_role_source, configured_bootstrap_roles_from_config,
configured_controllers_from_config, configured_deployable_roles_from_config,
configured_local_root_create_cycles_from_config, configured_pool_expectations_from_config,
configured_release_roles_from_config, configured_role_auto_create_from_config,
configured_role_details_from_config, configured_role_kinds_from_config,
configured_role_lifecycle_from_config, configured_role_metrics_profiles_from_config,
configured_role_topups_from_config, declare_app_role_source, rename_app_role_source,
};
use super::{
ArtifactRootError, app_sources_root, artifact_root_path, config_path, plan_attach_app_role,
plan_declare_app_role, plan_rename_app_role, resolve_artifact_root,
root_release_set_manifest_path,
};
use crate::test_support::temp_dir;
use canic_core::bootstrap::{compiled::ConfigModel, parse_config_model};
use flate2::{Compression, write::GzEncoder};
use std::{
fs,
io::Write,
path::{Path, PathBuf},
};
mod artifacts;
mod config;
mod mutations;
mod paths;
mod roles;
fn parsed_config(source: &str) -> ConfigModel {
parse_config_model(source).expect("valid test config")
}
const REAL_CONFIG: &str = r#"
controllers = []
[services.fleet]
roles = ["user_hub", "scale_hub"]
[app]
name = "demo"
init_mode = "enabled"
[roles.root]
kind = "root"
package = "root"
[roles.app]
kind = "canister"
package = "app"
[roles.user_hub]
kind = "canister"
package = "user_hub"
[roles.user_shard]
kind = "canister"
package = "user_shard"
[roles.project_instance]
kind = "canister"
package = "project_instance"
[roles.scale_hub]
kind = "canister"
package = "scale_hub"
[roles.scale_replica]
kind = "canister"
package = "scale"
[roles.role_baseline]
kind = "canister"
package = "role_baseline"
[app.whitelist]
[auth.delegated_tokens]
enabled = false
[standards]
icrc21 = true
[subnets.default.canisters.root]
kind = "root"
[subnets.default.canisters.user_hub]
kind = "service"
[subnets.default.canisters.scale_hub]
kind = "service"
"#;
const MULTI_ROOT_CONFIG: &str = r#"
controllers = []
[services.fleet]
roles = []
[app]
name = "demo"
init_mode = "enabled"
[roles.root]
kind = "root"
package = "root"
[app.whitelist]
[subnets.default.canisters.root]
kind = "root"
[subnets.secondary.canisters.root]
kind = "root"
"#;
const NO_ROOT_CONFIG: &str = r#"
controllers = []
[services.fleet]
roles = []
[app]
name = "demo"
init_mode = "enabled"
[roles.user_hub]
kind = "canister"
package = "user_hub"
[app.whitelist]
[subnets.default.canisters.user_hub]
kind = "service"
"#;
struct TempWorkspace {
path: PathBuf,
}
impl TempWorkspace {
fn new() -> Self {
let path = temp_dir("canic-host-release-set-tests");
fs::create_dir_all(&path).expect("create temp workspace");
Self { path }
}
fn path(&self) -> &Path {
&self.path
}
}
impl Drop for TempWorkspace {
fn drop(&mut self) {
let _ = fs::remove_dir_all(&self.path);
}
}