@@ -26,6 +26,7 @@ use tokio_util::codec::Decoder;
26
26
use uuid:: Uuid ;
27
27
28
28
use crate :: event_handler:: ModificationFlags ;
29
+ use crate :: lanes:: map:: MapLaneSelectDropOrTake ;
29
30
use crate :: {
30
31
agent_model:: WriteResult ,
31
32
event_handler:: { EventHandlerError , HandlerAction , Modification , StepResult } ,
@@ -1140,7 +1141,7 @@ fn drop_take_choose_keys() {
1140
1141
}
1141
1142
1142
1143
#[ test]
1143
- fn map_lane_drop ( ) {
1144
+ fn map_lane_drop_event_handler ( ) {
1144
1145
let uri = make_uri ( ) ;
1145
1146
let route_params = HashMap :: new ( ) ;
1146
1147
let meta = make_meta ( & uri, & route_params) ;
@@ -1201,7 +1202,7 @@ fn map_lane_drop() {
1201
1202
}
1202
1203
1203
1204
#[ test]
1204
- fn map_lane_take ( ) {
1205
+ fn map_lane_take_event_handler ( ) {
1205
1206
let uri = make_uri ( ) ;
1206
1207
let route_params = HashMap :: new ( ) ;
1207
1208
let meta = make_meta ( & uri, & route_params) ;
@@ -1260,3 +1261,125 @@ fn map_lane_take() {
1260
1261
assert ! ( removals. contains( & K1 ) ) ;
1261
1262
assert ! ( removals. contains( & K2 ) ) ;
1262
1263
}
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