From 71f572edfeb6f4390027c065efe02c8a486b6809 Mon Sep 17 00:00:00 2001 From: Frederik Rothenberger Date: Thu, 22 Aug 2024 16:10:47 +0200 Subject: [PATCH] Migrate integration tests to PocketIC (#2557) Migrates all II integration tests to PocketIC. Since the API for obtaining the current timestamp changed, I took the opportunity to make better use of the `time` helper in `framework`. --- .github/workflows/canister-tests.yml | 31 +- .gitignore | 1 + Cargo.lock | 910 ++++++++++++++-- Cargo.toml | 2 +- demos/vc_issuer/Cargo.lock | 982 ++++++++++++++++-- demos/vc_issuer/Cargo.toml | 3 +- demos/vc_issuer/tests/issue_credential.rs | 90 +- src/archive/Cargo.toml | 2 +- src/archive/tests/tests.rs | 27 +- src/canister_tests/Cargo.toml | 3 +- src/canister_tests/src/api.rs | 4 +- src/canister_tests/src/api/archive.rs | 16 +- .../src/api/internet_identity.rs | 106 +- .../src/api/internet_identity/api_v2.rs | 54 +- .../src/api/internet_identity/vc_mvp.rs | 8 +- src/canister_tests/src/flows.rs | 8 +- src/canister_tests/src/framework.rs | 107 +- src/internet_identity/Cargo.toml | 2 +- src/internet_identity/stable_memory/README.md | 4 +- .../integration/activity_stats/all_domains.rs | 2 +- .../activity_stats/authn_methods.rs | 2 +- .../integration/activity_stats/ii_domains.rs | 2 +- .../tests/integration/aggregation_stats.rs | 8 +- .../anchor_management/device_management.rs | 4 +- .../anchor_management/last_usage_timestamp.rs | 2 +- .../anchor_management/registration/mod.rs | 4 +- .../registration/temp_keys.rs | 4 +- .../remote_device_registration.rs | 13 +- .../tests/integration/archive_integration.rs | 38 +- .../tests/integration/delegation.rs | 68 +- .../tests/integration/http.rs | 19 +- .../tests/integration/rollback.rs | 2 +- .../tests/integration/stable_memory.rs | 14 +- .../tests/integration/upgrade.rs | 4 +- .../integration/v2_api/authn_method_add.rs | 4 +- .../v2_api/authn_method_metadata.rs | 4 +- .../v2_api/authn_method_registration.rs | 15 +- .../integration/v2_api/authn_method_remove.rs | 4 +- .../v2_api/authn_method_replace.rs | 4 +- .../v2_api/authn_method_security_settings.rs | 4 +- .../v2_api/authn_method_test_helpers.rs | 6 +- .../integration/v2_api/identity_authn_info.rs | 2 +- .../tests/integration/v2_api/identity_info.rs | 2 +- .../integration/v2_api/identity_metadata.rs | 2 +- .../integration/v2_api/identity_register.rs | 2 +- .../tests/integration/vc_mvp.rs | 32 +- 46 files changed, 2120 insertions(+), 507 deletions(-) diff --git a/.github/workflows/canister-tests.yml b/.github/workflows/canister-tests.yml index c20555a08a..9c9cb24002 100644 --- a/.github/workflows/canister-tests.yml +++ b/.github/workflows/canister-tests.yml @@ -246,16 +246,11 @@ jobs: name: internet_identity_test.wasm.gz path: . - run: mv internet_identity_test.wasm.gz internet_identity.wasm.gz - - name: Download ic-test-state-machine binary + - name: Install PocketIC run: | - uname_sys=$(uname -s | tr '[:upper:]' '[:lower:]') - echo "uname_sys: $uname_sys" - commit_sha=$(sed <.ic-commit 's/#.*$//' | sed '/^$/d') - echo "commit sha: $commit_sha" - curl -sLO "https://download.dfinity.systems/ic/$commit_sha/binaries/x86_64-$uname_sys/ic-test-state-machine.gz" - gzip -d ic-test-state-machine.gz - chmod a+x ic-test-state-machine - ./ic-test-state-machine --version + curl -sL -o pocket-ic.gz https://github.com/dfinity/pocketic/releases/download/5.0.0/pocket-ic-x86_64-linux.gz + gzip -d pocket-ic.gz + chmod +x pocket-ic - name: "Run VC issuer canister tests" working-directory: demos/vc_issuer run: | @@ -344,7 +339,7 @@ jobs: needs: [canister-tests-build, cached-build, docker-build-archive] strategy: matrix: - os: [ ubuntu-latest, macos-latest ] + os: [ ubuntu-latest , macos-latest ] partition: ['1/3', '2/3', '3/3'] steps: - uses: actions/checkout@v4 @@ -359,16 +354,11 @@ jobs: with: name: canister-tests-${{ matrix.os }}.tar.zst path: . - - name: Download ic-test-state-machine binary + - name: Install PocketIC run: | - uname_sys=$(uname -s | tr '[:upper:]' '[:lower:]') - echo "uname_sys: $uname_sys" - commit_sha=$(sed <.ic-commit 's/#.*$//' | sed '/^$/d') - echo "commit sha: $commit_sha" - curl -sLO "https://download.dfinity.systems/ic/$commit_sha/binaries/x86_64-$uname_sys/ic-test-state-machine.gz" - gzip -d ic-test-state-machine.gz - chmod a+x ic-test-state-machine - ./ic-test-state-machine --version + curl -sL -o pocket-ic.gz https://github.com/dfinity/pocketic/releases/download/5.0.0/pocket-ic-x86_64-${{ matrix.os == 'macos-latest' && 'darwin' || 'linux' }}.gz + gzip -d pocket-ic.gz + chmod +x pocket-ic - name: 'Download II wasm' uses: actions/download-artifact@v4 @@ -382,6 +372,9 @@ jobs: name: archive.wasm.gz path: . + - name: Run PocketIc + run: ./pocket-ic --port-file pocket-ic-port & + - name: Run Tests run: | mv internet_identity_test.wasm.gz internet_identity.wasm.gz diff --git a/.gitignore b/.gitignore index 4bc8b19bbb..d16f7961a9 100644 --- a/.gitignore +++ b/.gitignore @@ -27,5 +27,6 @@ test-failures/ *.wasm *.wasm.gz ic-test-state-machine +pocket-ic *.tsbuildinfo diff --git a/Cargo.lock b/Cargo.lock index 21321cedc6..a0fccc7d0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,8 +93,8 @@ dependencies = [ "ic-cdk-timers", "ic-metrics-encoder", "ic-stable-structures 0.6.4", - "ic-test-state-machine-client", "internet_identity_interface", + "pocket-ic", "regex", "serde", "serde_bytes", @@ -162,6 +162,12 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" @@ -224,6 +230,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" version = "1.6.0" @@ -514,15 +526,16 @@ dependencies = [ "hex", "ic-cdk", "ic-representation-independent-hash", - "ic-test-state-machine-client", "identity_jose", "internet_identity_interface", "lazy_static", + "pocket-ic", "regex", "serde", "serde_bytes", "serde_cbor", "sha2 0.10.8", + "url", "vc_util", ] @@ -607,33 +620,6 @@ dependencies = [ "windows-targets 0.52.5", ] -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half 2.4.1", -] - [[package]] name = "clap" version = "3.2.25" @@ -746,6 +732,16 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -770,6 +766,21 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -1045,6 +1056,12 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "ecdsa" version = "0.16.9" @@ -1395,20 +1412,29 @@ dependencies = [ ] [[package]] -name = "half" -version = "1.8.3" +name = "h2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] [[package]] name = "half" -version = "2.4.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] name = "hashbrown" @@ -1506,12 +1532,111 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http 1.1.0", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper", + "hyper-util", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -2033,7 +2158,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ddb96501529c2380e087fa9f4552fd0d416f5784bb1e48142d746e9b3d6ae13" dependencies = [ "candid", - "http", + "http 0.2.12", "ic-certification 2.5.0", "ic-representation-independent-hash", "serde", @@ -2101,7 +2226,7 @@ dependencies = [ "candid", "flate2", "hex", - "http", + "http 0.2.12", "ic-cbor", "ic-certificate-verification", "ic-certification 2.5.0", @@ -2145,18 +2270,6 @@ dependencies = [ "wsl", ] -[[package]] -name = "ic-test-state-machine-client" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e05a81e0cbdf178228d72ace06c60ac7fa99927b49a238f9ccf5ef82eaced6" -dependencies = [ - "candid", - "ciborium", - "serde", - "serde_bytes", -] - [[package]] name = "ic-types" version = "0.9.0" @@ -2441,12 +2554,12 @@ dependencies = [ "ic-metrics-encoder", "ic-response-verification", "ic-stable-structures 0.6.4", - "ic-test-state-machine-client", "identity_jose", "include_dir", "internet_identity_interface", "lazy_static", "lodepng", + "pocket-ic", "rand", "rand_chacha", "rand_core 0.6.4", @@ -2482,6 +2595,12 @@ dependencies = [ "sha2 0.10.8", ] +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + [[package]] name = "is-terminal" version = "0.4.12" @@ -2604,7 +2723,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata", + "regex-automata 0.4.6", ] [[package]] @@ -2613,7 +2732,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -2711,6 +2830,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.2" @@ -2726,6 +2854,22 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2744,13 +2888,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2798,6 +2943,16 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-bigint" version = "0.4.5" @@ -2862,16 +3017,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - [[package]] name = "object" version = "0.32.2" @@ -2893,12 +3038,24 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + [[package]] name = "os_str_bytes" version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "p256" version = "0.13.2" @@ -3017,6 +3174,26 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "pin-project-lite" version = "0.2.14" @@ -3063,6 +3240,28 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "pocket-ic" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "629f46b7ab8a8d2fee02220ef8e99ae552c7e220117efa1ce0882ff09c8fb038" +dependencies = [ + "base64 0.13.1", + "candid", + "hex", + "ic-cdk", + "reqwest", + "schemars", + "serde", + "serde_bytes", + "serde_json", + "sha2 0.10.8", + "tokio", + "tracing", + "tracing-appender", + "tracing-subscriber", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -3176,6 +3375,54 @@ dependencies = [ "cc", ] +[[package]] +name = "quinn" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash", + "rustls", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -3258,10 +3505,19 @@ checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-automata", + "regex-automata 0.4.6", "regex-syntax 0.8.3", ] +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + [[package]] name = "regex-automata" version = "0.4.6" @@ -3286,23 +3542,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "rgb" -version = "0.8.37" +name = "reqwest" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ - "bytemuck", -] + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-socks", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "rgb" +version = "0.8.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted", + "windows-sys 0.52.0", +] [[package]] name = "rsa" @@ -3331,6 +3651,66 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.17" @@ -3352,6 +3732,39 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.66", +] + [[package]] name = "scoped_threadpool" version = "0.1.9" @@ -3378,6 +3791,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.5.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.23" @@ -3421,7 +3857,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" dependencies = [ - "half 1.8.3", + "half", "serde", ] @@ -3436,6 +3872,17 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "serde_json" version = "1.0.117" @@ -3470,6 +3917,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_with" version = "1.14.0" @@ -3526,6 +3985,15 @@ dependencies = [ "keccak", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "sig_verifier_js" version = "1.0.0" @@ -3633,6 +4101,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.7.3" @@ -3731,6 +4205,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + [[package]] name = "tap" version = "1.0.1" @@ -3789,6 +4269,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "time" version = "0.3.36" @@ -3846,34 +4336,69 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", "syn 2.0.66", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-socks" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" +dependencies = [ + "either", + "futures-util", + "thiserror", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.5.11" @@ -3883,6 +4408,119 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + [[package]] name = "tree-deserializer" version = "0.9.0" @@ -3893,6 +4531,12 @@ dependencies = [ "serde", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typed-arena" version = "2.0.2" @@ -3905,6 +4549,15 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -3944,6 +4597,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.0" @@ -3968,6 +4627,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vc_util" version = "0.1.0" @@ -4014,6 +4679,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -4051,6 +4725,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -4080,6 +4766,38 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -4259,6 +4977,16 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wsl" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index e7891f79b2..b1e81e9a47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,9 +38,9 @@ ic-metrics-encoder = "1" ic-representation-independent-hash = "2.2" ic-response-verification = "2.2" ic-stable-structures = "0.6" -ic-test-state-machine-client = "3" ic-crypto-standalone-sig-verifier = { git = "https://github.com/dfinity/ic", rev = "e69bcc7b319cbb3ebc22ec55af35287741244db6" } ic-types = { git = "https://github.com/dfinity/ic", rev = "e69bcc7b319cbb3ebc22ec55af35287741244db6" } +pocket-ic = "4.0" # other dependencies assert_matches = "1.5.0" diff --git a/demos/vc_issuer/Cargo.lock b/demos/vc_issuer/Cargo.lock index e11d20eefd..6c260e2fef 100644 --- a/demos/vc_issuer/Cargo.lock +++ b/demos/vc_issuer/Cargo.lock @@ -142,6 +142,12 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" @@ -204,6 +210,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" version = "1.6.0" @@ -486,15 +498,16 @@ dependencies = [ "hex", "ic-cdk", "ic-representation-independent-hash", - "ic-test-state-machine-client", "identity_jose", "internet_identity_interface", "lazy_static", + "pocket-ic", "regex", "serde", "serde_bytes", "serde_cbor", "sha2 0.10.8", + "url", "vc_util", ] @@ -566,33 +579,6 @@ dependencies = [ "windows-targets 0.52.5", ] -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half 2.4.1", -] - [[package]] name = "clap" version = "3.2.25" @@ -699,6 +685,16 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -723,6 +719,21 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + [[package]] name = "crunchy" version = "0.2.2" @@ -998,6 +1009,12 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "ecdsa" version = "0.16.9" @@ -1158,6 +1175,68 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1241,20 +1320,29 @@ dependencies = [ ] [[package]] -name = "half" -version = "1.8.3" +name = "h2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] [[package]] name = "half" -version = "2.4.1" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] name = "hashbrown" @@ -1298,6 +1386,9 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] [[package]] name = "hkdf" @@ -1328,12 +1419,111 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http 1.1.0", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper", + "hyper-util", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -1841,7 +2031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ddb96501529c2380e087fa9f4552fd0d416f5784bb1e48142d746e9b3d6ae13" dependencies = [ "candid", - "http", + "http 0.2.12", "ic-certification 2.5.0", "ic-representation-independent-hash", "serde", @@ -1903,7 +2093,7 @@ dependencies = [ "candid", "flate2", "hex", - "http", + "http 0.2.12", "ic-cbor", "ic-certificate-verification", "ic-certification 2.5.0", @@ -1947,18 +2137,6 @@ dependencies = [ "wsl", ] -[[package]] -name = "ic-test-state-machine-client" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e05a81e0cbdf178228d72ace06c60ac7fa99927b49a238f9ccf5ef82eaced6" -dependencies = [ - "candid", - "ciborium", - "serde", - "serde_bytes", -] - [[package]] name = "ic-types" version = "0.9.0" @@ -2232,6 +2410,12 @@ dependencies = [ "sha2 0.10.8", ] +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + [[package]] name = "is-terminal" version = "0.4.12" @@ -2354,7 +2538,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata", + "regex-automata 0.4.6", ] [[package]] @@ -2363,7 +2547,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -2448,6 +2632,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "memchr" version = "2.7.2" @@ -2463,6 +2656,22 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2480,13 +2689,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2534,6 +2744,16 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-bigint" version = "0.4.5" @@ -2598,16 +2818,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - [[package]] name = "object" version = "0.32.2" @@ -2629,12 +2839,24 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + [[package]] name = "os_str_bytes" version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "p256" version = "0.13.2" @@ -2753,12 +2975,38 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "pin-project-lite" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkcs1" version = "0.7.5" @@ -2780,6 +3028,28 @@ dependencies = [ "spki", ] +[[package]] +name = "pocket-ic" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "629f46b7ab8a8d2fee02220ef8e99ae552c7e220117efa1ce0882ff09c8fb038" +dependencies = [ + "base64 0.13.1", + "candid", + "hex", + "ic-cdk", + "reqwest", + "schemars", + "serde", + "serde_bytes", + "serde_json", + "sha2 0.10.8", + "tokio", + "tracing", + "tracing-appender", + "tracing-subscriber", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2894,29 +3164,77 @@ dependencies = [ ] [[package]] -name = "quote" -version = "1.0.36" +name = "quinn" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" dependencies = [ - "proc-macro2", + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "radium" -version = "0.7.0" +name = "quinn-proto" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash", + "rustls", + "slab", + "thiserror", + "tinyvec", + "tracing", +] [[package]] -name = "rand" -version = "0.8.5" +name = "quinn-udp" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" dependencies = [ "libc", - "rand_chacha", - "rand_core 0.6.4", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", ] [[package]] @@ -2975,10 +3293,19 @@ checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", - "regex-automata", + "regex-automata 0.4.6", "regex-syntax 0.8.3", ] +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + [[package]] name = "regex-automata" version = "0.4.6" @@ -3002,6 +3329,55 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "mime_guess", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-socks", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "winreg", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -3012,6 +3388,21 @@ dependencies = [ "subtle", ] +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rsa" version = "0.9.6" @@ -3039,6 +3430,66 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.17" @@ -3060,6 +3511,39 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.66", +] + [[package]] name = "scoped_threadpool" version = "0.1.9" @@ -3086,6 +3570,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "security-framework" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +dependencies = [ + "bitflags 2.5.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.23" @@ -3129,7 +3636,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" dependencies = [ - "half 1.8.3", + "half", "serde", ] @@ -3144,6 +3651,17 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "serde_json" version = "1.0.117" @@ -3178,6 +3696,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_with" version = "1.14.0" @@ -3234,6 +3764,15 @@ dependencies = [ "keccak", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -3271,6 +3810,15 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "slog" version = "2.7.0" @@ -3302,6 +3850,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.7.3" @@ -3406,6 +3960,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + [[package]] name = "tap" version = "1.0.1" @@ -3464,6 +4024,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "time" version = "0.3.36" @@ -3521,34 +4091,69 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", "syn 2.0.66", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-socks" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" +dependencies = [ + "either", + "futures-util", + "thiserror", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.5.11" @@ -3558,6 +4163,119 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + [[package]] name = "tree-deserializer" version = "0.9.0" @@ -3568,6 +4286,12 @@ dependencies = [ "serde", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typed-arena" version = "2.0.2" @@ -3580,6 +4304,15 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -3619,6 +4352,12 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.0" @@ -3643,6 +4382,12 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vc_issuer" version = "0.1.0" @@ -3660,10 +4405,10 @@ dependencies = [ "ic-http-certification", "ic-response-verification", "ic-stable-structures 0.6.4", - "ic-test-state-machine-client", "include_dir", "internet_identity_interface", "lazy_static", + "pocket-ic", "serde", "serde_bytes", "serde_cbor", @@ -3708,6 +4453,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -3745,6 +4499,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -3774,6 +4540,38 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3953,6 +4751,16 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "wsl" version = "0.1.0" diff --git a/demos/vc_issuer/Cargo.toml b/demos/vc_issuer/Cargo.toml index c5dc67a73b..4cfb4be04e 100644 --- a/demos/vc_issuer/Cargo.toml +++ b/demos/vc_issuer/Cargo.toml @@ -30,10 +30,11 @@ strfmt = "0.2" lazy_static = "1.4" include_dir = "0.7" + [dev-dependencies] assert_matches = "1.5.0" candid_parser = "0.1" ic-http-certification = "2.2" -ic-test-state-machine-client = "3" +pocket-ic = "4.0" ic-response-verification = "2.2" canister_tests = { path = "../../src/canister_tests" } diff --git a/demos/vc_issuer/tests/issue_credential.rs b/demos/vc_issuer/tests/issue_credential.rs index bd4f31bd4a..0095b68770 100644 --- a/demos/vc_issuer/tests/issue_credential.rs +++ b/demos/vc_issuer/tests/issue_credential.rs @@ -10,18 +10,18 @@ use canister_tests::framework::{env, get_wasm_path, principal_1, test_principal, use ic_cdk::api::management_canister::provisional::CanisterId; use ic_response_verification::types::VerificationInfo; use ic_response_verification::verify_request_response_pair; -use ic_test_state_machine_client::{call_candid, call_candid_as}; -use ic_test_state_machine_client::{query_candid_as, CallError, StateMachine}; use internet_identity_interface::http_gateway::{HttpRequest, HttpResponse}; use internet_identity_interface::internet_identity::types::vc_mvp::{ GetIdAliasRequest, PrepareIdAliasRequest, }; use internet_identity_interface::internet_identity::types::FrontendHostname; use lazy_static::lazy_static; +use pocket_ic::{call_candid, call_candid_as}; +use pocket_ic::{query_candid_as, CallError, PocketIc}; use serde_bytes::ByteBuf; use std::collections::HashMap; use std::path::PathBuf; -use std::time::{Duration, UNIX_EPOCH}; +use std::time::Duration; use vc_util::issuer_api::{ ArgumentValue, CredentialSpec, DerivationOriginData, DerivationOriginError, DerivationOriginRequest, GetCredentialRequest, Icrc21ConsentInfo, Icrc21ConsentPreferences, @@ -72,17 +72,17 @@ lazy_static! { } pub fn install_canister_as( - env: &StateMachine, + env: &PocketIc, wasm: Vec, controller: Option, ) -> CanisterId { - let canister_id = env.create_canister(controller); + let canister_id = env.create_canister_with_settings(controller, None); let arg = candid::encode_one("()").expect("error encoding II installation arg as candid"); env.install_canister(canister_id, wasm, arg, controller); canister_id } -pub fn install_canister(env: &StateMachine, wasm: Vec) -> CanisterId { +pub fn install_canister(env: &PocketIc, wasm: Vec) -> CanisterId { install_canister_as(env, wasm, None) } @@ -98,8 +98,8 @@ pub struct IssuerInit { frontend_hostname: String, } -pub fn install_issuer(env: &StateMachine, init: &IssuerInit) -> CanisterId { - let canister_id = env.create_canister(None); +pub fn install_issuer(env: &PocketIc, init: &IssuerInit) -> CanisterId { + let canister_id = env.create_canister(); let arg = candid::encode_one(Some(init)).expect("error encoding II installation arg as candid"); env.install_canister(canister_id, VC_ISSUER_WASM.clone(), arg, None); canister_id @@ -107,17 +107,24 @@ pub fn install_issuer(env: &StateMachine, init: &IssuerInit) -> CanisterId { mod api { use super::*; + use pocket_ic::common::rest::RawEffectivePrincipal; pub fn configure( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, config: &IssuerInit, ) -> Result<(), CallError> { - call_candid(env, canister_id, "configure", (config,)) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "configure", + (config,), + ) } pub fn vc_consent_message( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, consent_message_request: &Icrc21VcConsentMessageRequest, @@ -125,6 +132,7 @@ mod api { call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "vc_consent_message", (consent_message_request,), @@ -133,13 +141,14 @@ mod api { } pub fn derivation_origin( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, derivation_origin_req: &DerivationOriginRequest, ) -> Result, CallError> { call_candid( env, canister_id, + RawEffectivePrincipal::None, "derivation_origin", (derivation_origin_req,), ) @@ -147,7 +156,7 @@ mod api { } pub fn set_derivation_origin( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, frontend_hostname: &str, derivation_origin: &str, @@ -155,50 +164,73 @@ mod api { call_candid( env, canister_id, + RawEffectivePrincipal::None, "set_derivation_origin", (frontend_hostname, derivation_origin), ) } pub fn set_alternative_origins( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, alternative_origins: &str, ) -> Result<(), CallError> { call_candid( env, canister_id, + RawEffectivePrincipal::None, "set_alternative_origins", (alternative_origins,), ) } pub fn add_employee( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, employee_id: Principal, ) -> Result { - call_candid(env, canister_id, "add_employee", (employee_id,)).map(|(x,)| x) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "add_employee", + (employee_id,), + ) + .map(|(x,)| x) } pub fn add_graduate( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, graduate_id: Principal, ) -> Result { - call_candid(env, canister_id, "add_graduate", (graduate_id,)).map(|(x,)| x) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "add_graduate", + (graduate_id,), + ) + .map(|(x,)| x) } pub fn add_adult( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, adult_id: Principal, ) -> Result { - call_candid(env, canister_id, "add_adult", (adult_id,)).map(|(x,)| x) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "add_adult", + (adult_id,), + ) + .map(|(x,)| x) } pub fn prepare_credential( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, prepare_credential_request: &PrepareCredentialRequest, @@ -206,6 +238,7 @@ mod api { call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "prepare_credential", (prepare_credential_request,), @@ -214,7 +247,7 @@ mod api { } pub fn get_credential( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, get_credential_request: &GetCredentialRequest, @@ -652,10 +685,11 @@ fn should_prepare_degree_credential_for_authorized_principal() { fn should_issue_credential_e2e() -> Result<(), CallError> { let env = env(); let ii_id = install_canister(&env, II_WASM.clone()); + let root_key = env.root_key().unwrap(); let issuer_id = install_issuer( &env, &IssuerInit { - ic_root_key_der: Some(env.root_key().to_vec()), + ic_root_key_der: Some(root_key.to_vec()), idp_canister_ids: vec![ii_id], derivation_origin: DUMMY_DERIVATION_ORIGIN.to_string(), frontend_hostname: DUMMY_FRONTEND_HOSTNAME.to_string(), @@ -690,7 +724,7 @@ fn should_issue_credential_e2e() -> Result<(), CallError> { .expect("get id_alias failed"); let root_pk_raw = - extract_raw_root_pk_from_der(&env.root_key()).expect("Failed decoding IC root key."); + extract_raw_root_pk_from_der(&root_key).expect("Failed decoding IC root key."); let alias_tuple = get_verified_id_alias_from_jws( &id_alias_credentials .issuer_id_alias_credential @@ -698,7 +732,7 @@ fn should_issue_credential_e2e() -> Result<(), CallError> { &id_alias_credentials.issuer_id_alias_credential.id_dapp, &canister_sig_pk.canister_id, &root_pk_raw, - env.time().duration_since(UNIX_EPOCH).unwrap().as_nanos(), + time(&env) as u128, ) .expect("Invalid ID alias"); @@ -746,7 +780,7 @@ fn should_issue_credential_e2e() -> Result<(), CallError> { &get_credential_response.unwrap().vc_jws, &issuer_id, &root_pk_raw, - env.time().duration_since(UNIX_EPOCH).unwrap().as_nanos(), + time(&env) as u128, ) .expect("credential verification failed"); let vc_claims = claims @@ -798,7 +832,7 @@ fn should_set_alternative_origins() { #[test] fn issuer_canister_serves_http_assets() -> Result<(), CallError> { fn verify_response_certification( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, request: HttpRequest, http_response: HttpResponse, @@ -820,7 +854,7 @@ fn issuer_canister_serves_http_assets() -> Result<(), CallError> { canister_id.as_slice(), time(env) as u128, Duration::from_secs(300).as_nanos(), - &env.root_key(), + &env.root_key().unwrap(), min_certification_version as u8, ) .unwrap_or_else(|e| panic!("validation failed: {e}")) diff --git a/src/archive/Cargo.toml b/src/archive/Cargo.toml index e52f89dd6c..78ec6b271a 100644 --- a/src/archive/Cargo.toml +++ b/src/archive/Cargo.toml @@ -24,5 +24,5 @@ serde_bytes.workspace = true candid_parser.workspace = true canister_tests.workspace = true hex.workspace = true -ic-test-state-machine-client.workspace = true +pocket-ic.workspace = true regex.workspace = true diff --git a/src/archive/tests/tests.rs b/src/archive/tests/tests.rs index 8259cbf1db..bad0784777 100644 --- a/src/archive/tests/tests.rs +++ b/src/archive/tests/tests.rs @@ -1,12 +1,12 @@ use canister_tests::api::archive as api; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::archive::types::*; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; -use std::time::{Duration, SystemTime}; +use std::time::Duration; /// Verifies that the canister can be installed successfully. #[test] @@ -469,7 +469,7 @@ mod read_tests { error_buffer_limit: 1, }) .unwrap(); - let canister_id = env.create_canister(None); + let canister_id = env.create_canister(); env.install_canister(canister_id, ARCHIVE_WASM.clone(), config, None); // 257 entries because we need the index to not fit in a single byte @@ -536,11 +536,8 @@ mod metrics_tests { for metric in metrics { let (_, metric_timestamp) = parse_metric(&metrics_body, metric); assert_eq!( - env.time() - .duration_since(metric_timestamp) - .unwrap() - .as_secs(), - 0, + metric_timestamp, + Duration::from_nanos(time(&env)).as_millis() as u64, "metric timestamp did not match state machine time" ) } @@ -556,24 +553,16 @@ mod metrics_tests { assert_metric( &get_metrics(&env, canister_id), "ii_archive_last_upgrade_timestamp_seconds", - env.time() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_secs_f64(), + Duration::from_nanos(time(&env)).as_secs() as f64, ); - println!("{}", get_metrics(&env, canister_id)); env.advance_time(Duration::from_secs(300)); upgrade_archive_canister(&env, canister_id, ARCHIVE_WASM.clone()); - println!("{}", get_metrics(&env, canister_id)); assert_metric( &get_metrics(&env, canister_id), "ii_archive_last_upgrade_timestamp_seconds", - env.time() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_secs_f64(), + Duration::from_nanos(time(&env)).as_secs() as f64, ); Ok(()) } diff --git a/src/canister_tests/Cargo.toml b/src/canister_tests/Cargo.toml index 501d77b80e..6a17342d8d 100644 --- a/src/canister_tests/Cargo.toml +++ b/src/canister_tests/Cargo.toml @@ -7,7 +7,6 @@ edition = "2021" base64.workspace = true flate2 = "1.0" hex.workspace = true -ic-test-state-machine-client.workspace = true lazy_static.workspace = true regex.workspace = true serde.workspace = true @@ -23,3 +22,5 @@ identity_jose = { git = "https://github.com/dfinity/identity.rs.git", rev = "aa candid.workspace = true ic-cdk.workspace = true ic-representation-independent-hash.workspace = true +pocket-ic.workspace = true +url = "2.5.0" diff --git a/src/canister_tests/src/api.rs b/src/canister_tests/src/api.rs index cd442285a5..3637337c94 100644 --- a/src/canister_tests/src/api.rs +++ b/src/canister_tests/src/api.rs @@ -1,6 +1,6 @@ use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{query_candid, CallError, StateMachine}; use internet_identity_interface::http_gateway::{HttpRequest, HttpResponse}; +use pocket_ic::{query_candid, CallError, PocketIc}; pub mod archive; pub mod internet_identity; @@ -8,7 +8,7 @@ pub mod internet_identity; // api methods common to all canisters pub fn http_request( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, http_request: &HttpRequest, ) -> Result { diff --git a/src/canister_tests/src/api/archive.rs b/src/canister_tests/src/api/archive.rs index 1cfa2d2fea..c372fe2ef2 100644 --- a/src/canister_tests/src/api/archive.rs +++ b/src/canister_tests/src/api/archive.rs @@ -1,13 +1,12 @@ use candid::Principal; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{ - call_candid, call_candid_as, query_candid, CallError, StateMachine, -}; use internet_identity_interface::archive::types::*; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::common::rest::RawEffectivePrincipal; +use pocket_ic::{call_candid, call_candid_as, query_candid, CallError, PocketIc}; pub fn add_entry( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor: AnchorNumber, @@ -17,6 +16,7 @@ pub fn add_entry( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "write_entry", (anchor, timestamp, entry), @@ -24,7 +24,7 @@ pub fn add_entry( } pub fn get_entries( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, idx: Option, limit: Option, @@ -33,7 +33,7 @@ pub fn get_entries( } pub fn get_anchor_entries( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, anchor: AnchorNumber, cursor: Option, @@ -48,8 +48,8 @@ pub fn get_anchor_entries( .map(|(x,)| x) } -pub fn status(env: &StateMachine, canister_id: CanisterId) -> Result { - call_candid(env, canister_id, "status", ()).map(|(x,)| x) +pub fn status(env: &PocketIc, canister_id: CanisterId) -> Result { + call_candid(env, canister_id, RawEffectivePrincipal::None, "status", ()).map(|(x,)| x) } /// A "compatibility" module for the previous version of the archive to handle API changes. diff --git a/src/canister_tests/src/api/internet_identity.rs b/src/canister_tests/src/api/internet_identity.rs index 2b52a9db48..f9795f40cf 100644 --- a/src/canister_tests/src/api/internet_identity.rs +++ b/src/canister_tests/src/api/internet_identity.rs @@ -1,10 +1,9 @@ use candid::Principal; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{ - call_candid, call_candid_as, query_candid, query_candid_as, CallError, StateMachine, -}; use internet_identity_interface::archive::types::BufferedEntry; use internet_identity_interface::internet_identity::types; +use pocket_ic::common::rest::RawEffectivePrincipal; +use pocket_ic::{call_candid, call_candid_as, query_candid, query_candid_as, CallError, PocketIc}; /// The experimental v2 API pub mod api_v2; @@ -15,22 +14,36 @@ pub mod vc_mvp; /** The functions here are derived (manually) from Internet Identity's Candid file */ /// A fake "health check" method that just checks the canister is alive a well. -pub fn health_check(env: &StateMachine, canister_id: CanisterId) { +pub fn health_check(env: &PocketIc, canister_id: CanisterId) { let user_number: types::AnchorNumber = 0; // XXX: we use "IDLValue" because we're just checking that the canister is sending // valid data, but we don't care about the actual data. - let _: () = call_candid(env, canister_id, "lookup", (user_number,)).unwrap(); + let _: () = call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "lookup", + (user_number,), + ) + .unwrap(); } pub fn create_challenge( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, ) -> Result { - call_candid(env, canister_id, "create_challenge", ()).map(|(x,)| x) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "create_challenge", + (), + ) + .map(|(x,)| x) } pub fn register( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, device_data: &types::DeviceData, @@ -40,6 +53,7 @@ pub fn register( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "register", (device_data, challenge_attempt, temp_key), @@ -48,7 +62,7 @@ pub fn register( } pub fn prepare_delegation( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -59,6 +73,7 @@ pub fn prepare_delegation( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "prepare_delegation", ( @@ -70,12 +85,18 @@ pub fn prepare_delegation( ) } -pub fn init_salt(env: &StateMachine, canister_id: CanisterId) -> Result<(), CallError> { - call_candid(env, canister_id, "init_salt", ()) +pub fn init_salt(env: &PocketIc, canister_id: CanisterId) -> Result<(), CallError> { + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "init_salt", + (), + ) } pub fn get_delegation( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -94,7 +115,7 @@ pub fn get_delegation( } pub fn get_principal( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -111,7 +132,7 @@ pub fn get_principal( } pub fn lookup( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, anchor_number: types::AnchorNumber, ) -> Result, CallError> { @@ -119,7 +140,7 @@ pub fn lookup( } pub fn get_anchor_credentials( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, anchor_number: types::AnchorNumber, ) -> Result { @@ -127,7 +148,7 @@ pub fn get_anchor_credentials( } pub fn add( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -136,6 +157,7 @@ pub fn add( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "add", (anchor_number, device_data), @@ -143,7 +165,7 @@ pub fn add( } pub fn update( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -153,6 +175,7 @@ pub fn update( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "update", (anchor_number, device_key, device_data), @@ -160,7 +183,7 @@ pub fn update( } pub fn replace( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -170,6 +193,7 @@ pub fn replace( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "replace", (anchor_number, device_key, device_data), @@ -177,7 +201,7 @@ pub fn replace( } pub fn remove( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -186,6 +210,7 @@ pub fn remove( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "remove", (anchor_number, device_key), @@ -193,7 +218,7 @@ pub fn remove( } pub fn get_anchor_info( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -201,6 +226,7 @@ pub fn get_anchor_info( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "get_anchor_info", (anchor_number,), @@ -209,7 +235,7 @@ pub fn get_anchor_info( } pub fn enter_device_registration_mode( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -217,6 +243,7 @@ pub fn enter_device_registration_mode( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "enter_device_registration_mode", (anchor_number,), @@ -225,7 +252,7 @@ pub fn enter_device_registration_mode( } pub fn exit_device_registration_mode( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -233,6 +260,7 @@ pub fn exit_device_registration_mode( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "exit_device_registration_mode", (anchor_number,), @@ -240,7 +268,7 @@ pub fn exit_device_registration_mode( } pub fn add_tentative_device( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, anchor_number: types::AnchorNumber, device_data: &types::DeviceData, @@ -248,6 +276,7 @@ pub fn add_tentative_device( call_candid( env, canister_id, + RawEffectivePrincipal::None, "add_tentative_device", (anchor_number, device_data), ) @@ -255,7 +284,7 @@ pub fn add_tentative_device( } pub fn verify_tentative_device( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, anchor_number: types::AnchorNumber, @@ -264,6 +293,7 @@ pub fn verify_tentative_device( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "verify_tentative_device", (anchor_number, verification_code), @@ -272,30 +302,45 @@ pub fn verify_tentative_device( } pub fn deploy_archive( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, wasm: &Vec, ) -> Result { - call_candid(env, canister_id, "deploy_archive", (wasm,)).map(|(x,)| x) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "deploy_archive", + (wasm,), + ) + .map(|(x,)| x) } pub fn stats( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, ) -> Result { query_candid(env, canister_id, "stats", ()).map(|(x,)| x) } pub fn fetch_entries( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, ) -> Result, CallError> { - call_candid_as(env, canister_id, sender, "fetch_entries", ()).map(|(x,)| x) + call_candid_as( + env, + canister_id, + RawEffectivePrincipal::None, + sender, + "fetch_entries", + (), + ) + .map(|(x,)| x) } pub fn acknowledge_entries( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, sequence_number: u64, @@ -303,6 +348,7 @@ pub fn acknowledge_entries( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "acknowledge_entries", (sequence_number,), diff --git a/src/canister_tests/src/api/internet_identity/api_v2.rs b/src/canister_tests/src/api/internet_identity/api_v2.rs index 0921100431..344ad7f59c 100644 --- a/src/canister_tests/src/api/internet_identity/api_v2.rs +++ b/src/canister_tests/src/api/internet_identity/api_v2.rs @@ -1,20 +1,26 @@ use candid::Principal; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{ - call_candid, call_candid_as, query_candid, CallError, StateMachine, -}; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::common::rest::RawEffectivePrincipal; +use pocket_ic::{call_candid, call_candid_as, query_candid, CallError, PocketIc}; use std::collections::HashMap; pub fn captcha_create( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, ) -> Result, CallError> { - call_candid(env, canister_id, "captcha_create", ()).map(|(x,)| x) + call_candid( + env, + canister_id, + RawEffectivePrincipal::None, + "captcha_create", + (), + ) + .map(|(x,)| x) } pub fn identity_register( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, authn_method: &AuthnMethodData, @@ -24,6 +30,7 @@ pub fn identity_register( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "identity_register", (authn_method, challenge_attempt, temp_key), @@ -32,7 +39,7 @@ pub fn identity_register( } pub fn identity_authn_info( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, identity_number: IdentityNumber, ) -> Result, CallError> { @@ -40,7 +47,7 @@ pub fn identity_authn_info( } pub fn identity_info( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -48,6 +55,7 @@ pub fn identity_info( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "identity_info", (identity_number,), @@ -56,7 +64,7 @@ pub fn identity_info( } pub fn identity_metadata_replace( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -65,6 +73,7 @@ pub fn identity_metadata_replace( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "identity_metadata_replace", (identity_number, metadata), @@ -73,7 +82,7 @@ pub fn identity_metadata_replace( } pub fn authn_method_add( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -82,6 +91,7 @@ pub fn authn_method_add( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_add", (identity_number, authn_method), @@ -90,7 +100,7 @@ pub fn authn_method_add( } pub fn authn_method_replace( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -100,6 +110,7 @@ pub fn authn_method_replace( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_replace", (identity_number, public_key, authn_method), @@ -108,7 +119,7 @@ pub fn authn_method_replace( } pub fn authn_method_metadata_replace( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -118,6 +129,7 @@ pub fn authn_method_metadata_replace( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_metadata_replace", (identity_number, public_key, metadata), @@ -126,7 +138,7 @@ pub fn authn_method_metadata_replace( } pub fn authn_method_security_settings_replace( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -136,6 +148,7 @@ pub fn authn_method_security_settings_replace( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_security_settings_replace", (identity_number, public_key, security_settings), @@ -144,7 +157,7 @@ pub fn authn_method_security_settings_replace( } pub fn authn_method_remove( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -153,6 +166,7 @@ pub fn authn_method_remove( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_remove", (identity_number, public_key), @@ -161,7 +175,7 @@ pub fn authn_method_remove( } pub fn authn_method_registration_mode_enter( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -169,6 +183,7 @@ pub fn authn_method_registration_mode_enter( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_registration_mode_enter", (identity_number,), @@ -177,7 +192,7 @@ pub fn authn_method_registration_mode_enter( } pub fn authn_method_registration_mode_exit( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -185,6 +200,7 @@ pub fn authn_method_registration_mode_exit( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_registration_mode_exit", (identity_number,), @@ -193,7 +209,7 @@ pub fn authn_method_registration_mode_exit( } pub fn authn_method_register( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, identity_number: IdentityNumber, authn_method: &AuthnMethodData, @@ -201,6 +217,7 @@ pub fn authn_method_register( call_candid( env, canister_id, + RawEffectivePrincipal::None, "authn_method_register", (identity_number, authn_method), ) @@ -208,7 +225,7 @@ pub fn authn_method_register( } pub fn authn_method_confirm( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, identity_number: IdentityNumber, @@ -217,6 +234,7 @@ pub fn authn_method_confirm( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "authn_method_confirm", (identity_number, confirmation_code), diff --git a/src/canister_tests/src/api/internet_identity/vc_mvp.rs b/src/canister_tests/src/api/internet_identity/vc_mvp.rs index bcf30d825b..9cb01c50dd 100644 --- a/src/canister_tests/src/api/internet_identity/vc_mvp.rs +++ b/src/canister_tests/src/api/internet_identity/vc_mvp.rs @@ -1,13 +1,14 @@ use candid::Principal; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{call_candid_as, query_candid_as, CallError, StateMachine}; use internet_identity_interface::internet_identity::types::vc_mvp::{ GetIdAliasError, GetIdAliasRequest, IdAliasCredentials, PrepareIdAliasError, PrepareIdAliasRequest, PreparedIdAlias, }; +use pocket_ic::common::rest::RawEffectivePrincipal; +use pocket_ic::{call_candid_as, query_candid_as, CallError, PocketIc}; pub fn prepare_id_alias( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, prepare_id_alias_req: PrepareIdAliasRequest, @@ -15,6 +16,7 @@ pub fn prepare_id_alias( call_candid_as( env, canister_id, + RawEffectivePrincipal::None, sender, "prepare_id_alias", (prepare_id_alias_req,), @@ -23,7 +25,7 @@ pub fn prepare_id_alias( } pub fn get_id_alias( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, get_id_alias_req: GetIdAliasRequest, diff --git a/src/canister_tests/src/flows.rs b/src/canister_tests/src/flows.rs index b0247d9acc..28f4490e2b 100644 --- a/src/canister_tests/src/flows.rs +++ b/src/canister_tests/src/flows.rs @@ -2,15 +2,15 @@ use crate::api::internet_identity::{create_challenge, register}; use crate::framework::{device_data_1, principal_1}; use candid::Principal; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::StateMachine; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::PocketIc; -pub fn register_anchor(env: &StateMachine, canister_id: CanisterId) -> AnchorNumber { +pub fn register_anchor(env: &PocketIc, canister_id: CanisterId) -> AnchorNumber { register_anchor_with(env, canister_id, principal_1(), &device_data_1()) } pub fn register_anchor_with_device( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, device: &DeviceData, ) -> AnchorNumber { @@ -18,7 +18,7 @@ pub fn register_anchor_with_device( } pub fn register_anchor_with( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, sender: Principal, device_data: &DeviceData, diff --git a/src/canister_tests/src/framework.rs b/src/canister_tests/src/framework.rs index 3d44bcf293..b8f6918182 100644 --- a/src/canister_tests/src/framework.rs +++ b/src/canister_tests/src/framework.rs @@ -1,17 +1,17 @@ use crate::api; use crate::api::http_request; use candid::Principal; -use flate2::read::GzDecoder; use flate2::{Compression, GzBuilder}; use ic_cdk::api::management_canister::main::CanisterId; use ic_representation_independent_hash::Value; -use ic_test_state_machine_client::{CallError, ErrorCode, StateMachine}; use identity_jose::jws::Decoder; use internet_identity_interface::archive::types::*; use internet_identity_interface::http_gateway::{HeaderField, HttpRequest}; use internet_identity_interface::internet_identity::types::vc_mvp::SignedIdAlias; use internet_identity_interface::internet_identity::types::*; use lazy_static::lazy_static; +use pocket_ic::common::rest::{BlobCompression, ExtendedSubnetConfigSet, SubnetSpec}; +use pocket_ic::{CallError, ErrorCode, PocketIc}; use regex::Regex; use serde_bytes::ByteBuf; use sha2::Digest; @@ -21,9 +21,8 @@ use std::env; use std::fs::File; use std::io::{Read, Write}; use std::path; -use std::path::Path; use std::time::{Duration, SystemTime}; - +use url::Url; /* The first few lines deal with actually getting the Wasm module(s) to test */ lazy_static! { @@ -135,45 +134,48 @@ pub fn get_wasm_path(env_var: String, default_path: &path::PathBuf) -> Option StateMachine { - let path = match env::var_os("STATE_MACHINE_BINARY") { - None => STATE_MACHINE_BINARY.to_string(), - Some(path) => path - .clone() - .into_string() - .unwrap_or_else(|_| panic!("Invalid string path for {path:?}")), +pub fn env() -> PocketIc { + const POCKET_IC: &str = "../../pocket-ic"; + let config = ExtendedSubnetConfigSet { + ii: Some(SubnetSpec::default()), + nns: Some(SubnetSpec::default()), + ..ExtendedSubnetConfigSet::default() }; - if !Path::new(&path).exists() { - println!(" - Could not find state machine binary to run canister integration tests. - - I looked for it at {:?}. You can specify another path with the environment variable STATE_MACHINE_BINARY (note that I run from {:?}). - - Run the following command to get the binary: - curl -sLO https://download.dfinity.systems/ic/$commit/binaries/$platform/ic-test-state-machine.gz - gzip -d ic-test-state-machine.gz - chmod +x ic-test-state-machine - where $commit can be read from `.ic-commit` and $platform is 'x86_64-linux' for Linux and 'x86_64-darwin' for Intel/rosetta-enabled Darwin. - ", &path, &env::current_dir().map(|x| x.display().to_string()).unwrap_or_else(|_| "an unknown directory".to_string())); + // If there is a file named pocket-ic-port, the test will reuse that pocket IC instance. + // This is necessary because we use nextest in CI which does not work with PocketIC being started + // by the tests themselves. + let port_file = path::PathBuf::from("..").join("..").join("pocket-ic-port"); + if port_file.exists() { + let port = std::fs::read_to_string(port_file).expect("failed to read port file"); + return PocketIc::from_config_and_server_url( + config, + Url::try_from(format!("http://127.0.0.1:{port}").as_str()).expect("Invalid URL"), + ); } - StateMachine::new(&path, false) + let pocket_ic_path = path::PathBuf::from(POCKET_IC); + if !pocket_ic_path.exists() { + panic!(" + Could not find PocketIC binary to run canister integration tests. It is expected to be here: {:?} + Please download the appropriate binary from https://github.com/dfinity/pocketic/releases/latest", + &pocket_ic_path); + } + env::set_var("POCKET_IC_BIN", POCKET_IC); + PocketIc::from_config(config) } -pub fn install_ii_canister(env: &StateMachine, wasm: Vec) -> CanisterId { +pub fn install_ii_canister(env: &PocketIc, wasm: Vec) -> CanisterId { install_ii_canister_with_arg(env, wasm, None) } pub fn install_ii_canister_with_arg( - env: &StateMachine, + env: &PocketIc, wasm: Vec, arg: Option, ) -> CanisterId { let byts = candid::encode_one(arg).expect("error encoding II installation arg as candid"); - let canister_id = env.create_canister(None); + let canister_id = env.create_canister(); env.install_canister(canister_id, wasm, byts, None); canister_id } @@ -213,12 +215,12 @@ pub fn archive_wasm_hash(wasm: &Vec) -> [u8; 32] { hasher.finalize().into() } -pub fn upgrade_ii_canister(env: &StateMachine, canister_id: CanisterId, wasm: Vec) { +pub fn upgrade_ii_canister(env: &PocketIc, canister_id: CanisterId, wasm: Vec) { upgrade_ii_canister_with_arg(env, canister_id, wasm, None).unwrap() } pub fn upgrade_ii_canister_with_arg( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, wasm: Vec, arg: Option, @@ -229,7 +231,7 @@ pub fn upgrade_ii_canister_with_arg( /// Utility function to create compressed stable memory backups for use in backup tests. pub fn save_compressed_stable_memory( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, path: &str, decompressed_name: &str, @@ -239,21 +241,19 @@ pub fn save_compressed_stable_memory( .filename(decompressed_name) .write(file, Compression::best()); encoder - .write_all(env.stable_memory(canister_id).as_slice()) + .write_all(env.get_stable_memory(canister_id).as_slice()) .unwrap(); encoder.flush().unwrap(); let mut file = encoder.finish().unwrap(); file.flush().unwrap(); } -pub fn restore_compressed_stable_memory(env: &StateMachine, canister_id: CanisterId, path: &str) { - let file = File::open(path).expect("Failed to open stable memory file"); - let mut decoder = GzDecoder::new(file); +pub fn restore_compressed_stable_memory(env: &PocketIc, canister_id: CanisterId, path: &str) { + let mut file = File::open(path).expect("Failed to open stable memory file"); let mut buffer = vec![]; - decoder - .read_to_end(&mut buffer) - .expect("error while decoding stable memory file"); - env.set_stable_memory(canister_id, ByteBuf::from(buffer)); + file.read_to_end(&mut buffer) + .expect("Failed to read stable memory file"); + env.set_stable_memory(canister_id, buffer, BlobCompression::Gzip); } pub const PUBKEY_1: &str = "test"; @@ -353,7 +353,7 @@ pub fn expect_user_error_with_message( Ok(_) => panic!("expected error, got {result:?}"), Err(CallError::Reject(_)) => panic!("expected user error, got {result:?}"), Err(CallError::UserError(ref user_error)) => { - if !(user_error.code == error_code) { + if user_error.code != error_code { panic!( "expected error code {:?}, got {:?}", error_code, user_error.code @@ -451,7 +451,7 @@ upgrade-insecure-requests;$", ); } -pub fn get_metrics(env: &StateMachine, canister_id: CanisterId) -> String { +pub fn get_metrics(env: &PocketIc, canister_id: CanisterId) -> String { let response = http_request( env, canister_id, @@ -467,7 +467,7 @@ pub fn get_metrics(env: &StateMachine, canister_id: CanisterId) -> String { String::from_utf8_lossy(&response.body).to_string() } -pub fn parse_metric(body: &str, metric: &str) -> (f64, SystemTime) { +pub fn parse_metric(body: &str, metric: &str) -> (f64, u64) { let metric = metric.replace('{', "\\{").replace('}', "\\}"); let metric_capture = Regex::new(&format!("(?m)^{metric} (\\d+) (\\d+)$")) .unwrap() @@ -475,8 +475,7 @@ pub fn parse_metric(body: &str, metric: &str) -> (f64, SystemTime) { .unwrap_or_else(|| panic!("metric {metric} not found")); let metric: f64 = metric_capture.get(1).unwrap().as_str().parse().unwrap(); - let metric_timestamp = SystemTime::UNIX_EPOCH - + Duration::from_millis(metric_capture.get(2).unwrap().as_str().parse().unwrap()); + let metric_timestamp = metric_capture.get(2).unwrap().as_str().parse().unwrap(); (metric, metric_timestamp) } @@ -504,7 +503,7 @@ pub fn assert_labelled_metric( } pub fn assert_devices_equal( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, anchor: AnchorNumber, mut expected_devices: Vec, @@ -529,15 +528,15 @@ pub fn assert_device_last_used( assert_eq!(device.last_usage, Some(expected_timestamp)); } -pub fn time(env: &StateMachine) -> u64 { - env.time() +pub fn time(env: &PocketIc) -> u64 { + env.get_time() .duration_since(SystemTime::UNIX_EPOCH) .unwrap() .as_nanos() as u64 } pub fn verify_delegation( - env: &StateMachine, + env: &PocketIc, user_key: UserKey, signed_delegation: &SignedDelegation, root_key: &[u8], @@ -574,7 +573,7 @@ pub fn verify_delegation( } pub fn verify_id_alias_credential_via_env( - env: &StateMachine, + env: &PocketIc, canister_sig_pk_der: CanisterSigPublicKeyDer, signed_id_alias: &SignedIdAlias, root_key: &[u8], @@ -599,20 +598,20 @@ pub fn verify_id_alias_credential_via_env( .expect("id_alias signature invalid"); } -pub fn deploy_archive_via_ii(env: &StateMachine, ii_canister: CanisterId) -> CanisterId { +pub fn deploy_archive_via_ii(env: &PocketIc, ii_canister: CanisterId) -> CanisterId { match api::internet_identity::deploy_archive(env, ii_canister, &ARCHIVE_WASM) { Ok(DeployArchiveResult::Success(archive_principal)) => archive_principal, err => panic!("archive deployment failed: {err:?}"), } } -pub fn install_archive_canister(env: &StateMachine, wasm: Vec) -> CanisterId { - let canister_id = env.create_canister(None); +pub fn install_archive_canister(env: &PocketIc, wasm: Vec) -> CanisterId { + let canister_id = env.create_canister(); env.install_canister(canister_id, wasm, encode_config(principal_1()), None); canister_id } -pub fn upgrade_archive_canister(env: &StateMachine, canister_id: CanisterId, wasm: Vec) { +pub fn upgrade_archive_canister(env: &PocketIc, canister_id: CanisterId, wasm: Vec) { env.upgrade_canister(canister_id, wasm, encode_config(principal_1()), None) .unwrap(); } diff --git a/src/internet_identity/Cargo.toml b/src/internet_identity/Cargo.toml index edb950e5e0..a7a03a2d66 100644 --- a/src/internet_identity/Cargo.toml +++ b/src/internet_identity/Cargo.toml @@ -43,7 +43,7 @@ getrandom = { version = "0.2", features = ["custom"] } [dev-dependencies] ic-http-certification.workspace = true -ic-test-state-machine-client.workspace = true +pocket-ic.workspace = true candid_parser.workspace = true canister_tests.workspace = true hex-literal = "0.4" diff --git a/src/internet_identity/stable_memory/README.md b/src/internet_identity/stable_memory/README.md index a77fcfbe90..0cc32d755d 100644 --- a/src/internet_identity/stable_memory/README.md +++ b/src/internet_identity/stable_memory/README.md @@ -20,9 +20,9 @@ The following stable memory backups are currently used: ### Using Canister Test Infrastructure These backup memory files are generated using the `canister_tests` infrastructure. To create a new backup file: -1. Install II on the `StateMachine` +1. Install II on the `PocketIc` ```rust - let env = StateMachine::new(); + let env = PocketIc::new(); let canister_id = install_ii_canister(&env, framework::II_WASM.clone()); ``` 2. Create the desired state in II by interacting with it. diff --git a/src/internet_identity/tests/integration/activity_stats/all_domains.rs b/src/internet_identity/tests/integration/activity_stats/all_domains.rs index d642a699fb..6c0748c3b3 100644 --- a/src/internet_identity/tests/integration/activity_stats/all_domains.rs +++ b/src/internet_identity/tests/integration/activity_stats/all_domains.rs @@ -3,7 +3,7 @@ use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; +use pocket_ic::CallError; use std::time::Duration; const DAY_SECONDS: u64 = 24 * 60 * 60; diff --git a/src/internet_identity/tests/integration/activity_stats/authn_methods.rs b/src/internet_identity/tests/integration/activity_stats/authn_methods.rs index f143eda8ba..bd8ca44aef 100644 --- a/src/internet_identity/tests/integration/activity_stats/authn_methods.rs +++ b/src/internet_identity/tests/integration/activity_stats/authn_methods.rs @@ -6,11 +6,11 @@ use canister_tests::framework::{ assert_labelled_metric, assert_metric, env, get_metrics, install_ii_canister, upgrade_ii_canister, II_WASM, }; -use ic_test_state_machine_client::CallError; use internet_identity_interface::internet_identity::types::{ AuthnMethod, AuthnMethodData, AuthnMethodProtection, AuthnMethodPurpose, AuthnMethodSecuritySettings, MetadataEntryV2, WebAuthn, }; +use pocket_ic::CallError; use serde_bytes::ByteBuf; use std::collections::HashMap; use std::time::Duration; diff --git a/src/internet_identity/tests/integration/activity_stats/ii_domains.rs b/src/internet_identity/tests/integration/activity_stats/ii_domains.rs index 9fccdddc78..1681e1487b 100644 --- a/src/internet_identity/tests/integration/activity_stats/ii_domains.rs +++ b/src/internet_identity/tests/integration/activity_stats/ii_domains.rs @@ -2,7 +2,7 @@ use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; +use pocket_ic::CallError; use std::time::Duration; const DAY_SECONDS: u64 = 24 * 60 * 60; diff --git a/src/internet_identity/tests/integration/aggregation_stats.rs b/src/internet_identity/tests/integration/aggregation_stats.rs index 7851538422..aef41ba868 100644 --- a/src/internet_identity/tests/integration/aggregation_stats.rs +++ b/src/internet_identity/tests/integration/aggregation_stats.rs @@ -7,10 +7,10 @@ use canister_tests::framework::{ upgrade_ii_canister, EMPTY_WASM, II_WASM, II_WASM_PRE_STATS, }; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{CallError, StateMachine}; use internet_identity_interface::internet_identity::types::{ AuthnMethodData, IdentityNumber, MetadataEntryV2, }; +use pocket_ic::{CallError, PocketIc}; use serde_bytes::ByteBuf; use std::collections::HashMap; use std::time::Duration; @@ -214,7 +214,7 @@ fn should_prune_at_most_100_entries_30d() -> Result<(), CallError> { #[test] fn should_keep_aggregations_across_upgrades() -> Result<(), CallError> { const II_ORIGIN: &str = "ic0.app"; - fn assert_expected_state(env: &StateMachine, canister_id: CanisterId) -> Result<(), CallError> { + fn assert_expected_state(env: &PocketIc, canister_id: CanisterId) -> Result<(), CallError> { let aggregations = api::stats(env, canister_id)?.event_aggregations; assert_expected_aggregation( &aggregations, @@ -345,7 +345,7 @@ fn assert_expected_aggregation( ); } -fn create_identity(env: &StateMachine, canister_id: CanisterId, ii_origin: &str) -> IdentityNumber { +fn create_identity(env: &PocketIc, canister_id: CanisterId, ii_origin: &str) -> IdentityNumber { let authn_method = AuthnMethodData { metadata: HashMap::from([( "origin".to_string(), @@ -361,7 +361,7 @@ fn aggregation_key(aggregation: &str, window: &str, ii_domain: &str) -> String { } fn delegation_for_origin( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, identity_nr: IdentityNumber, frontend_hostname: &str, diff --git a/src/internet_identity/tests/integration/anchor_management/device_management.rs b/src/internet_identity/tests/integration/anchor_management/device_management.rs index 6c2348f3c9..b42e7f4909 100644 --- a/src/internet_identity/tests/integration/anchor_management/device_management.rs +++ b/src/internet_identity/tests/integration/anchor_management/device_management.rs @@ -4,9 +4,9 @@ use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; use std::collections::HashMap; diff --git a/src/internet_identity/tests/integration/anchor_management/last_usage_timestamp.rs b/src/internet_identity/tests/integration/anchor_management/last_usage_timestamp.rs index fe3252b0a7..8c774d619d 100644 --- a/src/internet_identity/tests/integration/anchor_management/last_usage_timestamp.rs +++ b/src/internet_identity/tests/integration/anchor_management/last_usage_timestamp.rs @@ -3,8 +3,8 @@ use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::CallError; use serde_bytes::ByteBuf; use std::time::Duration; diff --git a/src/internet_identity/tests/integration/anchor_management/registration/mod.rs b/src/internet_identity/tests/integration/anchor_management/registration/mod.rs index 03ee0153e2..6d0c7281a3 100644 --- a/src/internet_identity/tests/integration/anchor_management/registration/mod.rs +++ b/src/internet_identity/tests/integration/anchor_management/registration/mod.rs @@ -8,9 +8,9 @@ use candid::Principal; use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use std::time::Duration; diff --git a/src/internet_identity/tests/integration/anchor_management/registration/temp_keys.rs b/src/internet_identity/tests/integration/anchor_management/registration/temp_keys.rs index be2fb94f84..e3fae7e98a 100644 --- a/src/internet_identity/tests/integration/anchor_management/registration/temp_keys.rs +++ b/src/internet_identity/tests/integration/anchor_management/registration/temp_keys.rs @@ -8,10 +8,10 @@ use canister_tests::framework::{ install_ii_canister, test_principal, II_WASM, }; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::{CallError, ErrorCode, StateMachine}; use internet_identity_interface::internet_identity::types::{ AnchorNumber, Challenge, ChallengeAttempt, DeviceData, RegisterResponse, }; +use pocket_ic::{CallError, ErrorCode, PocketIc}; use regex::Regex; use serde_bytes::ByteBuf; use std::time::Duration; @@ -202,7 +202,7 @@ fn should_provide_temp_keys_metric() -> Result<(), CallError> { } fn register_with_temp_key( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, temp_key: Principal, device: &DeviceData, diff --git a/src/internet_identity/tests/integration/anchor_management/remote_device_registration.rs b/src/internet_identity/tests/integration/anchor_management/remote_device_registration.rs index 550ad939a8..d3fb7a5d3d 100644 --- a/src/internet_identity/tests/integration/anchor_management/remote_device_registration.rs +++ b/src/internet_identity/tests/integration/anchor_management/remote_device_registration.rs @@ -11,12 +11,11 @@ use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; -use std::ops::Add; -use std::time::{Duration, UNIX_EPOCH}; +use std::time::Duration; /// Test entering registration mode including returned expiration time. #[test] @@ -30,11 +29,7 @@ fn can_enter_device_registration_mode() -> Result<(), CallError> { assert_eq!( result, - env.time() - .add(Duration::from_secs(900)) // 900 seconds -> 15 min - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(900).as_nanos() as u64 // 900 seconds -> 15 min ); Ok(()) } diff --git a/src/internet_identity/tests/integration/archive_integration.rs b/src/internet_identity/tests/integration/archive_integration.rs index 12dcf17bd6..3c96384d2d 100644 --- a/src/internet_identity/tests/integration/archive_integration.rs +++ b/src/internet_identity/tests/integration/archive_integration.rs @@ -1,23 +1,23 @@ use crate::v2_api::authn_method_test_helpers::{ create_identity_with_authn_method, sample_webauthn_authn_method, test_authn_method, }; +use candid::Principal; use canister_tests::api::archive as archive_api; use canister_tests::api::internet_identity as ii_api; use canister_tests::api::internet_identity::api_v2; use canister_tests::flows; use canister_tests::framework::*; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; -use ic_test_state_machine_client::{CallError, StateMachine}; use internet_identity_interface::archive::types::*; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::ErrorCode::CanisterCalledTrap; +use pocket_ic::{CallError, PocketIc}; use regex::Regex; use serde_bytes::ByteBuf; use std::collections::HashMap; use std::time::Duration; -use std::time::SystemTime; -fn setup_ii(env: &StateMachine, arg: Option) -> CanisterId { +fn setup_ii(env: &PocketIc, arg: Option) -> CanisterId { let ii_canister = install_ii_canister_with_arg(env, II_WASM.clone(), arg); assert_eq!( ii_api::stats(env, ii_canister) @@ -218,8 +218,13 @@ mod pull_entries_tests { fn should_restore_archive_buffer_from_stable_memory_backup() -> Result<(), CallError> { let env = env(); let ii_canister = install_ii_canister(&env, EMPTY_WASM.clone()); - // re-create the archive canister with the new II to match the restored backup - env.create_canister(Some(ii_canister)); + // re-create the archive canister with II as the controller and the canister id matching the restored backup + env.create_canister_with_id( + Some(ii_canister), + None, + Principal::from_text("rrkah-fqaaa-aaaaa-aaaaq-cai").unwrap(), + ) + .expect("failed to create archive canister"); // restore stable memory backup with buffered entries in persistent state restore_compressed_stable_memory( @@ -249,6 +254,8 @@ mod pull_entries_tests { env.advance_time(Duration::from_secs(2)); // execute the timer env.tick(); + // progress after the inter-canister call + env.tick(); let entries = archive_api::get_entries(&env, archive_canister, None, None)?; assert_expected_entries(timestamp, entries) @@ -371,11 +378,7 @@ mod pull_entries_tests { let env = env(); let ii_canister = setup_ii(&env, arg_with_wasm_hash(ARCHIVE_WASM.clone())); const METADATA_KEY: &str = "key"; - let timestamp = env - .time() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_nanos() as u64; + let timestamp = time(&env); let archive_canister = deploy_archive_via_ii(&env, ii_canister); assert!(env.canister_exists(archive_canister)); @@ -476,11 +479,7 @@ mod pull_entries_tests { let env = env(); let ii_canister = setup_ii(&env, arg_with_wasm_hash(ARCHIVE_WASM.clone())); const METADATA_KEY: &str = "some-metadata-key"; - let timestamp = env - .time() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_nanos() as u64; + let timestamp = time(&env); let device = DeviceData::auth_test_device(); let anchor = flows::register_anchor_with_device(&env, ii_canister, &device); @@ -596,6 +595,8 @@ mod pull_entries_tests { env.advance_time(Duration::from_secs(2)); // execute the timer env.tick(); + // resume after inter-canister call + env.tick(); let status = archive_api::status(&env, archive_canister)?; assert!(status.call_info.call_errors.is_empty()); @@ -611,10 +612,7 @@ mod pull_entries_tests { assert_metric( &get_metrics(&env, archive_canister), "ii_archive_last_successful_fetch_timestamp_seconds", - env.time() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap() - .as_secs_f64(), + Duration::from_nanos(time(&env)).as_secs() as f64, ); assert_metric( &get_metrics(&env, archive_canister), diff --git a/src/internet_identity/tests/integration/delegation.rs b/src/internet_identity/tests/integration/delegation.rs index 04d2582dd0..5d8f57cd8c 100644 --- a/src/internet_identity/tests/integration/delegation.rs +++ b/src/internet_identity/tests/integration/delegation.rs @@ -4,13 +4,12 @@ use candid::Principal; use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::GetDelegationResponse; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; -use std::ops::Add; -use std::time::{Duration, UNIX_EPOCH}; +use std::time::Duration; /// Verifies that valid delegations are issued. #[test] @@ -32,11 +31,7 @@ fn should_get_valid_delegation() -> Result<(), CallError> { )?; assert_eq!( expiration, - env.time() - .add(Duration::from_secs(30 * 60)) // default expiration: 30 minutes - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(30 * 60).as_nanos() as u64 // default expiration: 30 minutes ); let signed_delegation = match api::get_delegation( @@ -52,7 +47,12 @@ fn should_get_valid_delegation() -> Result<(), CallError> { GetDelegationResponse::NoSuchDelegation => panic!("failed to get delegation"), }; - verify_delegation(&env, canister_sig_key, &signed_delegation, &env.root_key()); + verify_delegation( + &env, + canister_sig_key, + &signed_delegation, + &env.root_key().unwrap(), + ); assert_eq!(signed_delegation.delegation.pubkey, pub_session_key); assert_eq!(signed_delegation.delegation.expiration, expiration); Ok(()) @@ -78,11 +78,7 @@ fn should_get_valid_delegation_with_custom_expiration() -> Result<(), CallError> )?; assert_eq!( expiration, - env.time() - .add(Duration::from_secs(60 * 60)) // 1 hour - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(60 * 60).as_nanos() as u64 ); let signed_delegation = match api::get_delegation( @@ -98,7 +94,12 @@ fn should_get_valid_delegation_with_custom_expiration() -> Result<(), CallError> GetDelegationResponse::NoSuchDelegation => panic!("failed to get delegation"), }; - verify_delegation(&env, canister_sig_key, &signed_delegation, &env.root_key()); + verify_delegation( + &env, + canister_sig_key, + &signed_delegation, + &env.root_key().unwrap(), + ); assert_eq!(signed_delegation.delegation.pubkey, pub_session_key); assert_eq!(signed_delegation.delegation.expiration, expiration); Ok(()) @@ -122,13 +123,10 @@ fn should_shorten_expiration_greater_max_ttl() -> Result<(), CallError> { &pub_session_key, Some(Duration::from_secs(31 * 24 * 60 * 60).as_nanos() as u64), // 31 days )?; + let month_seconds = 30 * 24 * 60 * 60; // 30 days assert_eq!( expiration, - env.time() - .add(Duration::from_secs(30 * 24 * 60 * 60)) // 30 days - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(month_seconds).as_nanos() as u64 ); let signed_delegation = match api::get_delegation( @@ -144,7 +142,12 @@ fn should_shorten_expiration_greater_max_ttl() -> Result<(), CallError> { GetDelegationResponse::NoSuchDelegation => panic!("failed to get delegation"), }; - verify_delegation(&env, canister_sig_key, &signed_delegation, &env.root_key()); + verify_delegation( + &env, + canister_sig_key, + &signed_delegation, + &env.root_key().unwrap(), + ); assert_eq!(signed_delegation.delegation.pubkey, pub_session_key); assert_eq!(signed_delegation.delegation.expiration, expiration); Ok(()) @@ -154,7 +157,7 @@ fn should_shorten_expiration_greater_max_ttl() -> Result<(), CallError> { #[test] fn should_get_multiple_valid_delegations() -> Result<(), CallError> { let env = env(); - let root_key = env.root_key(); + let root_key = env.root_key().unwrap(); let canister_id = install_ii_canister(&env, II_WASM.clone()); let user_number = flows::register_anchor(&env, canister_id); let frontend_hostname_1 = "https://dapp1.com"; @@ -203,11 +206,7 @@ fn should_get_multiple_valid_delegations() -> Result<(), CallError> { assert_eq!( expiration, - env.time() - .add(Duration::from_secs(30 * 60)) // default expiration: 30 minutes - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(30 * 60).as_nanos() as u64 // default expiration: 30 minutes ); (session_key, frontend_hostname, canister_sig_key, expiration) }); @@ -256,11 +255,7 @@ fn should_get_valid_delegation_for_old_anchor_after_ii_upgrade() -> Result<(), C )?; assert_eq!( expiration, - env.time() - .add(Duration::from_secs(30 * 60)) // default expiration: 30 minutes - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(30 * 60).as_nanos() as u64 // default expiration: 30 minutes ); let signed_delegation = match api::get_delegation( @@ -276,7 +271,12 @@ fn should_get_valid_delegation_for_old_anchor_after_ii_upgrade() -> Result<(), C GetDelegationResponse::NoSuchDelegation => panic!("failed to get delegation"), }; - verify_delegation(&env, canister_sig_key, &signed_delegation, &env.root_key()); + verify_delegation( + &env, + canister_sig_key, + &signed_delegation, + &env.root_key().unwrap(), + ); assert_eq!(signed_delegation.delegation.pubkey, pub_session_key); assert_eq!(signed_delegation.delegation.expiration, expiration); Ok(()) diff --git a/src/internet_identity/tests/integration/http.rs b/src/internet_identity/tests/integration/http.rs index d85806052d..6c4d2840a9 100644 --- a/src/internet_identity/tests/integration/http.rs +++ b/src/internet_identity/tests/integration/http.rs @@ -11,15 +11,15 @@ use canister_tests::framework::*; use ic_cdk::api::management_canister::main::CanisterId; use ic_response_verification::types::VerificationInfo; use ic_response_verification::verify_request_response_pair; -use ic_test_state_machine_client::{CallError, StateMachine}; use internet_identity_interface::http_gateway::{HttpRequest, HttpResponse}; use internet_identity_interface::internet_identity::types::vc_mvp::PrepareIdAliasRequest; use internet_identity_interface::internet_identity::types::{ AuthnMethodData, ChallengeAttempt, FrontendHostname, MetadataEntryV2, }; +use pocket_ic::{CallError, PocketIc}; use serde_bytes::ByteBuf; use std::collections::HashMap; -use std::time::{Duration, UNIX_EPOCH}; +use std::time::Duration; /// Verifies that some expected assets are delivered, certified and have security headers. #[test] @@ -168,11 +168,8 @@ fn ii_canister_serves_http_metrics() -> Result<(), CallError> { for metric in metrics { let (_, metric_timestamp) = parse_metric(&metrics_body, metric); assert_eq!( - env.time() - .duration_since(metric_timestamp) - .unwrap() - .as_secs(), - 0, + metric_timestamp, + Duration::from_nanos(time(&env)).as_millis() as u64, "metric timestamp did not match state machine time" ) } @@ -335,7 +332,7 @@ fn metrics_last_upgrade_timestamp_should_update_after_upgrade() -> Result<(), Ca assert_metric( &get_metrics(&env, canister_id), "internet_identity_last_upgrade_timestamp", - env.time().duration_since(UNIX_EPOCH).unwrap().as_nanos() as f64, + time(&env) as f64, ); env.advance_time(Duration::from_secs(300)); // the state machine does not advance time on its own @@ -344,7 +341,7 @@ fn metrics_last_upgrade_timestamp_should_update_after_upgrade() -> Result<(), Ca assert_metric( &get_metrics(&env, canister_id), "internet_identity_last_upgrade_timestamp", - env.time().duration_since(UNIX_EPOCH).unwrap().as_nanos() as f64, + time(&env) as f64, ); Ok(()) } @@ -754,7 +751,7 @@ fn should_get_different_id_alias_for_different_flows() -> Result<(), CallError> } fn verify_response_certification( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, request: HttpRequest, http_response: HttpResponse, @@ -776,7 +773,7 @@ fn verify_response_certification( canister_id.as_slice(), time(env) as u128, Duration::from_secs(300).as_nanos(), - &env.root_key(), + &env.root_key().unwrap(), min_certification_version as u8, ) .unwrap_or_else(|e| panic!("validation failed: {e}")) diff --git a/src/internet_identity/tests/integration/rollback.rs b/src/internet_identity/tests/integration/rollback.rs index 194b22143a..ee5df52564 100644 --- a/src/internet_identity/tests/integration/rollback.rs +++ b/src/internet_identity/tests/integration/rollback.rs @@ -5,8 +5,8 @@ use candid::Principal; use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; use internet_identity_interface::internet_identity::types::DeviceData; +use pocket_ic::CallError; use serde_bytes::ByteBuf; /// Tests simple upgrade and downgrade. diff --git a/src/internet_identity/tests/integration/stable_memory.rs b/src/internet_identity/tests/integration/stable_memory.rs index 23d0bf43b2..d801e8af68 100644 --- a/src/internet_identity/tests/integration/stable_memory.rs +++ b/src/internet_identity/tests/integration/stable_memory.rs @@ -4,9 +4,10 @@ use candid::Principal; use canister_tests::api::internet_identity as api; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::common::rest::BlobCompression::NoCompression; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; use std::path::PathBuf; @@ -70,7 +71,12 @@ fn should_issue_same_principal_after_restoring_backup() -> Result<(), CallError> let principal = Principal::self_authenticating(hex::decode(PUBLIC_KEY).unwrap()); let env = env(); - let canister_id = install_ii_canister(&env, EMPTY_WASM.clone()); + // the principal is dependent on the canister id, hence we need to create the canister with a + // specific one. + let canister_id = Principal::from_text("rwlgt-iiaaa-aaaaa-aaaaa-cai").unwrap(); + env.create_canister_with_id(None, None, canister_id) + .expect("failed to create canister"); + env.install_canister(canister_id, EMPTY_WASM.clone(), vec![], None); restore_compressed_stable_memory( &env, @@ -287,7 +293,7 @@ fn should_trap_on_old_stable_memory() -> Result<(), CallError> { let stable_memory_backup = std::fs::read(PathBuf::from("stable_memory/genesis-memory-layout.bin")).unwrap(); - env.set_stable_memory(canister_id, ByteBuf::from(stable_memory_backup)); + env.set_stable_memory(canister_id, stable_memory_backup, NoCompression); let result = upgrade_ii_canister_with_arg(&env, canister_id, II_WASM.clone(), None); assert!(result.is_err()); let err = result.err().unwrap(); diff --git a/src/internet_identity/tests/integration/upgrade.rs b/src/internet_identity/tests/integration/upgrade.rs index 0bf1010231..552a6fb945 100644 --- a/src/internet_identity/tests/integration/upgrade.rs +++ b/src/internet_identity/tests/integration/upgrade.rs @@ -5,9 +5,9 @@ use candid::Principal; use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::*; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_add.rs b/src/internet_identity/tests/integration/v2_api/authn_method_add.rs index be8cf8a0eb..a6d54fc4eb 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_add.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_add.rs @@ -6,9 +6,9 @@ use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{ env, expect_user_error_with_message, install_ii_canister, II_WASM, }; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::{AuthnMethodAddError, MetadataEntryV2}; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_metadata.rs b/src/internet_identity/tests/integration/v2_api/authn_method_metadata.rs index 4f2b949a5f..6f77e37a14 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_metadata.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_metadata.rs @@ -6,12 +6,12 @@ use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{ env, expect_user_error_with_message, install_ii_canister, II_WASM, }; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::{ AuthnMethodData, AuthnMethodMetadataReplaceError, AuthnMethodProtection, AuthnMethodPurpose, AuthnMethodSecuritySettings, MetadataEntryV2, }; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; use std::collections::HashMap; diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_registration.rs b/src/internet_identity/tests/integration/v2_api/authn_method_registration.rs index 0613647698..3fa79ed80d 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_registration.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_registration.rs @@ -4,17 +4,16 @@ use crate::v2_api::authn_method_test_helpers::{ use candid::Principal; use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{ - env, expect_user_error_with_message, install_ii_canister, II_WASM, + env, expect_user_error_with_message, install_ii_canister, time, II_WASM, }; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::{ AuthnMethodConfirmationCode, AuthnMethodConfirmationError, AuthnMethodRegisterError, AuthnMethodRegistration, }; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; -use std::ops::Add; -use std::time::{Duration, UNIX_EPOCH}; +use std::time::Duration; #[test] fn should_enter_authn_method_registration_mode() -> Result<(), CallError> { @@ -33,11 +32,7 @@ fn should_enter_authn_method_registration_mode() -> Result<(), CallError> { assert_eq!( result.expiration, - env.time() - .add(Duration::from_secs(900)) // 900 seconds -> 15 min - .duration_since(UNIX_EPOCH) - .unwrap() - .as_nanos() as u64 + time(&env) + Duration::from_secs(900).as_nanos() as u64 // 900 seconds -> 15 min ); Ok(()) } diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_remove.rs b/src/internet_identity/tests/integration/v2_api/authn_method_remove.rs index 01a3851450..445757bd32 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_remove.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_remove.rs @@ -6,8 +6,8 @@ use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{ env, expect_user_error_with_message, install_ii_canister, II_WASM, }; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; #[test] diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_replace.rs b/src/internet_identity/tests/integration/v2_api/authn_method_replace.rs index 98d43dde10..631e1fef08 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_replace.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_replace.rs @@ -7,11 +7,11 @@ use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{ env, expect_user_error_with_message, install_ii_canister, II_WASM, }; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::{ AuthnMethodData, AuthnMethodReplaceError, MetadataEntryV2, }; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; use std::collections::HashMap; diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_security_settings.rs b/src/internet_identity/tests/integration/v2_api/authn_method_security_settings.rs index 51f45de44a..67814f7ec3 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_security_settings.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_security_settings.rs @@ -6,12 +6,12 @@ use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{ env, expect_user_error_with_message, install_ii_canister, II_WASM, }; -use ic_test_state_machine_client::CallError; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::{ AuthnMethodData, AuthnMethodProtection, AuthnMethodPurpose, AuthnMethodSecuritySettings, AuthnMethodSecuritySettingsReplaceError, MetadataEntryV2, }; +use pocket_ic::CallError; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; use std::collections::HashMap; diff --git a/src/internet_identity/tests/integration/v2_api/authn_method_test_helpers.rs b/src/internet_identity/tests/integration/v2_api/authn_method_test_helpers.rs index 7ce1359a57..0ff005ca3d 100644 --- a/src/internet_identity/tests/integration/v2_api/authn_method_test_helpers.rs +++ b/src/internet_identity/tests/integration/v2_api/authn_method_test_helpers.rs @@ -1,11 +1,11 @@ use canister_tests::api::internet_identity::api_v2; use ic_cdk::api::management_canister::main::CanisterId; -use ic_test_state_machine_client::StateMachine; use internet_identity_interface::internet_identity::types::{ AuthnMethod, AuthnMethodData, AuthnMethodProtection, AuthnMethodPurpose, AuthnMethodSecuritySettings, ChallengeAttempt, IdentityNumber, MetadataEntryV2, PublicKeyAuthn, WebAuthn, }; +use pocket_ic::PocketIc; use serde_bytes::ByteBuf; use std::collections::HashMap; @@ -53,7 +53,7 @@ pub fn test_authn_method() -> AuthnMethodData { } pub fn create_identity_with_authn_method( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, authn_method: &AuthnMethodData, ) -> IdentityNumber { @@ -78,7 +78,7 @@ pub fn create_identity_with_authn_method( } pub fn create_identity_with_authn_methods( - env: &StateMachine, + env: &PocketIc, canister_id: CanisterId, authn_methods: &[AuthnMethodData], ) -> IdentityNumber { diff --git a/src/internet_identity/tests/integration/v2_api/identity_authn_info.rs b/src/internet_identity/tests/integration/v2_api/identity_authn_info.rs index 42a77eb0c3..d1f3834fbf 100644 --- a/src/internet_identity/tests/integration/v2_api/identity_authn_info.rs +++ b/src/internet_identity/tests/integration/v2_api/identity_authn_info.rs @@ -3,8 +3,8 @@ use crate::v2_api::authn_method_test_helpers::{ }; use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{env, install_ii_canister, II_WASM}; -use ic_test_state_machine_client::CallError; use internet_identity_interface::internet_identity::types::AuthnMethodPurpose; +use pocket_ic::CallError; #[test] fn should_get_identity_authn_info() -> Result<(), CallError> { diff --git a/src/internet_identity/tests/integration/v2_api/identity_info.rs b/src/internet_identity/tests/integration/v2_api/identity_info.rs index 3e648a0844..cb46b0f606 100644 --- a/src/internet_identity/tests/integration/v2_api/identity_info.rs +++ b/src/internet_identity/tests/integration/v2_api/identity_info.rs @@ -8,10 +8,10 @@ use candid::Principal; use canister_tests::api::internet_identity as api; use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{env, install_ii_canister, time, II_WASM}; -use ic_test_state_machine_client::CallError; use internet_identity_interface::internet_identity::types::{ AuthnMethodData, DeviceData, DeviceWithUsage, IdentityInfoError, MetadataEntry, }; +use pocket_ic::CallError; use serde_bytes::ByteBuf; use std::collections::HashMap; use std::time::Duration; diff --git a/src/internet_identity/tests/integration/v2_api/identity_metadata.rs b/src/internet_identity/tests/integration/v2_api/identity_metadata.rs index d19c55fa8d..14316027df 100644 --- a/src/internet_identity/tests/integration/v2_api/identity_metadata.rs +++ b/src/internet_identity/tests/integration/v2_api/identity_metadata.rs @@ -4,10 +4,10 @@ use crate::v2_api::authn_method_test_helpers::{ use candid::Principal; use canister_tests::api::internet_identity::api_v2; use canister_tests::framework::{env, install_ii_canister, II_WASM}; -use ic_test_state_machine_client::CallError; use internet_identity_interface::internet_identity::types::{ IdentityMetadataReplaceError, MetadataEntryV2, }; +use pocket_ic::CallError; use std::collections::HashMap; #[test] diff --git a/src/internet_identity/tests/integration/v2_api/identity_register.rs b/src/internet_identity/tests/integration/v2_api/identity_register.rs index 7c414e6194..ee4885b996 100644 --- a/src/internet_identity/tests/integration/v2_api/identity_register.rs +++ b/src/internet_identity/tests/integration/v2_api/identity_register.rs @@ -7,10 +7,10 @@ use canister_tests::framework::{ arg_with_anchor_range, env, expect_user_error_with_message, install_ii_canister, install_ii_canister_with_arg, II_WASM, }; -use ic_test_state_machine_client::ErrorCode::CanisterCalledTrap; use internet_identity_interface::internet_identity::types::{ ChallengeAttempt, IdentityRegisterError, MetadataEntryV2, }; +use pocket_ic::ErrorCode::CanisterCalledTrap; use regex::Regex; use serde_bytes::ByteBuf; use std::time::Duration; diff --git a/src/internet_identity/tests/integration/vc_mvp.rs b/src/internet_identity/tests/integration/vc_mvp.rs index 1b67e7ab57..3c66e636b8 100644 --- a/src/internet_identity/tests/integration/vc_mvp.rs +++ b/src/internet_identity/tests/integration/vc_mvp.rs @@ -3,7 +3,6 @@ use canister_sig_util::{extract_raw_root_pk_from_der, CanisterSigPublicKey}; use canister_tests::api::internet_identity as api; use canister_tests::flows; use canister_tests::framework::*; -use ic_test_state_machine_client::CallError; use identity_jose::jwk::JwkType; use identity_jose::jws::Decoder; use identity_jose::jwu::encode_b64; @@ -11,6 +10,7 @@ use internet_identity_interface::internet_identity::types::vc_mvp::{ GetIdAliasError, GetIdAliasRequest, PrepareIdAliasError, PrepareIdAliasRequest, }; use internet_identity_interface::internet_identity::types::FrontendHostname; +use pocket_ic::CallError; use std::ops::Deref; use vc_util::verify_credential_jws_with_canister_id; @@ -77,13 +77,14 @@ fn should_get_valid_id_alias() -> Result<(), CallError> { let canister_sig_pk = CanisterSigPublicKey::try_from(prepared_id_alias.canister_sig_pk_der.as_ref()) .expect("failed parsing canister sig pk"); + let root_key = env.root_key().unwrap(); let root_pk_raw = - extract_raw_root_pk_from_der(&env.root_key()).expect("Failed decoding IC root key."); + extract_raw_root_pk_from_der(&root_key).expect("Failed decoding IC root key."); verify_id_alias_credential_via_env( &env, prepared_id_alias.canister_sig_pk_der.clone(), &id_alias_credentials.rp_id_alias_credential, - &env.root_key(), + &root_key, ); verify_credential_jws_with_canister_id( &id_alias_credentials.rp_id_alias_credential.credential_jws, @@ -96,7 +97,7 @@ fn should_get_valid_id_alias() -> Result<(), CallError> { &env, prepared_id_alias.canister_sig_pk_der.clone(), &id_alias_credentials.issuer_id_alias_credential, - &env.root_key(), + &root_key, ); verify_credential_jws_with_canister_id( &id_alias_credentials @@ -196,8 +197,8 @@ fn should_get_different_id_alias_for_different_users() -> Result<(), CallError> id_alias_credentials_2.issuer_id_alias_credential.id_alias ); - let root_pk_raw = - extract_raw_root_pk_from_der(&env.root_key()).expect("Failed decoding IC root key."); + let root_pk_raw = extract_raw_root_pk_from_der(&env.root_key().unwrap()) + .expect("Failed decoding IC root key."); verify_credential_jws_with_canister_id( &id_alias_credentials_1.rp_id_alias_credential.credential_jws, &canister_sig_pk_1.canister_id, @@ -322,8 +323,8 @@ fn should_get_different_id_alias_for_different_relying_parties() -> Result<(), C id_alias_credentials_2.issuer_id_alias_credential.id_alias ); - let root_pk_raw = - extract_raw_root_pk_from_der(&env.root_key()).expect("Failed decoding IC root key."); + let root_pk_raw = extract_raw_root_pk_from_der(&env.root_key().unwrap()) + .expect("Failed decoding IC root key."); verify_credential_jws_with_canister_id( &id_alias_credentials_1.rp_id_alias_credential.credential_jws, &canister_sig_pk_1.canister_id, @@ -449,8 +450,8 @@ fn should_get_different_id_alias_for_different_issuers() -> Result<(), CallError id_alias_credentials_2.issuer_id_alias_credential.id_alias ); - let root_pk_raw = - extract_raw_root_pk_from_der(&env.root_key()).expect("Failed decoding IC root key."); + let root_pk_raw = extract_raw_root_pk_from_der(&env.root_key().unwrap()) + .expect("Failed decoding IC root key."); verify_credential_jws_with_canister_id( &id_alias_credentials_1.rp_id_alias_credential.credential_jws, &canister_sig_pk_1.canister_id, @@ -566,8 +567,8 @@ fn should_get_different_id_alias_for_different_flows() -> Result<(), CallError> id_alias_credentials_2.issuer_id_alias_credential.id_alias ); - let root_pk_raw = - extract_raw_root_pk_from_der(&env.root_key()).expect("Failed decoding IC root key."); + let root_pk_raw = extract_raw_root_pk_from_der(&env.root_key().unwrap()) + .expect("Failed decoding IC root key."); verify_credential_jws_with_canister_id( &id_alias_credentials_1.rp_id_alias_credential.credential_jws, &canister_sig_pk_1.canister_id, @@ -774,17 +775,18 @@ fn should_not_validate_id_alias_with_wrong_canister_key() { id_alias_credentials.issuer_id_alias_credential.id_alias ); + let root_key = env.root_key().unwrap(); verify_id_alias_credential_via_env( &env, prepared_id_alias.canister_sig_pk_der.clone(), &id_alias_credentials.rp_id_alias_credential, - &env.root_key(), + &root_key, ); verify_id_alias_credential_via_env( &env, prepared_id_alias.canister_sig_pk_der.clone(), &id_alias_credentials.issuer_id_alias_credential, - &env.root_key(), + &root_key, ); let mut bad_canister_sig_key = prepared_id_alias.canister_sig_pk_der.clone(); @@ -797,6 +799,6 @@ fn should_not_validate_id_alias_with_wrong_canister_key() { &env, bad_canister_sig_key, &id_alias_credentials.rp_id_alias_credential, - &env.root_key(), + &root_key, ); }