Skip to content
22 changes: 22 additions & 0 deletions rs/tests/driver/src/util/delegations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,39 @@ struct CaptchaConfig {
pub captcha_trigger: CaptchaTrigger,
}

#[derive(CandidType, Serialize)]
pub struct DummyAuthConfig {
pub prompt_for_index: bool,
}

#[derive(CandidType, Serialize)]
struct InternetIdentityInit {
pub captcha_config: Option<CaptchaConfig>,
pub dummy_auth: Option<Option<DummyAuthConfig>>,
}

pub fn build_dummy_internet_identity_backend_install_arg() -> Vec<u8> {
build_ii_backend_install_arg_inner(true)
}

pub fn build_internet_identity_backend_install_arg() -> Vec<u8> {
build_ii_backend_install_arg_inner(false)
}

fn build_ii_backend_install_arg_inner(dummy_auth: bool) -> Vec<u8> {
let dummy_auth = if dummy_auth {
Some(Some(DummyAuthConfig {
prompt_for_index: true,
}))
} else {
None
};
candid::encode_one(&InternetIdentityInit {
captcha_config: Some(CaptchaConfig {
max_unsolved_captchas: 50,
captcha_trigger: CaptchaTrigger::Static(StaticCaptchaTrigger::CaptchaDisabled),
}),
dummy_auth,
})
.unwrap()
}
Expand Down
71 changes: 67 additions & 4 deletions rs/tests/nns/nns_dapp/nns_dapp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ use ic_system_test_driver::driver::{
};
use ic_system_test_driver::nns::set_authorized_subnetwork_list;
use ic_system_test_driver::sns_client::add_subnet_to_sns_deploy_whitelist;
use ic_system_test_driver::util::delegations::build_internet_identity_backend_install_arg;
use ic_system_test_driver::util::delegations::{
DummyAuthConfig, build_dummy_internet_identity_backend_install_arg,
build_internet_identity_backend_install_arg,
};
use ic_system_test_driver::util::{block_on, create_canister, install_canister, runtime_from_url};
use icp_ledger::AccountIdentifier;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -117,23 +120,54 @@ struct InternetIdentityFrontendInitArgs {
related_origins: Option<Vec<String>>,
fetch_root_key: Option<bool>,
dev_csp: Option<bool>,
dummy_auth: Option<Option<DummyAuthConfig>>,
}

pub fn install_ii_canisters(
env: &TestEnv,
node: &IcNodeSnapshot,
ic_gateway_domain: &str,
) -> (Principal, Principal) {
install_ii_canisters_inner(env, node, ic_gateway_domain, false)
}

pub fn install_dummy_ii_canisters(
env: &TestEnv,
node: &IcNodeSnapshot,
ic_gateway_domain: &str,
) -> (Principal, Principal) {
install_ii_canisters_inner(env, node, ic_gateway_domain, true)
}

fn install_ii_canisters(
fn install_ii_canisters_inner(
env: &TestEnv,
node: &IcNodeSnapshot,
ic_gateway_domain: &str,
dummy_auth: bool,
) -> (Principal, Principal) {
let backend_install_arg = if dummy_auth {
build_dummy_internet_identity_backend_install_arg()
} else {
build_internet_identity_backend_install_arg()
};
let backend_canister_id = node.create_and_install_canister_with_arg(
&env::var("II_BACKEND_WASM_PATH").expect("II_BACKEND_WASM_PATH not set"),
Some(build_internet_identity_backend_install_arg()),
Some(backend_install_arg),
);

// Create the II frontend canister first to get its canister ID
let agent = node.build_default_agent();
let frontend_canister_id =
block_on(async { create_canister(&agent, node.effective_canister_id()).await });

let dummy_auth_config = if dummy_auth {
Some(Some(DummyAuthConfig {
prompt_for_index: true,
}))
} else {
None
};

// Install code into the II frontend canister.
let frontend_wasm =
load_wasm(env::var("II_FRONTEND_WASM_PATH").expect("II_FRONTEND_WASM_PATH not set"));
Expand All @@ -145,6 +179,7 @@ fn install_ii_canisters(
)]),
fetch_root_key: Some(true),
dev_csp: Some(true),
dummy_auth: dummy_auth_config,
})
.unwrap();
let logger = env.logger();
Expand Down Expand Up @@ -176,13 +211,41 @@ pub fn install_ii_nns_dapp_and_subnet_rental(
env: &TestEnv,
ic_gateway_url: &Url,
sns_aggregator_canister_id: Option<Principal>,
) -> (Principal, Principal) {
install_ii_nns_dapp_and_subnet_rental_impl(
env,
ic_gateway_url,
sns_aggregator_canister_id,
false,
)
}

pub fn install_ii_nns_dapp_and_subnet_rental_with_dummy_auth(
env: &TestEnv,
ic_gateway_url: &Url,
sns_aggregator_canister_id: Option<Principal>,
) -> (Principal, Principal) {
install_ii_nns_dapp_and_subnet_rental_impl(
env,
ic_gateway_url,
sns_aggregator_canister_id,
true,
)
}

fn install_ii_nns_dapp_and_subnet_rental_impl(
env: &TestEnv,
ic_gateway_url: &Url,
sns_aggregator_canister_id: Option<Principal>,
dummy_auth: bool,
) -> (Principal, Principal) {
let ic_gateway_domain = ic_gateway_url.domain().unwrap().to_string();

// deploy the II canister
let topology = env.topology_snapshot();
let nns_node = topology.root_subnet().nodes().next().unwrap();
let (_, ii_canister_id) = install_ii_canisters(env, &nns_node, &ic_gateway_domain);
let (_, ii_canister_id) =
install_ii_canisters_inner(env, &nns_node, &ic_gateway_domain, dummy_auth);

// create the NNS dapp canister so that its canister ID is allocated
// and the Subnet Rental Canister gets its mainnet canister ID in the next step
Expand Down
Loading
Loading