diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs b/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs index d9ad7e1..62dd964 100644 --- a/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs +++ b/src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs @@ -2,15 +2,18 @@ use proptest::prelude::*; use std::ops::Deref; use crate::{ - errors::WsError, tests::integration_tests::utils::test_env::get_test_env, + errors::WsError, + tests::integration_tests::utils::{ + actor::ws_get_messages::call_ws_get_messages_with_panic, test_env::get_test_env, + }, CanisterOutputCertifiedMessages, CanisterOutputMessage, CanisterWsGetMessagesArguments, - CanisterWsGetMessagesResult, CanisterWsOpenArguments, CanisterWsOpenResult, ClientKey, - WebsocketServiceMessageContent, DEFAULT_MAX_NUMBER_OF_RETURNED_MESSAGES, + CanisterWsOpenArguments, CanisterWsOpenResult, ClientKey, WebsocketServiceMessageContent, + DEFAULT_MAX_NUMBER_OF_RETURNED_MESSAGES, }; use candid::Principal; use super::utils::{ - actor::{ws_get_messages::call_ws_get_messages, ws_open::call_ws_open}, + actor::ws_open::call_ws_open, clients::{generate_random_client_nonce, CLIENT_1_KEY, GATEWAY_1}, messages::get_service_message_content_from_canister_message, }; @@ -38,24 +41,19 @@ fn test_2_should_open_a_connection() { let res = call_ws_open(&client_1_key.client_principal, args); assert_eq!(res, CanisterWsOpenResult::Ok(())); - let msgs = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, .. } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 0 }, ); - match msgs { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { - let first_message = &messages[0]; - assert_eq!(first_message.client_key, *client_1_key); - let open_message = get_service_message_content_from_canister_message(first_message); - match open_message { - WebsocketServiceMessageContent::OpenMessage(open_message) => { - assert_eq!(open_message.client_key, *client_1_key); - }, - _ => panic!("Expected OpenMessage"), - } + let first_message = &messages[0]; + assert_eq!(first_message.client_key, *client_1_key); + let open_message = get_service_message_content_from_canister_message(first_message); + match open_message { + WebsocketServiceMessageContent::OpenMessage(open_message) => { + assert_eq!(open_message.client_key, *client_1_key); }, - _ => panic!("Expected Ok result"), + _ => panic!("Expected OpenMessage"), } } @@ -98,28 +96,23 @@ proptest! { let res = call_ws_open(&client_key.client_principal, args); assert_eq!(res, CanisterWsOpenResult::Ok(())); - let msgs = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, .. } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 0 }, ); - match msgs { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { - let service_message_for_client = messages - .iter() - .filter(|msg| msg.client_key == client_key) - .collect::>()[0]; + let service_message_for_client = messages + .iter() + .filter(|msg| msg.client_key == client_key) + .collect::>()[0]; - let open_message = - get_service_message_content_from_canister_message(service_message_for_client); - match open_message { - WebsocketServiceMessageContent::OpenMessage(open_message) => { - assert_eq!(open_message.client_key, client_key); - }, - _ => panic!("Expected OpenMessage"), - } + let open_message = + get_service_message_content_from_canister_message(service_message_for_client); + match open_message { + WebsocketServiceMessageContent::OpenMessage(open_message) => { + assert_eq!(open_message.client_key, client_key); }, - _ => panic!("Expected Ok result"), + _ => panic!("Expected OpenMessage"), } } } diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs b/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs index 27e5c29..5391b12 100644 --- a/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs +++ b/src/ic-websocket-cdk/src/tests/integration_tests/b_ws_message.rs @@ -160,12 +160,8 @@ fn test_5_fails_if_client_sends_a_wrong_service_message() { ), }, ); - match res { - CanisterWsMessageResult::Err(err) => { - assert!(err.starts_with("Error decoding service message content:")) - }, - _ => panic!("unexpected result"), - }; + let err = res.err().unwrap(); + assert!(err.starts_with("Error decoding service message content:")); // fail with wrong service message variant let wrong_service_message = diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs b/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs index 662453f..f4c49e2 100644 --- a/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs +++ b/src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs @@ -1,13 +1,11 @@ use proptest::prelude::*; use std::ops::Deref; -use crate::{ - CanisterOutputCertifiedMessages, CanisterWsGetMessagesArguments, CanisterWsGetMessagesResult, -}; +use crate::{CanisterOutputCertifiedMessages, CanisterWsGetMessagesArguments}; use super::utils::{ actor::{ - ws_get_messages::call_ws_get_messages, + ws_get_messages::call_ws_get_messages_with_panic, ws_open::call_ws_open_for_client_key_with_panic, ws_send::{call_ws_send_with_panic, AppMessage}, }, @@ -21,18 +19,18 @@ fn test_1_non_registered_gateway_should_receive_empty_messages() { // first, reset the canister get_test_env().reset_canister_with_default_params(); - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_2.deref(), CanisterWsGetMessagesArguments { nonce: 0 }, ); assert_eq!( res, - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + CanisterOutputCertifiedMessages { messages: vec![], cert: vec![], tree: vec![], is_end_of_queue: true, - }), + }, ); } @@ -47,16 +45,11 @@ proptest! { // second, register client 1 call_ws_open_for_client_key_with_panic(test_client_key); - let res = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, .. } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 0 }, ); - match res { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { - prop_assert_eq!(messages.len(), 1); // we expect only the service message - }, - _ => panic!("unexpected result"), - }; + prop_assert_eq!(messages.len(), 1); // we expect only the service message } #[test] @@ -80,35 +73,30 @@ proptest! { // now we can start testing let messages_count = (messages_to_send.len() + 1) as u64; // +1 for the open service message for i in 0..messages_count { - let res = call_ws_get_messages( + let CanisterOutputCertifiedMessages { + messages, + is_end_of_queue, + .. + } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: i }, ); - match res { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { - messages, - is_end_of_queue, - .. - }) => { - prop_assert_eq!( - messages.len() as u64, - if (messages_count - i) > DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES { - DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES - } else { - messages_count - i - } - ); - prop_assert_eq!( - is_end_of_queue, - (messages_count - i) <= DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES - ); - }, - _ => panic!("unexpected result"), - }; + prop_assert_eq!( + messages.len() as u64, + if (messages_count - i) > DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES { + DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + } else { + messages_count - i + } + ); + prop_assert_eq!( + is_end_of_queue, + (messages_count - i) <= DEFAULT_TEST_MAX_NUMBER_OF_RETURNED_MESSAGES + ); } // try to get more messages than available - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: messages_count, @@ -116,12 +104,12 @@ proptest! { ); prop_assert_eq!( res, - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { + CanisterOutputCertifiedMessages { messages: vec![], cert: vec![], tree: vec![], is_end_of_queue: true, - }) + } ); } @@ -145,32 +133,27 @@ proptest! { let mut i = 0; while next_polling_nonce <= test_send_messages_count { - let res = call_ws_get_messages( + let CanisterOutputCertifiedMessages { + messages, + cert, + tree, + .. + } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: next_polling_nonce, }, ); - match res { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { - messages, - cert, - tree, - .. - }) => { - helpers::verify_messages( - &messages, - client_1_key, - &cert, - &tree, - &mut expected_sequence_number, - &mut i, - ); + helpers::verify_messages( + &messages, + client_1_key, + &cert, + &tree, + &mut expected_sequence_number, + &mut i, + ); - next_polling_nonce = get_next_polling_nonce_from_messages(messages); - }, - _ => panic!("unexpected result"), - }; + next_polling_nonce = get_next_polling_nonce_from_messages(messages); } } } diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs b/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs index d40af59..5b60986 100644 --- a/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs +++ b/src/ic-websocket-cdk/src/tests/integration_tests/f_messages_acknowledgement.rs @@ -1,14 +1,14 @@ use std::ops::Deref; use crate::{ - errors::WsError, CanisterOutputCertifiedMessages, CanisterWsGetMessagesArguments, - CanisterWsGetMessagesResult, CanisterWsMessageArguments, CanisterWsSendResult, - ClientKeepAliveMessageContent, WebsocketServiceMessageContent, + errors::WsError, + tests::integration_tests::utils::actor::ws_get_messages::call_ws_get_messages_with_panic, + CanisterOutputCertifiedMessages, CanisterWsGetMessagesArguments, CanisterWsMessageArguments, + CanisterWsSendResult, ClientKeepAliveMessageContent, WebsocketServiceMessageContent, }; use super::utils::{ actor::{ - ws_get_messages::call_ws_get_messages, ws_message::{call_ws_message, call_ws_message_with_panic}, ws_open::call_ws_open_for_client_key_with_panic, }, @@ -26,16 +26,11 @@ fn test_1_client_should_receive_ack_messages() { let client_1_key = CLIENT_1_KEY.deref(); call_ws_open_for_client_key_with_panic(client_1_key); // make sure there are no messages in the queue, except from first open message - let res = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, .. } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 1 }, // skip the service open message ); - match res { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { - assert_eq!(messages.len(), 0); - }, - _ => panic!("unexpected result"), - } + assert_eq!(messages.len(), 0); // send a message from the client in order to receive the ack with the updated sequence number call_ws_message_with_panic( &client_1_key.client_principal, @@ -46,7 +41,7 @@ fn test_1_client_should_receive_ack_messages() { // advance the canister time to make sure the ack timer expires and an ack is sent get_test_env().advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 1 }, ); @@ -62,7 +57,7 @@ fn test_2_client_is_removed_if_keep_alive_timeout_is_reached() { // advance the canister time to make sure the ack timer expires and an ack is sent get_test_env().advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); // get messages to check if the ack message has been set - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 1 }, ); @@ -109,7 +104,7 @@ fn test_3_client_is_not_removed_if_it_sends_a_keep_alive_before_timeout() { // advance the canister time to make sure the ack timer expires and an ack is sent get_test_env().advance_canister_time_ms(DEFAULT_TEST_SEND_ACK_INTERVAL_MS); // get messages to check if the ack message has been set - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 1 }, ); @@ -147,7 +142,7 @@ fn test_3_client_is_not_removed_if_it_sends_a_keep_alive_before_timeout() { get_test_env().advance_canister_time_ms( DEFAULT_TEST_SEND_ACK_INTERVAL_MS - DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, ); - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 2 }, // skip the service open message and the fist ack message ); @@ -164,16 +159,11 @@ fn test_4_client_is_not_removed_if_it_connects_while_canister_is_waiting_for_kee call_ws_open_for_client_key_with_panic(client_1_key); // get messages for client: at this point the client doesn't expect any message - let res = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, .. } = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 1 }, // skip the service open message ); - match res { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { - assert_eq!(messages.len(), 0); - }, - _ => panic!("unexpected result"), - } + assert_eq!(messages.len(), 0); // send a message to the canister to see the sequence number increasing in the ack message // and be sure that the client has not been removed @@ -191,7 +181,7 @@ fn test_4_client_is_not_removed_if_it_connects_while_canister_is_waiting_for_kee DEFAULT_TEST_SEND_ACK_INTERVAL_MS - DEFAULT_TEST_KEEP_ALIVE_TIMEOUT_MS, ); - let res = call_ws_get_messages( + let res = call_ws_get_messages_with_panic( GATEWAY_1.deref(), CanisterWsGetMessagesArguments { nonce: 1 }, // skip the service open message ); @@ -209,39 +199,35 @@ mod helpers { test_env::get_test_env, }, CanisterAckMessageContent, CanisterOutputCertifiedMessages, CanisterOutputMessage, - CanisterWsGetMessagesResult, ClientKey, WebsocketServiceMessageContent, + ClientKey, WebsocketServiceMessageContent, }; pub(super) fn check_ack_message_result( - res: &CanisterWsGetMessagesResult, + res: &CanisterOutputCertifiedMessages, receiver_client_key: &ClientKey, expected_ack_sequence_number: u64, expected_websocket_message_sequence_number: u64, ) { - match res { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { - messages, - cert, - tree, - .. - }) => { - assert_eq!(messages.len(), 1); - let ack_message = messages.first().unwrap(); - check_ack_message_in_messages( - ack_message, - receiver_client_key, - expected_ack_sequence_number, - expected_websocket_message_sequence_number, - ); - assert!(is_valid_certificate(&get_test_env(), &cert, &tree)); - assert!(is_message_body_valid( - &ack_message.key, - &ack_message.content, - &tree, - )); - }, - _ => panic!("unexpected result"), - } + let CanisterOutputCertifiedMessages { + messages, + cert, + tree, + .. + } = res; + assert_eq!(messages.len(), 1); + let ack_message = messages.first().unwrap(); + check_ack_message_in_messages( + ack_message, + receiver_client_key, + expected_ack_sequence_number, + expected_websocket_message_sequence_number, + ); + assert!(is_valid_certificate(&get_test_env(), &cert, &tree)); + assert!(is_message_body_valid( + &ack_message.key, + &ack_message.content, + &tree, + )); } fn check_ack_message_in_messages( diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/g_multiple_gateways.rs b/src/ic-websocket-cdk/src/tests/integration_tests/g_multiple_gateways.rs index 92a5a9d..3e2e59b 100644 --- a/src/ic-websocket-cdk/src/tests/integration_tests/g_multiple_gateways.rs +++ b/src/ic-websocket-cdk/src/tests/integration_tests/g_multiple_gateways.rs @@ -5,17 +5,19 @@ use crate::{ common, integration_tests::{ c_ws_get_messages::helpers, - utils::messages::get_service_message_content_from_canister_message, + utils::{ + actor::ws_get_messages::call_ws_get_messages_with_panic, + messages::get_service_message_content_from_canister_message, + }, }, }, CanisterOutputCertifiedMessages, CanisterWsCloseArguments, CanisterWsGetMessagesArguments, - CanisterWsGetMessagesResult, GatewayPrincipal, WebsocketServiceMessageContent, + GatewayPrincipal, WebsocketServiceMessageContent, }; use super::utils::{ actor::{ ws_close::call_ws_close_with_panic, - ws_get_messages::call_ws_get_messages, ws_open::call_ws_open_for_client_key_and_gateway_with_panic, ws_send::{call_ws_send_with_panic, AppMessage}, }, @@ -48,39 +50,29 @@ proptest! { // test // gateway 1 can poll the messages - let res_gateway_1 = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, cert, tree, is_end_of_queue } = call_ws_get_messages_with_panic( first_gateway, CanisterWsGetMessagesArguments { nonce: 0 }, ); - match res_gateway_1 { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, cert, tree, is_end_of_queue }) => { - prop_assert_eq!(messages.len(), messages_to_send.len() + 1); // +1 for the open service message - prop_assert_eq!(is_end_of_queue, true); + prop_assert_eq!(messages.len(), messages_to_send.len() + 1); // +1 for the open service message + prop_assert_eq!(is_end_of_queue, true); - let mut expected_sequence_number = 1; // the number is incremented before sending - let mut i = 0; - helpers::verify_messages( - &messages, - client_key, - &cert, - &tree, - &mut expected_sequence_number, - &mut i, - ); - }, - _ => panic!("unexpected result"), - }; + let mut expected_sequence_number = 1; // the number is incremented before sending + let mut i = 0; + helpers::verify_messages( + &messages, + client_key, + &cert, + &tree, + &mut expected_sequence_number, + &mut i, + ); // gateway 2 has no messages because it's not registered - let res_gateway_2 = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, .. } = call_ws_get_messages_with_panic( second_gateway, CanisterWsGetMessagesArguments { nonce: 0 }, ); - match res_gateway_2 { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, .. }) => { - prop_assert_eq!(messages.len() as u64, 0); - }, - _ => panic!("unexpected result"), - }; + prop_assert_eq!(messages.len() as u64, 0); // client disconnects, so gateway 1 closes the connection call_ws_close_with_panic( @@ -92,36 +84,31 @@ proptest! { // client reopens connection with gateway 2 call_ws_open_for_client_key_and_gateway_with_panic(&client_key, *second_gateway); // gateway 2 now has the open message - let res_gateway_2 = call_ws_get_messages( + let CanisterOutputCertifiedMessages { messages, cert, tree, is_end_of_queue } = call_ws_get_messages_with_panic( second_gateway, CanisterWsGetMessagesArguments { nonce: 0 }, ); - match res_gateway_2 { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, cert, tree, is_end_of_queue }) => { - prop_assert_eq!(messages.len() as u64, 1); - prop_assert_eq!(is_end_of_queue, true); + prop_assert_eq!(messages.len() as u64, 1); + prop_assert_eq!(is_end_of_queue, true); - helpers::verify_messages( - &messages, - client_key, - &cert, - &tree, - &mut 1, - &mut 0, - ); + helpers::verify_messages( + &messages, + client_key, + &cert, + &tree, + &mut 1, + &mut 0, + ); - let first_message = &messages[0]; - prop_assert_eq!(&first_message.client_key, client_key); - let open_message = get_service_message_content_from_canister_message(first_message); - match open_message { - WebsocketServiceMessageContent::OpenMessage(open_message) => { - prop_assert_eq!(open_message.client_key, client_key.clone()); - }, - _ => panic!("Expected OpenMessage"), - } + let first_message = &messages[0]; + prop_assert_eq!(&first_message.client_key, client_key); + let open_message = get_service_message_content_from_canister_message(first_message); + match open_message { + WebsocketServiceMessageContent::OpenMessage(open_message) => { + prop_assert_eq!(open_message.client_key, client_key.clone()); }, - _ => panic!("unexpected result"), + _ => panic!("Expected OpenMessage"), }; let messages_to_send: Vec = (1..=5) @@ -134,28 +121,24 @@ proptest! { &client_key.client_principal, messages_to_send.clone(), ); - let res_gateway_2 = call_ws_get_messages( + + let CanisterOutputCertifiedMessages { messages, cert, tree, is_end_of_queue } = call_ws_get_messages_with_panic( second_gateway, CanisterWsGetMessagesArguments { nonce: 0 }, ); - match res_gateway_2 { - CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages { messages, cert, tree, is_end_of_queue }) => { - prop_assert_eq!(messages.len(), messages_to_send.len() + 1); // +1 for the open service message - prop_assert_eq!(is_end_of_queue, true); + prop_assert_eq!(messages.len(), messages_to_send.len() + 1); // +1 for the open service message + prop_assert_eq!(is_end_of_queue, true); - let mut expected_sequence_number_gw2 = 1; // the number is incremented before sending - let mut i_gw2 = 0; + let mut expected_sequence_number_gw2 = 1; // the number is incremented before sending + let mut i_gw2 = 0; - helpers::verify_messages( - &messages, - client_key, - &cert, - &tree, - &mut expected_sequence_number_gw2, - &mut i_gw2, - ) - }, - _ => panic!("unexpected result"), - }; + helpers::verify_messages( + &messages, + client_key, + &cert, + &tree, + &mut expected_sequence_number_gw2, + &mut i_gw2, + ); } } diff --git a/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs b/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs index 2c5b6fc..32f4ab3 100644 --- a/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs +++ b/src/ic-websocket-cdk/src/tests/integration_tests/utils/actor.rs @@ -28,7 +28,10 @@ pub mod ws_open { } } - /// Same as [call_ws_open] but panics if the call returns an error variant. + /// Same as [call_ws_open]. + /// + /// # Panics + /// If [call_ws_open] panics or if the call returns an error variant. fn call_ws_open_with_panic(caller: &Principal, args: CanisterWsOpenArguments) { match call_ws_open(caller, args) { CanisterWsOpenResult::Ok(_) => {}, @@ -88,7 +91,10 @@ pub mod ws_message { } } - /// Same as [call_ws_message] but panics if the call returns an error variant. + /// Same as [call_ws_message]. + /// + /// # Panics + /// If [call_ws_message] panics or if the call returns an error variant. pub fn call_ws_message_with_panic(caller: &Principal, args: CanisterWsMessageArguments) { match call_ws_message(caller, args) { CanisterWsMessageResult::Ok(_) => {}, @@ -120,6 +126,10 @@ pub mod ws_close { } } + /// Same as [call_ws_close]. + /// + /// # Panics + /// If [call_ws_close] panics or if the call returns an error variant. pub fn call_ws_close_with_panic(caller: &Principal, args: CanisterWsCloseArguments) { match call_ws_close(caller, args) { CanisterWsCloseResult::Ok(_) => {}, @@ -129,10 +139,15 @@ pub mod ws_close { } pub mod ws_get_messages { - use crate::{CanisterWsGetMessagesArguments, CanisterWsGetMessagesResult}; + use crate::{ + types::CanisterOutputCertifiedMessages, CanisterWsGetMessagesArguments, + CanisterWsGetMessagesResult, + }; use super::*; + /// # Panics + /// if the call returns a [WasmResult::Reject]. pub fn call_ws_get_messages( caller: &Principal, args: CanisterWsGetMessagesArguments, @@ -153,6 +168,20 @@ pub mod ws_get_messages { _ => panic!("Expected reply"), } } + + /// Same as [call_ws_get_messages]. + /// + /// # Panics + /// If [call_ws_get_messages] panics or if the call returns an error variant. + pub fn call_ws_get_messages_with_panic( + caller: &Principal, + args: CanisterWsGetMessagesArguments, + ) -> CanisterOutputCertifiedMessages { + match call_ws_get_messages(caller, args) { + CanisterWsGetMessagesResult::Ok(res) => res, + CanisterWsGetMessagesResult::Err(err) => panic!("failed ws_get_messages: {:?}", err), + } + } } pub mod ws_send { @@ -170,6 +199,8 @@ pub mod ws_send { /// (`ClientPrincipal`, `Vec>`) type WsSendArguments = (ClientPrincipal, Vec>); + /// # Panics + /// if the call returns a [WasmResult::Reject]. pub fn call_ws_send( send_to_principal: &ClientPrincipal, messages: Vec, @@ -192,6 +223,10 @@ pub mod ws_send { } } + /// Same as [call_ws_send]. + /// + /// # Panics + /// If [call_ws_send] panics or if the call returns an error variant. pub fn call_ws_send_with_panic(send_to_principal: &ClientPrincipal, messages: Vec) { match call_ws_send(send_to_principal, messages) { CanisterWsSendResult::Ok(_) => {},