Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions crates/icp-canister-interfaces/src/internet_identity.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
use candid::Principal;

pub const INTERNET_IDENTITY_CID: &str = "rdmx6-jaaaa-aaaaa-aaadq-cai";
pub const INTERNET_IDENTITY_PRINCIPAL: Principal =
Principal::from_slice(&[0, 0, 0, 0, 0, 0, 0, 7, 1, 1]);

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn internet_identity_cid_and_principal_match() {
assert_eq!(INTERNET_IDENTITY_CID, INTERNET_IDENTITY_PRINCIPAL.to_text());
}
}
2 changes: 2 additions & 0 deletions crates/icp-canister-interfaces/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ pub mod cycles_ledger;
pub mod cycles_minting_canister;
pub mod governance;
pub mod icp_ledger;
pub mod internet_identity;
pub mod nns_root;
pub mod registry;
14 changes: 14 additions & 0 deletions crates/icp-canister-interfaces/src/nns_root.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
use candid::Principal;

pub const NNS_ROOT_CID: &str = "r7inp-6aaaa-aaaaa-aaabq-cai";
pub const NNS_ROOT_PRINCIPAL: Principal = Principal::from_slice(&[0, 0, 0, 0, 0, 0, 0, 3, 1, 1]);

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn nns_root_cid_and_principal_match() {
assert_eq!(NNS_ROOT_CID, NNS_ROOT_PRINCIPAL.to_text());
}
}
66 changes: 66 additions & 0 deletions crates/icp-cli/tests/network_tests.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
use icp_canister_interfaces::{
cycles_ledger::CYCLES_LEDGER_PRINCIPAL,
cycles_minting_canister::CYCLES_MINTING_CANISTER_PRINCIPAL, icp_ledger::ICP_LEDGER_PRINCIPAL,
internet_identity::INTERNET_IDENTITY_PRINCIPAL, nns_root::NNS_ROOT_PRINCIPAL,
registry::REGISTRY_PRINCIPAL,
};
use indoc::{formatdoc, indoc};
use predicates::{
ord::eq,
Expand Down Expand Up @@ -286,3 +292,63 @@ fn network_seeds_preexisting_identities_icp_and_cycles_balances() {
.stdout(contains("Balance: 0 TCYCLES"))
.success();
}

#[tokio::test]
async fn network_starts_with_canisters_preset() {
let ctx = TestContext::new();

// Setup project
let project_dir = ctx.create_project_dir("icp");

// Project manifest
write_string(
&project_dir.join("icp.yaml"), // path
&formatdoc! {r#"
{NETWORK_RANDOM_PORT}
{ENVIRONMENT_RANDOM_PORT}
"#}, // contents
)
.expect("failed to write project manifest");

// Start network
let _guard = ctx.start_network_in(&project_dir, "my-network");
ctx.ping_until_healthy(&project_dir, "my-network");

let pocket_ic = ctx.pocketic();
let controller = Some(NNS_ROOT_PRINCIPAL);

// ICP ledger
let icp_ledger_status = pocket_ic
.canister_status(ICP_LEDGER_PRINCIPAL, controller)
.await
.unwrap();
assert!(icp_ledger_status.module_hash.is_some());

// Cycles ledger
let cycles_ledger_status = pocket_ic
.canister_status(CYCLES_LEDGER_PRINCIPAL, controller)
.await
.unwrap();
assert!(cycles_ledger_status.module_hash.is_some());

// Cycles minting
let cycles_minting_status = pocket_ic
.canister_status(CYCLES_MINTING_CANISTER_PRINCIPAL, controller)
.await
.unwrap();
assert!(cycles_minting_status.module_hash.is_some());

// Registry
let registry_status = pocket_ic
.canister_status(REGISTRY_PRINCIPAL, controller)
.await
.unwrap();
assert!(registry_status.module_hash.is_some());

// Internet identity
let internet_identity_status = pocket_ic
.canister_status(INTERNET_IDENTITY_PRINCIPAL, controller)
.await
.unwrap();
assert!(internet_identity_status.module_hash.is_some());
}