pub struct PocketIc { /* private fields */ }
Expand description
Main entry point for interacting with PocketIC.
Implementations§
Source§impl PocketIc
impl PocketIc
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new PocketIC instance with a single application subnet on the server. The server is started if it’s not already running.
Sourcepub fn instance_id(&self) -> InstanceId
pub fn instance_id(&self) -> InstanceId
Returns the instance ID.
Sourcepub fn topology(&self) -> Topology
pub fn topology(&self) -> Topology
Returns the topology of the different subnets of this PocketIC instance.
Sourcepub fn upload_blob(&self, blob: Vec<u8>, compression: BlobCompression) -> BlobId
pub fn upload_blob(&self, blob: Vec<u8>, compression: BlobCompression) -> BlobId
Upload and store a binary blob to the PocketIC server.
Sourcepub fn set_stable_memory(
&self,
canister_id: CanisterId,
data: Vec<u8>,
compression: BlobCompression,
)
pub fn set_stable_memory( &self, canister_id: CanisterId, data: Vec<u8>, compression: BlobCompression, )
Set stable memory of a canister. Optional GZIP compression can be used for reduced data traffic.
Sourcepub fn get_stable_memory(&self, canister_id: CanisterId) -> Vec<u8> ⓘ
pub fn get_stable_memory(&self, canister_id: CanisterId) -> Vec<u8> ⓘ
Get stable memory of a canister.
Sourcepub fn list_instances() -> Vec<String>
pub fn list_instances() -> Vec<String>
List all instances and their status.
Sourcepub fn verify_canister_signature(
&self,
msg: Vec<u8>,
sig: Vec<u8>,
pubkey: Vec<u8>,
root_pubkey: Vec<u8>,
) -> Result<(), String>
pub fn verify_canister_signature( &self, msg: Vec<u8>, sig: Vec<u8>, pubkey: Vec<u8>, root_pubkey: Vec<u8>, ) -> Result<(), String>
Verify a canister signature.
Sourcepub fn tick(&self)
pub fn tick(&self)
Make the IC produce and progress by one block. Note that multiple ticks might be necessary to observe an expected effect, e.g., if the effect depends on inter-canister calls or heartbeats.
Sourcepub fn auto_progress(&self) -> Url
pub fn auto_progress(&self) -> Url
Configures the IC to make progress automatically,
i.e., periodically update the time of the IC
to the real time and execute rounds on the subnets.
Returns the URL at which /api/v2
requests
for this instance can be made.
Sourcepub fn stop_progress(&self)
pub fn stop_progress(&self)
Stops automatic progress (see auto_progress
) on the IC.
Sourcepub fn url(&self) -> Option<Url>
pub fn url(&self) -> Option<Url>
Returns the URL at which /api/v2
requests
for this instance can be made if the HTTP
gateway has been started.
Sourcepub fn make_live(&mut self, listen_at: Option<u16>) -> Url
pub fn make_live(&mut self, listen_at: Option<u16>) -> Url
Creates an HTTP gateway for this IC instance
listening on an optionally specified port
and configures the IC instance to make progress
automatically, i.e., periodically update the time
of the IC to the real time and execute rounds on the subnets.
Returns the URL at which /api/v2
requests
for this instance can be made.
Sourcepub async fn make_live_with_params(
&mut self,
listen_at: Option<u16>,
domains: Option<Vec<String>>,
https_config: Option<HttpsConfig>,
) -> Url
pub async fn make_live_with_params( &mut self, listen_at: Option<u16>, domains: Option<Vec<String>>, https_config: Option<HttpsConfig>, ) -> Url
Creates an HTTP gateway for this PocketIC instance listening
on an optionally specified port (defaults to choosing an arbitrary unassigned port)
and optionally specified domains (default to localhost
)
and using an optionally specified TLS certificate (if provided, an HTTPS gateway is created)
and configures the PocketIC instance to make progress automatically, i.e.,
periodically update the time of the PocketIC instance to the real time and execute rounds on the subnets.
Returns the URL at which /api/v2
requests
for this instance can be made.
Sourcepub fn stop_live(&mut self)
pub fn stop_live(&mut self)
Stops auto progress (automatic time updates and round executions) and the HTTP gateway for this IC instance.
Sourcepub fn make_deterministic(&mut self)
👎Deprecated: Use stop_live
instead.
pub fn make_deterministic(&mut self)
stop_live
instead.Use stop_live
instead.
Sourcepub fn root_key(&self) -> Option<Vec<u8>>
pub fn root_key(&self) -> Option<Vec<u8>>
Get the root key of this IC instance. Returns None
if the IC has no NNS subnet.
Sourcepub fn get_time(&self) -> SystemTime
pub fn get_time(&self) -> SystemTime
Get the current time of the IC.
Sourcepub fn set_time(&self, time: SystemTime)
pub fn set_time(&self, time: SystemTime)
Set the current time of the IC, on all subnets.
Sourcepub fn advance_time(&self, duration: Duration)
pub fn advance_time(&self, duration: Duration)
Advance the time on the IC on all subnets by some nanoseconds.
Sourcepub fn get_controllers(&self, canister_id: CanisterId) -> Vec<Principal>
pub fn get_controllers(&self, canister_id: CanisterId) -> Vec<Principal>
Get the controllers of a canister. Panics if the canister does not exist.
Sourcepub fn cycle_balance(&self, canister_id: CanisterId) -> u128
pub fn cycle_balance(&self, canister_id: CanisterId) -> u128
Get the current cycles balance of a canister.
Sourcepub fn add_cycles(&self, canister_id: CanisterId, amount: u128) -> u128
pub fn add_cycles(&self, canister_id: CanisterId, amount: u128) -> u128
Add cycles to a canister. Returns the new balance.
Sourcepub fn submit_call(
&self,
canister_id: CanisterId,
sender: Principal,
method: &str,
payload: Vec<u8>,
) -> Result<RawMessageId, UserError>
pub fn submit_call( &self, canister_id: CanisterId, sender: Principal, method: &str, payload: Vec<u8>, ) -> Result<RawMessageId, UserError>
Submit an update call (without executing it immediately).
Sourcepub fn submit_call_with_effective_principal(
&self,
canister_id: CanisterId,
effective_principal: RawEffectivePrincipal,
sender: Principal,
method: &str,
payload: Vec<u8>,
) -> Result<RawMessageId, UserError>
pub fn submit_call_with_effective_principal( &self, canister_id: CanisterId, effective_principal: RawEffectivePrincipal, sender: Principal, method: &str, payload: Vec<u8>, ) -> Result<RawMessageId, UserError>
Submit an update call with a provided effective principal (without executing it immediately).
Sourcepub fn await_call(
&self,
message_id: RawMessageId,
) -> Result<WasmResult, UserError>
pub fn await_call( &self, message_id: RawMessageId, ) -> Result<WasmResult, UserError>
Await an update call submitted previously by submit_call_with_effective_principal
.
Sourcepub fn update_call(
&self,
canister_id: CanisterId,
sender: Principal,
method: &str,
payload: Vec<u8>,
) -> Result<WasmResult, UserError>
pub fn update_call( &self, canister_id: CanisterId, sender: Principal, method: &str, payload: Vec<u8>, ) -> Result<WasmResult, UserError>
Execute an update call on a canister.
Sourcepub fn query_call(
&self,
canister_id: CanisterId,
sender: Principal,
method: &str,
payload: Vec<u8>,
) -> Result<WasmResult, UserError>
pub fn query_call( &self, canister_id: CanisterId, sender: Principal, method: &str, payload: Vec<u8>, ) -> Result<WasmResult, UserError>
Execute a query call on a canister.
Sourcepub fn fetch_canister_logs(
&self,
canister_id: CanisterId,
sender: Principal,
) -> Result<Vec<CanisterLogRecord>, CallError>
pub fn fetch_canister_logs( &self, canister_id: CanisterId, sender: Principal, ) -> Result<Vec<CanisterLogRecord>, CallError>
Fetch canister logs via a query call to the management canister.
Sourcepub fn canister_status(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<CanisterStatusResult, CallError>
pub fn canister_status( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<CanisterStatusResult, CallError>
Request a canister’s status.
Sourcepub fn create_canister(&self) -> CanisterId
pub fn create_canister(&self) -> CanisterId
Create a canister with default settings as the anonymous principal.
Sourcepub fn create_canister_with_settings(
&self,
sender: Option<Principal>,
settings: Option<CanisterSettings>,
) -> CanisterId
pub fn create_canister_with_settings( &self, sender: Option<Principal>, settings: Option<CanisterSettings>, ) -> CanisterId
Create a canister with optional custom settings and a sender.
Sourcepub fn create_canister_with_id(
&self,
sender: Option<Principal>,
settings: Option<CanisterSettings>,
canister_id: CanisterId,
) -> Result<CanisterId, String>
pub fn create_canister_with_id( &self, sender: Option<Principal>, settings: Option<CanisterSettings>, canister_id: CanisterId, ) -> Result<CanisterId, String>
Creates a canister with a specific canister ID and optional custom settings. Returns an error if the canister ID is already in use. Creates a new subnet if the canister ID is not contained in any of the subnets.
The canister ID must be an IC mainnet canister ID that does not belong to the NNS or II subnet, otherwise the function might panic (for NNS and II canister IDs, the PocketIC instance should already be created with those subnets).
Sourcepub fn create_canister_on_subnet(
&self,
sender: Option<Principal>,
settings: Option<CanisterSettings>,
subnet_id: SubnetId,
) -> CanisterId
pub fn create_canister_on_subnet( &self, sender: Option<Principal>, settings: Option<CanisterSettings>, subnet_id: SubnetId, ) -> CanisterId
Create a canister on a specific subnet with optional custom settings.
Sourcepub fn upload_chunk(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
chunk: Vec<u8>,
) -> Result<Vec<u8>, CallError>
pub fn upload_chunk( &self, canister_id: CanisterId, sender: Option<Principal>, chunk: Vec<u8>, ) -> Result<Vec<u8>, CallError>
Upload a WASM chunk to the WASM chunk store of a canister. Returns the WASM chunk hash.
Sourcepub fn stored_chunks(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<Vec<Vec<u8>>, CallError>
pub fn stored_chunks( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<Vec<Vec<u8>>, CallError>
List WASM chunk hashes in the WASM chunk store of a canister.
Sourcepub fn clear_chunk_store(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn clear_chunk_store( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<(), CallError>
Clear the WASM chunk store of a canister.
Sourcepub fn install_chunked_canister(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
mode: CanisterInstallMode,
store_canister_id: CanisterId,
chunk_hashes_list: Vec<Vec<u8>>,
wasm_module_hash: Vec<u8>,
arg: Vec<u8>,
) -> Result<(), CallError>
pub fn install_chunked_canister( &self, canister_id: CanisterId, sender: Option<Principal>, mode: CanisterInstallMode, store_canister_id: CanisterId, chunk_hashes_list: Vec<Vec<u8>>, wasm_module_hash: Vec<u8>, arg: Vec<u8>, ) -> Result<(), CallError>
Install a WASM module assembled from chunks on an existing canister.
Sourcepub fn install_canister(
&self,
canister_id: CanisterId,
wasm_module: Vec<u8>,
arg: Vec<u8>,
sender: Option<Principal>,
)
pub fn install_canister( &self, canister_id: CanisterId, wasm_module: Vec<u8>, arg: Vec<u8>, sender: Option<Principal>, )
Install a WASM module on an existing canister.
Sourcepub fn upgrade_canister(
&self,
canister_id: CanisterId,
wasm_module: Vec<u8>,
arg: Vec<u8>,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn upgrade_canister( &self, canister_id: CanisterId, wasm_module: Vec<u8>, arg: Vec<u8>, sender: Option<Principal>, ) -> Result<(), CallError>
Upgrade a canister with a new WASM module.
Sourcepub fn reinstall_canister(
&self,
canister_id: CanisterId,
wasm_module: Vec<u8>,
arg: Vec<u8>,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn reinstall_canister( &self, canister_id: CanisterId, wasm_module: Vec<u8>, arg: Vec<u8>, sender: Option<Principal>, ) -> Result<(), CallError>
Reinstall a canister WASM module.
Sourcepub fn uninstall_canister(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn uninstall_canister( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<(), CallError>
Uninstall a canister.
Sourcepub fn take_canister_snapshot(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
replace_snapshot: Option<Vec<u8>>,
) -> Result<Snapshot, CallError>
pub fn take_canister_snapshot( &self, canister_id: CanisterId, sender: Option<Principal>, replace_snapshot: Option<Vec<u8>>, ) -> Result<Snapshot, CallError>
Take canister snapshot.
Sourcepub fn load_canister_snapshot(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
snapshot_id: Vec<u8>,
) -> Result<(), CallError>
pub fn load_canister_snapshot( &self, canister_id: CanisterId, sender: Option<Principal>, snapshot_id: Vec<u8>, ) -> Result<(), CallError>
Load canister snapshot.
Sourcepub fn list_canister_snapshots(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<Vec<Snapshot>, CallError>
pub fn list_canister_snapshots( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<Vec<Snapshot>, CallError>
List canister snapshots.
Sourcepub fn delete_canister_snapshot(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
snapshot_id: Vec<u8>,
) -> Result<(), CallError>
pub fn delete_canister_snapshot( &self, canister_id: CanisterId, sender: Option<Principal>, snapshot_id: Vec<u8>, ) -> Result<(), CallError>
Delete canister snapshot.
Sourcepub fn update_canister_settings(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
settings: CanisterSettings,
) -> Result<(), CallError>
pub fn update_canister_settings( &self, canister_id: CanisterId, sender: Option<Principal>, settings: CanisterSettings, ) -> Result<(), CallError>
Update canister settings.
Sourcepub fn set_controllers(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
new_controllers: Vec<Principal>,
) -> Result<(), CallError>
pub fn set_controllers( &self, canister_id: CanisterId, sender: Option<Principal>, new_controllers: Vec<Principal>, ) -> Result<(), CallError>
Set canister’s controllers.
Sourcepub fn start_canister(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn start_canister( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<(), CallError>
Start a canister.
Sourcepub fn stop_canister(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn stop_canister( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<(), CallError>
Stop a canister.
Sourcepub fn delete_canister(
&self,
canister_id: CanisterId,
sender: Option<Principal>,
) -> Result<(), CallError>
pub fn delete_canister( &self, canister_id: CanisterId, sender: Option<Principal>, ) -> Result<(), CallError>
Delete a canister.
Sourcepub fn canister_exists(&self, canister_id: CanisterId) -> bool
pub fn canister_exists(&self, canister_id: CanisterId) -> bool
Checks whether the provided canister exists.
Sourcepub fn get_subnet(&self, canister_id: CanisterId) -> Option<SubnetId>
pub fn get_subnet(&self, canister_id: CanisterId) -> Option<SubnetId>
Returns the subnet ID of the canister if the canister exists.
Sourcepub fn get_subnet_metrics(&self, subnet_id: Principal) -> Option<SubnetMetrics>
pub fn get_subnet_metrics(&self, subnet_id: Principal) -> Option<SubnetMetrics>
Returns subnet metrics for a given subnet.
Sourcepub fn get_canister_http(&self) -> Vec<CanisterHttpRequest>
pub fn get_canister_http(&self) -> Vec<CanisterHttpRequest>
Get the pending canister HTTP outcalls.
Note that an additional PocketIc::tick
is necessary after a canister
executes a message making a canister HTTP outcall for the HTTP outcall
to be retrievable here.
Note that, unless a PocketIC instance is in auto progress mode,
a response to the pending canister HTTP outcalls
must be produced by the test driver and passed on to the PocketIC instace
using PocketIc::mock_canister_http_response
.
In auto progress mode, the PocketIC server produces a response for every
pending canister HTTP outcall by actually making an HTTP request
to the specified URL.
Sourcepub fn mock_canister_http_response(
&self,
mock_canister_http_response: MockCanisterHttpResponse,
)
pub fn mock_canister_http_response( &self, mock_canister_http_response: MockCanisterHttpResponse, )
Mock a response to a pending canister HTTP outcall.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for PocketIc
impl !RefUnwindSafe for PocketIc
impl Send for PocketIc
impl Sync for PocketIc
impl Unpin for PocketIc
impl !UnwindSafe for PocketIc
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more