-
Notifications
You must be signed in to change notification settings - Fork 295
/
in_replicated_execution.rs
92 lines (84 loc) · 2.6 KB
/
in_replicated_execution.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
use ic_ic00_types::CanisterInstallMode;
use ic_registry_subnet_type::SubnetType;
use ic_state_machine_tests::{StateMachine, StateMachineBuilder, UserError, WasmResult};
use ic_test_utilities::universal_canister::{wasm, UNIVERSAL_CANISTER_WASM};
use ic_types::{CanisterId, Cycles};
const REPLICATED_EXECUTION: [u8; 4] = [1, 0, 0, 0];
const NON_REPLICATED_EXECUTION: [u8; 4] = [0, 0, 0, 0];
fn setup() -> (StateMachine, CanisterId) {
let env = StateMachineBuilder::new()
.with_subnet_type(SubnetType::Application)
.with_checkpoints_enabled(false)
.build();
let canister_id =
env.create_canister_with_cycles(None, Cycles::from(100_000_000_000_u128), None);
env.install_wasm_in_mode(
canister_id,
CanisterInstallMode::Install,
UNIVERSAL_CANISTER_WASM.to_vec(),
vec![],
)
.unwrap();
(env, canister_id)
}
pub fn expect_reply(result: Result<WasmResult, UserError>) -> Vec<u8> {
match result {
Ok(wasm_result) => match wasm_result {
WasmResult::Reply(bytes) => bytes,
WasmResult::Reject(msg) => panic!("Unexpected reject: {}", msg),
},
Err(err) => panic!("Unexpected error: {}", err),
}
}
#[test]
fn test_in_replicated_execution_for_update_returns_1() {
// Arrange.
let (env, canister_id) = setup();
// Act.
let result = env.execute_ingress(
canister_id,
"update",
wasm().in_replicated_execution().reply_int().build(),
);
// Assert.
assert_eq!(expect_reply(result), REPLICATED_EXECUTION);
}
#[test]
fn test_in_replicated_execution_for_replicated_query_returns_1() {
// Arrange.
let (env, canister_id) = setup();
// Act.
let result = env.execute_ingress(
canister_id,
"query",
wasm().in_replicated_execution().reply_int().build(),
);
// Assert.
assert_eq!(expect_reply(result), REPLICATED_EXECUTION);
}
#[test]
fn test_in_replicated_execution_for_query_returns_0() {
// Arrange.
let (env, canister_id) = setup();
// Act.
let result = env.query(
canister_id,
"query",
wasm().in_replicated_execution().reply_int().build(),
);
// Assert.
assert_eq!(expect_reply(result), NON_REPLICATED_EXECUTION);
}
#[test]
fn test_in_replicated_execution_for_composite_query_returns_0() {
// Arrange.
let (env, canister_id) = setup();
// Act.
let result = env.query(
canister_id,
"composite_query",
wasm().in_replicated_execution().reply_int().build(),
);
// Assert.
assert_eq!(expect_reply(result), NON_REPLICATED_EXECUTION);
}