Skip to content

Commit 1aa567e

Browse files
committed
test: added test for counter
1 parent ffea98b commit 1aa567e

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

tap-agent/src/agent/sender_account.rs

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,6 @@ impl Actor for SenderAccount {
570570
);
571571
SenderAccount::deny_sender(&state.pgpool, state.sender).await;
572572
}
573-
574573
state.sender_fee_tracker.add(allocation_id, value);
575574

576575
UNAGGREGATED_FEES
@@ -612,7 +611,6 @@ impl Actor for SenderAccount {
612611
state.sender_fee_tracker.get_total_fee_outside_buffer();
613612
let total_fee_greater_trigger_value =
614613
total_fee_outside_buffer >= state.config.tap.rav_request_trigger_value;
615-
616614
let rav_result = match (
617615
counter_greater_receipt_limit,
618616
total_fee_greater_trigger_value,
@@ -931,13 +929,15 @@ pub mod tests {
931929
const TRIGGER_VALUE: u128 = 500;
932930
const ESCROW_VALUE: u128 = 1000;
933931
const BUFFER_MS: u64 = 100;
932+
const RECEIPT_LIMIT: u64 = 10000;
934933

935934
async fn create_sender_account(
936935
pgpool: PgPool,
937936
initial_allocation: HashSet<Address>,
938937
rav_request_trigger_value: u128,
939938
max_unnaggregated_fees_per_sender: u128,
940939
escrow_subgraph_endpoint: &str,
940+
rav_request_receipt_limit: u64,
941941
) -> (
942942
ActorRef<SenderAccountMessage>,
943943
tokio::task::JoinHandle<()>,
@@ -954,6 +954,7 @@ pub mod tests {
954954
rav_request_timestamp_buffer_ms: BUFFER_MS,
955955
rav_request_timeout_secs: 5,
956956
max_unnaggregated_fees_per_sender,
957+
rav_request_receipt_limit,
957958
..Default::default()
958959
},
959960
..Default::default()
@@ -1005,6 +1006,7 @@ pub mod tests {
10051006
TRIGGER_VALUE,
10061007
TRIGGER_VALUE,
10071008
DUMMY_URL,
1009+
RECEIPT_LIMIT,
10081010
)
10091011
.await;
10101012

@@ -1045,6 +1047,7 @@ pub mod tests {
10451047
TRIGGER_VALUE,
10461048
TRIGGER_VALUE,
10471049
DUMMY_URL,
1050+
RECEIPT_LIMIT,
10481051
)
10491052
.await;
10501053

@@ -1228,6 +1231,7 @@ pub mod tests {
12281231
TRIGGER_VALUE,
12291232
TRIGGER_VALUE,
12301233
DUMMY_URL,
1234+
RECEIPT_LIMIT,
12311235
)
12321236
.await;
12331237

@@ -1264,6 +1268,7 @@ pub mod tests {
12641268
TRIGGER_VALUE,
12651269
TRIGGER_VALUE,
12661270
DUMMY_URL,
1271+
RECEIPT_LIMIT,
12671272
)
12681273
.await;
12691274

@@ -1309,6 +1314,60 @@ pub mod tests {
13091314
handle.await.unwrap();
13101315
}
13111316

1317+
#[sqlx::test(migrations = "../migrations")]
1318+
async fn test_counter_greater_limit_trigger_rav(pgpool: PgPool) {
1319+
let (sender_account, handle, prefix, _) = create_sender_account(
1320+
pgpool,
1321+
HashSet::new(),
1322+
TRIGGER_VALUE,
1323+
TRIGGER_VALUE,
1324+
DUMMY_URL,
1325+
1,
1326+
)
1327+
.await;
1328+
1329+
let (triggered_rav_request, _, allocation, allocation_handle) =
1330+
create_mock_sender_allocation(prefix, SENDER.1, *ALLOCATION_ID_0).await;
1331+
1332+
// create a fake sender allocation
1333+
sender_account
1334+
.cast(SenderAccountMessage::UpdateReceiptFees(
1335+
*ALLOCATION_ID_0,
1336+
ReceiptFees::NewReceipt(TRIGGER_VALUE - 1),
1337+
))
1338+
.unwrap();
1339+
1340+
tokio::time::sleep(Duration::from_millis(20)).await;
1341+
1342+
assert_eq!(
1343+
triggered_rav_request.load(std::sync::atomic::Ordering::SeqCst),
1344+
0
1345+
);
1346+
1347+
// wait for it to be outside buffer
1348+
tokio::time::sleep(Duration::from_millis(BUFFER_MS)).await;
1349+
1350+
sender_account
1351+
.cast(SenderAccountMessage::UpdateReceiptFees(
1352+
*ALLOCATION_ID_0,
1353+
ReceiptFees::Retry,
1354+
))
1355+
.unwrap();
1356+
1357+
tokio::time::sleep(Duration::from_millis(20)).await;
1358+
1359+
assert_eq!(
1360+
triggered_rav_request.load(std::sync::atomic::Ordering::SeqCst),
1361+
1
1362+
);
1363+
1364+
allocation.stop_and_wait(None, None).await.unwrap();
1365+
allocation_handle.await.unwrap();
1366+
1367+
sender_account.stop_and_wait(None, None).await.unwrap();
1368+
handle.await.unwrap();
1369+
}
1370+
13121371
#[sqlx::test(migrations = "../migrations")]
13131372
async fn test_remove_sender_account(pgpool: PgPool) {
13141373
let (sender_account, handle, prefix, _) = create_sender_account(
@@ -1317,6 +1376,7 @@ pub mod tests {
13171376
TRIGGER_VALUE,
13181377
TRIGGER_VALUE,
13191378
DUMMY_URL,
1379+
RECEIPT_LIMIT,
13201380
)
13211381
.await;
13221382

@@ -1368,6 +1428,7 @@ pub mod tests {
13681428
TRIGGER_VALUE,
13691429
TRIGGER_VALUE,
13701430
DUMMY_URL,
1431+
RECEIPT_LIMIT,
13711432
)
13721433
.await;
13731434

@@ -1386,6 +1447,7 @@ pub mod tests {
13861447
TRIGGER_VALUE,
13871448
max_unaggregated_fees_per_sender,
13881449
DUMMY_URL,
1450+
RECEIPT_LIMIT,
13891451
)
13901452
.await;
13911453

@@ -1435,6 +1497,7 @@ pub mod tests {
14351497
u128::MAX,
14361498
max_unaggregated_fees_per_sender,
14371499
DUMMY_URL,
1500+
RECEIPT_LIMIT,
14381501
)
14391502
.await;
14401503

@@ -1530,6 +1593,7 @@ pub mod tests {
15301593
TRIGGER_VALUE,
15311594
u128::MAX,
15321595
DUMMY_URL,
1596+
RECEIPT_LIMIT,
15331597
)
15341598
.await;
15351599

@@ -1563,6 +1627,7 @@ pub mod tests {
15631627
trigger_rav_request,
15641628
u128::MAX,
15651629
DUMMY_URL,
1630+
RECEIPT_LIMIT,
15661631
)
15671632
.await;
15681633

@@ -1668,6 +1733,7 @@ pub mod tests {
16681733
TRIGGER_VALUE,
16691734
u128::MAX,
16701735
&mock_server.uri(),
1736+
RECEIPT_LIMIT,
16711737
)
16721738
.await;
16731739

@@ -1721,6 +1787,7 @@ pub mod tests {
17211787
TRIGGER_VALUE,
17221788
u128::MAX,
17231789
DUMMY_URL,
1790+
RECEIPT_LIMIT,
17241791
)
17251792
.await;
17261793

@@ -1764,6 +1831,7 @@ pub mod tests {
17641831
TRIGGER_VALUE,
17651832
max_unaggregated_fees_per_sender,
17661833
DUMMY_URL,
1834+
RECEIPT_LIMIT,
17671835
)
17681836
.await;
17691837

tap-agent/src/agent/sender_fee_tracker.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ impl SenderFeeTracker {
8080
expiring_sum.sum += value;
8181
}
8282
self.total_fee += value;
83+
8384
let entry = self.id_to_fee.entry(id).or_default();
8485
entry.fee += value;
8586
entry.count += 1;

0 commit comments

Comments
 (0)