Skip to content

Commit 6622747

Browse files
benthecarmanclaude
andcommitted
Use page token to stop pagination in tests
The tests were breaking pagination loops when key_versions was empty, but a valid VSS implementation may return the final batch of results alongside an empty page token. Use the page token as the stop condition instead, which better matches the API contract. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3c4c877 commit 6622747

1 file changed

Lines changed: 20 additions & 27 deletions

File tree

rust/api/src/kv_store_tests.rs

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -395,12 +395,11 @@ pub trait KvStoreTestSuite {
395395
},
396396
};
397397

398-
if current_page.key_versions.is_empty() {
399-
break;
400-
}
401-
402398
all_key_versions.extend(current_page.key_versions);
403-
next_page_token = current_page.next_page_token;
399+
match current_page.next_page_token {
400+
Some(token) if !token.is_empty() => next_page_token = Some(token),
401+
_ => break,
402+
}
404403
}
405404

406405
if let Some(k1_response) = all_key_versions.iter().find(|kv| kv.key == "k1") {
@@ -446,13 +445,12 @@ pub trait KvStoreTestSuite {
446445
},
447446
};
448447

449-
if current_page.key_versions.is_empty() {
450-
break;
451-
}
452-
453448
assert!(current_page.key_versions.len() <= page_size as usize);
454449
all_key_versions.extend(current_page.key_versions);
455-
next_page_token = current_page.next_page_token;
450+
match current_page.next_page_token {
451+
Some(token) if !token.is_empty() => next_page_token = Some(token),
452+
_ => break,
453+
}
456454
}
457455

458456
let unique_keys: std::collections::HashSet<String> =
@@ -492,12 +490,11 @@ pub trait KvStoreTestSuite {
492490
Some(next_page_token) => ctx.list(Some(next_page_token), None, None).await?,
493491
};
494492

495-
if current_page.key_versions.is_empty() {
496-
break;
497-
}
498-
499493
all_key_versions.extend(current_page.key_versions);
500-
next_page_token = current_page.next_page_token;
494+
match current_page.next_page_token {
495+
Some(token) if !token.is_empty() => next_page_token = Some(token),
496+
_ => break,
497+
}
501498
}
502499

503500
let unique_keys: std::collections::HashSet<String> =
@@ -545,14 +542,11 @@ pub trait KvStoreTestSuite {
545542
Some(token) => ctx.list(Some(token), Some(1), Some("pfx_".to_string())).await?,
546543
};
547544

548-
if current_page.key_versions.is_empty() {
549-
assert_eq!(current_page.next_page_token, Some(String::new()));
550-
break;
551-
}
552-
553-
assert_eq!(current_page.key_versions.len(), 1);
554545
all_keys.extend(current_page.key_versions.into_iter().map(|kv| kv.key));
555-
next_page_token = current_page.next_page_token;
546+
match current_page.next_page_token {
547+
Some(token) if !token.is_empty() => next_page_token = Some(token),
548+
_ => break,
549+
}
556550
}
557551

558552
// Should get prefixed keys in reverse creation order (newest first), excluding "other".
@@ -579,16 +573,15 @@ pub trait KvStoreTestSuite {
579573
None => ctx.list(None, None, None).await?,
580574
Some(next_page_token) => ctx.list(Some(next_page_token), None, None).await?,
581575
};
582-
if current_page.key_versions.is_empty() {
583-
break;
584-
}
585-
586576
assert!(
587577
current_page.key_versions.len() < vss_arbitrary_page_size_max as usize,
588578
"Page size exceeds the maximum allowed size"
589579
);
590580
all_key_versions.extend(current_page.key_versions);
591-
next_page_token = current_page.next_page_token;
581+
match current_page.next_page_token {
582+
Some(token) if !token.is_empty() => next_page_token = Some(token),
583+
_ => break,
584+
}
592585
}
593586

594587
assert_eq!(all_key_versions.len(), total_kv_objects as usize);

0 commit comments

Comments
 (0)