Skip to content

Commit

Permalink
perf: unneeded matches
Browse files Browse the repository at this point in the history
  • Loading branch information
ilbertt committed Nov 29, 2023
1 parent 972f1c5 commit 1ecd452
Show file tree
Hide file tree
Showing 6 changed files with 195 additions and 219 deletions.
59 changes: 26 additions & 33 deletions src/ic-websocket-cdk/src/tests/integration_tests/a_ws_open.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
Expand Down Expand Up @@ -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"),
}
}

Expand Down Expand Up @@ -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::<Vec<&CanisterOutputMessage>>()[0];
let service_message_for_client = messages
.iter()
.filter(|msg| msg.client_key == client_key)
.collect::<Vec<&CanisterOutputMessage>>()[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"),
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down
101 changes: 42 additions & 59 deletions src/ic-websocket-cdk/src/tests/integration_tests/c_ws_get_messages.rs
Original file line number Diff line number Diff line change
@@ -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},
},
Expand All @@ -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,
}),
},
);
}

Expand All @@ -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]
Expand All @@ -80,48 +73,43 @@ 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,
},
);
prop_assert_eq!(
res,
CanisterWsGetMessagesResult::Ok(CanisterOutputCertifiedMessages {
CanisterOutputCertifiedMessages {
messages: vec![],
cert: vec![],
tree: vec![],
is_end_of_queue: true,
})
}
);
}

Expand All @@ -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);
}
}
}
Expand Down
Loading

0 comments on commit 1ecd452

Please sign in to comment.