Skip to content

Commit d8d55ba

Browse files
committed
Test cases for select drop and take handlers.
1 parent 28f3a54 commit d8d55ba

File tree

1 file changed

+125
-2
lines changed
  • server/swimos_agent/src/lanes/map

1 file changed

+125
-2
lines changed

server/swimos_agent/src/lanes/map/tests.rs

Lines changed: 125 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use tokio_util::codec::Decoder;
2626
use uuid::Uuid;
2727

2828
use crate::event_handler::ModificationFlags;
29+
use crate::lanes::map::MapLaneSelectDropOrTake;
2930
use crate::{
3031
agent_model::WriteResult,
3132
event_handler::{EventHandlerError, HandlerAction, Modification, StepResult},
@@ -1140,7 +1141,7 @@ fn drop_take_choose_keys() {
11401141
}
11411142

11421143
#[test]
1143-
fn map_lane_drop() {
1144+
fn map_lane_drop_event_handler() {
11441145
let uri = make_uri();
11451146
let route_params = HashMap::new();
11461147
let meta = make_meta(&uri, &route_params);
@@ -1201,7 +1202,7 @@ fn map_lane_drop() {
12011202
}
12021203

12031204
#[test]
1204-
fn map_lane_take() {
1205+
fn map_lane_take_event_handler() {
12051206
let uri = make_uri();
12061207
let route_params = HashMap::new();
12071208
let meta = make_meta(&uri, &route_params);
@@ -1260,3 +1261,125 @@ fn map_lane_take() {
12601261
assert!(removals.contains(&K1));
12611262
assert!(removals.contains(&K2));
12621263
}
1264+
1265+
#[test]
1266+
fn map_lane_select_drop_event_handler() {
1267+
let uri = make_uri();
1268+
let route_params = HashMap::new();
1269+
let meta = make_meta(&uri, &route_params);
1270+
let agent = TestAgent::with_init();
1271+
1272+
let mut handler = MapLaneSelectDropOrTake::new(TestSelectorFn(true), DropOrTake::Drop, 2);
1273+
1274+
let mut removals = vec![];
1275+
loop {
1276+
match handler.step(
1277+
&mut dummy_context(&mut HashMap::new(), &mut BytesMut::new()),
1278+
meta,
1279+
&agent,
1280+
) {
1281+
StepResult::Continue { modified_item } => {
1282+
let Modification { item_id, flags } = modified_item.expect("No change made.");
1283+
assert_eq!(item_id, LANE_ID);
1284+
assert_eq!(flags, ModificationFlags::all());
1285+
agent.lane.read_with_prev(|event, _| {
1286+
if let Some(MapLaneEvent::Remove(k, _)) = event {
1287+
removals.push(k);
1288+
} else {
1289+
panic!("Expected only removals.");
1290+
}
1291+
})
1292+
}
1293+
StepResult::Fail(err) => panic!("Failed: {}", err),
1294+
StepResult::Complete { modified_item, .. } => {
1295+
if let Some(Modification { item_id, flags }) = modified_item {
1296+
assert_eq!(item_id, LANE_ID);
1297+
assert_eq!(flags, ModificationFlags::all());
1298+
agent.lane.read_with_prev(|event, _| {
1299+
if let Some(MapLaneEvent::Remove(k, _)) = event {
1300+
removals.push(k);
1301+
} else {
1302+
panic!("Expected only removals.");
1303+
}
1304+
})
1305+
}
1306+
break;
1307+
}
1308+
}
1309+
}
1310+
1311+
let result = handler.step(
1312+
&mut dummy_context(&mut HashMap::new(), &mut BytesMut::new()),
1313+
meta,
1314+
&agent,
1315+
);
1316+
assert!(matches!(
1317+
result,
1318+
StepResult::Fail(EventHandlerError::SteppedAfterComplete)
1319+
));
1320+
1321+
assert_eq!(removals.len(), 2);
1322+
assert!(removals.contains(&K1));
1323+
assert!(removals.contains(&K3));
1324+
}
1325+
1326+
#[test]
1327+
fn map_lane_select_take_event_handler() {
1328+
let uri = make_uri();
1329+
let route_params = HashMap::new();
1330+
let meta = make_meta(&uri, &route_params);
1331+
let agent = TestAgent::with_init();
1332+
1333+
let mut handler = MapLaneSelectDropOrTake::new(TestSelectorFn(true), DropOrTake::Take, 1);
1334+
1335+
let mut removals = vec![];
1336+
loop {
1337+
match handler.step(
1338+
&mut dummy_context(&mut HashMap::new(), &mut BytesMut::new()),
1339+
meta,
1340+
&agent,
1341+
) {
1342+
StepResult::Continue { modified_item } => {
1343+
let Modification { item_id, flags } = modified_item.expect("No change made.");
1344+
assert_eq!(item_id, LANE_ID);
1345+
assert_eq!(flags, ModificationFlags::all());
1346+
agent.lane.read_with_prev(|event, _| {
1347+
if let Some(MapLaneEvent::Remove(k, _)) = event {
1348+
removals.push(k);
1349+
} else {
1350+
panic!("Expected only removals.");
1351+
}
1352+
})
1353+
}
1354+
StepResult::Fail(err) => panic!("Failed: {}", err),
1355+
StepResult::Complete { modified_item, .. } => {
1356+
if let Some(Modification { item_id, flags }) = modified_item {
1357+
assert_eq!(item_id, LANE_ID);
1358+
assert_eq!(flags, ModificationFlags::all());
1359+
agent.lane.read_with_prev(|event, _| {
1360+
if let Some(MapLaneEvent::Remove(k, _)) = event {
1361+
removals.push(k);
1362+
} else {
1363+
panic!("Expected only removals.");
1364+
}
1365+
})
1366+
}
1367+
break;
1368+
}
1369+
}
1370+
}
1371+
1372+
let result = handler.step(
1373+
&mut dummy_context(&mut HashMap::new(), &mut BytesMut::new()),
1374+
meta,
1375+
&agent,
1376+
);
1377+
assert!(matches!(
1378+
result,
1379+
StepResult::Fail(EventHandlerError::SteppedAfterComplete)
1380+
));
1381+
1382+
assert_eq!(removals.len(), 2);
1383+
assert!(removals.contains(&K1));
1384+
assert!(removals.contains(&K2));
1385+
}

0 commit comments

Comments
 (0)