Skip to content

Commit 99bdeb7

Browse files
committed
[eclipse-iceoryx#690] Add dynamic API tests
1 parent 2b1f644 commit 99bdeb7

File tree

1 file changed

+172
-4
lines changed

1 file changed

+172
-4
lines changed

iceoryx2/tests/service_request_response_tests.rs

+172-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ mod service_request_response {
1717
use iceoryx2::node::NodeBuilder;
1818
use iceoryx2::port::client::Client;
1919
use iceoryx2::port::server::Server;
20+
use iceoryx2::port::LoanError;
2021
use iceoryx2::prelude::{PortFactory, *};
2122
use iceoryx2::service::builder::publish_subscribe::{CustomHeaderMarker, CustomPayloadMarker};
2223
use iceoryx2::service::static_config::message_type_details::{TypeDetail, TypeVariant};
@@ -1001,7 +1002,7 @@ mod service_request_response {
10011002
assert_that!(response.header().number_of_elements(), eq NUMBER_OF_ELEMENTS as u64);
10021003
let payload_ptr = response.payload().as_ptr() as *const u8;
10031004
for n in 0..type_details.size {
1004-
assert_that!(unsafe { *payload_ptr.add(n) }, eq(n % 255) as u8);
1005+
assert_that!(unsafe { *payload_ptr.add(n) }, eq(n % 89) as u8);
10051006
}
10061007
}
10071008

@@ -1029,7 +1030,7 @@ mod service_request_response {
10291030
.request_user_header::<CustomHeaderMarker>()
10301031
.response_user_header::<CustomHeaderMarker>()
10311032
.__internal_set_request_header_type_details(&type_details)
1032-
.create()
1033+
.open()
10331034
.unwrap()
10341035
};
10351036

@@ -1051,7 +1052,7 @@ mod service_request_response {
10511052
}
10521053

10531054
#[test]
1054-
fn sending_responses_with_custom_header_works<Sut: Service>() {
1055+
fn sending_response_with_custom_header_works<Sut: Service>() {
10551056
let service_name = generate_service_name();
10561057
let config = generate_isolated_config();
10571058
let node = NodeBuilder::new().config(&config).create::<Sut>().unwrap();
@@ -1074,7 +1075,7 @@ mod service_request_response {
10741075
.request_user_header::<CustomHeaderMarker>()
10751076
.response_user_header::<CustomHeaderMarker>()
10761077
.__internal_set_response_header_type_details(&type_details)
1077-
.create()
1078+
.open()
10781079
.unwrap()
10791080
};
10801081

@@ -1090,6 +1091,7 @@ mod service_request_response {
10901091
for n in 0..type_details.size {
10911092
unsafe { header_ptr.add(n).write((n % 229) as u8) };
10921093
}
1094+
unsafe { response.assume_init().send().unwrap() };
10931095

10941096
let response = unsafe { pending_response.receive_custom_payload().unwrap().unwrap() };
10951097
let header_ptr = (response.user_header() as *const CustomHeaderMarker) as *const u8;
@@ -1098,6 +1100,172 @@ mod service_request_response {
10981100
}
10991101
}
11001102

1103+
#[test]
1104+
fn send_increasing_requests_with_static_allocation_strategy_fails<Sut: Service>() {
1105+
const SLICE_SIZE: usize = 1024;
1106+
let service_name = generate_service_name();
1107+
let config = generate_isolated_config();
1108+
let node = NodeBuilder::new().config(&config).create::<Sut>().unwrap();
1109+
1110+
let service = node
1111+
.service_builder(&service_name)
1112+
.request_response::<[u8], u64>()
1113+
.create()
1114+
.unwrap();
1115+
1116+
let client = service
1117+
.client_builder()
1118+
.initial_max_slice_len(SLICE_SIZE)
1119+
.allocation_strategy(AllocationStrategy::Static)
1120+
.create()
1121+
.unwrap();
1122+
1123+
let request = client.loan_slice(SLICE_SIZE - 1);
1124+
assert_that!(request, is_ok);
1125+
1126+
let request = client.loan_slice(SLICE_SIZE);
1127+
assert_that!(request, is_ok);
1128+
1129+
let request = client.loan_slice(SLICE_SIZE + 1);
1130+
assert_that!(request.err(), eq Some(LoanError::ExceedsMaxLoanSize));
1131+
}
1132+
1133+
#[test]
1134+
fn send_increasing_responses_with_static_allocation_strategy_fails<Sut: Service>() {
1135+
const SLICE_SIZE: usize = 1024;
1136+
let service_name = generate_service_name();
1137+
let config = generate_isolated_config();
1138+
let node = NodeBuilder::new().config(&config).create::<Sut>().unwrap();
1139+
1140+
let service = node
1141+
.service_builder(&service_name)
1142+
.request_response::<u64, [u8]>()
1143+
.create()
1144+
.unwrap();
1145+
1146+
let client = service.client_builder().create().unwrap();
1147+
let server = service
1148+
.server_builder()
1149+
.initial_max_slice_len(SLICE_SIZE)
1150+
.allocation_strategy(AllocationStrategy::Static)
1151+
.create()
1152+
.unwrap();
1153+
let _pending_response = client.send_copy(0).unwrap();
1154+
let active_request = server.receive().unwrap().unwrap();
1155+
1156+
let response = active_request.loan_slice(SLICE_SIZE - 1);
1157+
assert_that!(response, is_ok);
1158+
1159+
let response = active_request.loan_slice(SLICE_SIZE);
1160+
assert_that!(response, is_ok);
1161+
1162+
let response = active_request.loan_slice(SLICE_SIZE + 1);
1163+
assert_that!(response.err(), eq Some(LoanError::ExceedsMaxLoanSize));
1164+
}
1165+
1166+
fn send_and_receive_increasing_requests_works<Sut: Service>(
1167+
allocation_strategy: AllocationStrategy,
1168+
) {
1169+
const ITERATIONS: usize = 128;
1170+
let service_name = generate_service_name();
1171+
let config = generate_isolated_config();
1172+
let node = NodeBuilder::new().config(&config).create::<Sut>().unwrap();
1173+
1174+
let service = node
1175+
.service_builder(&service_name)
1176+
.request_response::<[u8], u64>()
1177+
.create()
1178+
.unwrap();
1179+
1180+
let client = service
1181+
.client_builder()
1182+
.initial_max_slice_len(1)
1183+
.allocation_strategy(allocation_strategy)
1184+
.create()
1185+
.unwrap();
1186+
let server = service.server_builder().create().unwrap();
1187+
1188+
for n in 0..ITERATIONS {
1189+
let request_size = (n + 1) * 32;
1190+
let mut request = client.loan_slice(request_size).unwrap();
1191+
for byte in request.payload_mut() {
1192+
*byte = n as u8;
1193+
}
1194+
1195+
let _pending_response = request.send().unwrap();
1196+
1197+
let active_request = server.receive().unwrap().unwrap();
1198+
assert_that!(active_request.payload(), len request_size);
1199+
for byte in active_request.payload() {
1200+
assert_that!(*byte, eq n as u8);
1201+
}
1202+
}
1203+
}
1204+
1205+
#[test]
1206+
fn send_and_receive_increasing_requests_with_best_fit_allocation_works<Sut: Service>() {
1207+
send_and_receive_increasing_requests_works::<Sut>(AllocationStrategy::BestFit);
1208+
}
1209+
1210+
#[test]
1211+
fn send_and_receive_increasing_requests_with_power_of_two_allocation_works<Sut: Service>() {
1212+
send_and_receive_increasing_requests_works::<Sut>(AllocationStrategy::PowerOfTwo);
1213+
}
1214+
1215+
fn send_and_receive_increasing_responses_works<Sut: Service>(
1216+
allocation_strategy: AllocationStrategy,
1217+
) {
1218+
const ITERATIONS: usize = 128;
1219+
let service_name = generate_service_name();
1220+
let config = generate_isolated_config();
1221+
let node = NodeBuilder::new().config(&config).create::<Sut>().unwrap();
1222+
1223+
let service = node
1224+
.service_builder(&service_name)
1225+
.request_response::<u64, [u8]>()
1226+
.create()
1227+
.unwrap();
1228+
1229+
let client = service.client_builder().create().unwrap();
1230+
let server = service
1231+
.server_builder()
1232+
.initial_max_slice_len(1)
1233+
.allocation_strategy(allocation_strategy)
1234+
.create()
1235+
.unwrap();
1236+
let pending_response = client.send_copy(0).unwrap();
1237+
let active_request = server.receive().unwrap().unwrap();
1238+
1239+
for n in 0..ITERATIONS {
1240+
let response_size = (n + 1) * 32;
1241+
let mut response = active_request.loan_slice(response_size).unwrap();
1242+
for byte in response.payload_mut() {
1243+
*byte = n as u8 + 5;
1244+
}
1245+
response.send().unwrap();
1246+
1247+
let response = pending_response.receive().unwrap().unwrap();
1248+
assert_that!(response.payload(), len response_size);
1249+
for byte in response.payload() {
1250+
assert_that!(*byte, eq n as u8 + 5);
1251+
}
1252+
}
1253+
}
1254+
1255+
#[test]
1256+
fn send_and_receive_increasing_responses_with_best_fit_allocation_strategy_works<
1257+
Sut: Service,
1258+
>() {
1259+
send_and_receive_increasing_responses_works::<Sut>(AllocationStrategy::BestFit);
1260+
}
1261+
1262+
#[test]
1263+
fn send_and_receive_increasing_responses_with_power_of_two_allocation_strategy_works<
1264+
Sut: Service,
1265+
>() {
1266+
send_and_receive_increasing_responses_works::<Sut>(AllocationStrategy::PowerOfTwo);
1267+
}
1268+
11011269
#[instantiate_tests(<iceoryx2::service::ipc::Service>)]
11021270
mod ipc {}
11031271

0 commit comments

Comments
 (0)