ic-platform-runtime 0.19.5

Canonical IC system API, executor and raw call runtime
Documentation
use super::*;

#[test]
fn wait_policy_replaces_mode_without_changing_payload_or_payment() {
    for initial in [
        Call::bounded_wait(Principal::anonymous(), "probe"),
        Call::unbounded_wait(Principal::anonymous(), "probe"),
    ] {
        let initial = initial.take_raw_args(vec![1, 2]).with_cycles(123);
        for timeout_seconds in [0, 1, 300, u32::MAX] {
            let call = initial
                .clone()
                .with_wait_policy(WaitPolicy::Bounded { timeout_seconds });
            assert_eq!(call.timeout_seconds, Some(timeout_seconds));
            assert_eq!(call.encoded_args.as_ref(), [1, 2]);
            assert_eq!(call.cycles, 123);
            assert_eq!(call.method, "probe");
            assert_eq!(call.canister_id, Principal::anonymous());
            let call = call.with_wait_policy(WaitPolicy::Unbounded);
            assert_eq!(call.timeout_seconds, None);
        }
    }
    assert_eq!(
        Call::bounded_wait(Principal::anonymous(), "probe").timeout_seconds,
        Some(300)
    );
    assert_eq!(
        Call::unbounded_wait(Principal::anonymous(), "probe").timeout_seconds,
        None
    );
}

#[test]
fn raw_constructors_do_not_choose_a_codec() {
    for call in [
        Call::bounded_wait(Principal::anonymous(), "probe"),
        Call::unbounded_wait(Principal::anonymous(), "probe"),
    ] {
        assert!(call.encoded_args.is_empty());
        assert_eq!(call.with_raw_args(b"raw").encoded_args.as_ref(), b"raw");
    }
}

#[test]
fn external_unit_arguments_are_explicit() {
    let args = b"DIDL\0\0".to_vec();
    let call =
        Call::unbounded_wait(Principal::management_canister(), "raw_rand").with_raw_args(&args);
    assert_eq!(call.encoded_args.as_ref(), b"DIDL\0\0");
}