Skip to content

Commit 0f05b97

Browse files
ldanilekConvex, Inc.
authored andcommitted
TestIdGenerator differentiate system from user id (#25660)
quick refactor to prepare for a world where user document IDs have different namespacing from system document IDs. GitOrigin-RevId: 4b3f716a3510c089adf15aeedfa3cad8d7ad9a22
1 parent 42ef9da commit 0f05b97

File tree

19 files changed

+191
-162
lines changed

19 files changed

+191
-162
lines changed

crates/common/src/schemas/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ mod tables_to_revalidate {
943943
#[test]
944944
fn test_skips_validation_from_ids_in_shapes() -> anyhow::Result<()> {
945945
let mut id_generator = TestIdGenerator::new();
946-
let dog_id: ResolvedDocumentId = id_generator.generate(&"dogs".parse()?);
946+
let dog_id: ResolvedDocumentId = id_generator.user_generate(&"dogs".parse()?);
947947
let document_with_id = assert_val!({"field" => dog_id});
948948
let shape = CountedShape::<TestConfig>::empty().insert_value(&document_with_id);
949949

@@ -1001,7 +1001,7 @@ mod tables_to_revalidate {
10011001
#[test]
10021002
fn test_skips_validation_from_ids_in_type() -> anyhow::Result<()> {
10031003
let mut id_generator = TestIdGenerator::new();
1004-
let dog_id: ResolvedDocumentId = id_generator.generate(&"dogs".parse()?);
1004+
let dog_id: ResolvedDocumentId = id_generator.user_generate(&"dogs".parse()?);
10051005
let shape = CountedShape::<TestConfig>::empty().insert_value(&dog_id.into());
10061006
assert!(
10071007
Validator::from_type(&shape, &id_generator, &VirtualTableMapping::new())

crates/common/src/schemas/validator.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,7 +1195,7 @@ mod tests {
11951195
#[test]
11961196
fn test_check_value(v in any_with::<DocumentSchema>(btreeset! { "table_name".parse::<TableName>().unwrap(), "table_name_2".parse::<TableName>().unwrap()}, )) {
11971197
let mut id_generator = TestIdGenerator::new();
1198-
id_generator.generate(&"table_name".parse().unwrap());
1198+
id_generator.user_generate(&"table_name".parse().unwrap());
11991199
id_generator.generate_virtual(&"table_name_2".parse().unwrap());
12001200
// Test that `check_value` succeeds for objects created from arbitrary document schemas.
12011201
let object = object_from_schema(v.clone(), &id_generator).unwrap();
@@ -1336,8 +1336,8 @@ mod tests {
13361336
}
13371337
);
13381338

1339-
let user_id1 = id_generator.generate(&table_name);
1340-
let user_id2 = id_generator.generate(&table_name);
1339+
let user_id1 = id_generator.user_generate(&table_name);
1340+
let user_id2 = id_generator.user_generate(&table_name);
13411341

13421342
let value_wrong_key: ConvexValue = assert_obj!(
13431343
user_id1.to_string() => ConvexValue::Float64(0.0),
@@ -1513,8 +1513,8 @@ mod tests {
15131513
let mut id_generator = TestIdGenerator::new();
15141514

15151515
// generate an ID so it's in the table mapping
1516-
id_generator.generate(&table1);
1517-
let document_id = id_generator.generate(&table2);
1516+
id_generator.user_generate(&table1);
1517+
let document_id = id_generator.user_generate(&table2);
15181518
let id_v6 = DeveloperDocumentId::from(document_id);
15191519
let value: ConvexValue = id_v6.into();
15201520

@@ -1541,7 +1541,7 @@ mod tests {
15411541
let mut id_generator = TestIdGenerator::new();
15421542

15431543
// generate an ID so it's in the table mapping
1544-
id_generator.generate(&table1);
1544+
id_generator.user_generate(&table1);
15451545
let id_v6 = id_generator.generate_virtual(&table2);
15461546
let value: ConvexValue = id_v6.into();
15471547

crates/common/src/shapes/dashboard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ mod tests {
229229
#[test]
230230
fn test_shape_roundtrips() -> anyhow::Result<()> {
231231
let mut id_generator = TestIdGenerator::new();
232-
let table_id = id_generator.table_id(&"test".parse()?).table_number;
232+
let table_id = id_generator.user_table_id(&"test".parse()?).table_number;
233233
let shapes = vec![
234234
ReducedShape::Unknown,
235235
ReducedShape::Never,

crates/common/src/shapes/tests.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,12 @@ fn test_id_strings() -> anyhow::Result<()> {
9090

9191
// Create three IDs from three different tables
9292
let message_id: DeveloperDocumentId = id_generator
93-
.generate(&TableName::from_str("messages")?)
93+
.user_generate(&TableName::from_str("messages")?)
9494
.into();
9595
let deleted1_table = TableName::from_str("deleted1")?;
9696
let deleted2_table = TableName::from_str("deleted2")?;
97-
let deleted1_id: DeveloperDocumentId = id_generator.generate(&deleted1_table).into();
98-
let deleted2_id: DeveloperDocumentId = id_generator.generate(&deleted2_table).into();
97+
let deleted1_id: DeveloperDocumentId = id_generator.user_generate(&deleted1_table).into();
98+
let deleted2_id: DeveloperDocumentId = id_generator.user_generate(&deleted2_table).into();
9999

100100
// Delete two of the tables
101101
let deleted1_table_id = id_generator.id(&deleted1_table)?;

crates/common/src/testing/persistence_test_suite.rs

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,11 @@ macro_rules! run_persistence_test_suite {
228228
pub async fn write_and_load_from_table<P: Persistence>(p: Arc<P>) -> anyhow::Result<()> {
229229
let mut id_generator = TestIdGenerator::new();
230230
let table1: TableName = str::parse("table1")?;
231-
let doc_id1 = id_generator.generate(&table1);
231+
let doc_id1 = id_generator.user_generate(&table1);
232232
let doc1 = ResolvedDocument::new(doc_id1, CreationTime::ONE, ConvexObject::empty())?;
233233

234234
let table2: TableName = str::parse("table2")?;
235-
let doc_id2 = id_generator.generate(&table2);
235+
let doc_id2 = id_generator.user_generate(&table2);
236236
let doc2 = ResolvedDocument::new(doc_id2, CreationTime::ONE, ConvexObject::empty())?;
237237

238238
p.write(
@@ -339,7 +339,7 @@ pub async fn write_and_load_from_table<P: Persistence>(p: Arc<P>) -> anyhow::Res
339339
pub async fn write_and_load<P: Persistence>(p: Arc<P>) -> anyhow::Result<()> {
340340
let mut id_generator = TestIdGenerator::new();
341341
let table: TableName = str::parse("table")?;
342-
let doc_id = id_generator.generate(&table);
342+
let doc_id = id_generator.user_generate(&table);
343343

344344
let doc = ResolvedDocument::new(doc_id, CreationTime::ONE, ConvexObject::empty())?;
345345

@@ -419,7 +419,7 @@ pub async fn write_and_load_value_types<P: Persistence>(p: Arc<P>) -> anyhow::Re
419419
let table: TableName = str::parse("table")?;
420420
let mut next_ts = Timestamp::MIN;
421421
let new_doc = |value| {
422-
let id = id_generator.generate(&table);
422+
let id = id_generator.user_generate(&table);
423423
let doc = ResolvedDocument::new(id, CreationTime::ONE, assert_obj!("field" => value))?;
424424
let r = (next_ts, doc.id_with_table_id(), Some(doc));
425425
next_ts = next_ts.succ()?;
@@ -471,7 +471,7 @@ pub async fn write_and_load_value_types<P: Persistence>(p: Arc<P>) -> anyhow::Re
471471
pub async fn overwrite_document<P: Persistence>(p: Arc<P>) -> anyhow::Result<()> {
472472
let mut id_generator = TestIdGenerator::new();
473473
let table: TableName = str::parse("table")?;
474-
let doc_id = id_generator.generate(&table);
474+
let doc_id = id_generator.user_generate(&table);
475475

476476
let doc = ResolvedDocument::new(doc_id, CreationTime::ONE, ConvexObject::empty())?;
477477

@@ -524,10 +524,10 @@ pub async fn overwrite_document<P: Persistence>(p: Arc<P>) -> anyhow::Result<()>
524524

525525
pub async fn overwrite_index<P: Persistence>(p: Arc<P>) -> anyhow::Result<()> {
526526
let mut id_generator = TestIdGenerator::new();
527-
let index_id = id_generator.generate(&INDEX_TABLE);
527+
let index_id = id_generator.system_generate(&INDEX_TABLE);
528528
let ts = Timestamp::must(1);
529529
let table: TableName = str::parse("table")?;
530-
let doc_id = id_generator.generate(&table);
530+
let doc_id = id_generator.user_generate(&table);
531531
let tablet_id = doc_id.table().tablet_id;
532532
let value = val!(testing::generate::<Vec<u8>>());
533533

@@ -648,8 +648,8 @@ pub async fn write_and_load_sorting<P: Persistence>(p: Arc<P>) -> anyhow::Result
648648
let table2: TableName = str::parse("table2")?;
649649
let mut id_generator = TestIdGenerator::new();
650650

651-
let doc_id1 = id_generator.generate(&table1);
652-
let doc_id2 = id_generator.generate(&table2);
651+
let doc_id1 = id_generator.user_generate(&table1);
652+
let doc_id2 = id_generator.user_generate(&table2);
653653

654654
let doc1 = ResolvedDocument::new(doc_id1, CreationTime::ONE, ConvexObject::empty())?;
655655
let doc2 = ResolvedDocument::new(doc_id2, CreationTime::ONE, ConvexObject::empty())?;
@@ -696,8 +696,8 @@ pub async fn same_internal_id_multiple_tables<P: Persistence>(p: Arc<P>) -> anyh
696696
// Create two documents with the same internal_id but in two different tables.
697697
let internal_id = id_generator.generate_internal();
698698

699-
let table1_id = id_generator.table_id(&str::parse("table1")?);
700-
let table2_id = id_generator.table_id(&str::parse("table2")?);
699+
let table1_id = id_generator.user_table_id(&str::parse("table1")?);
700+
let table2_id = id_generator.user_table_id(&str::parse("table2")?);
701701

702702
let doc1 = ResolvedDocument::new(
703703
ResolvedDocumentId::new(table1_id, internal_id),
@@ -712,8 +712,8 @@ pub async fn same_internal_id_multiple_tables<P: Persistence>(p: Arc<P>) -> anyh
712712

713713
// Have an index pointing to each document.
714714
let index_fields: IndexedFields = vec!["value".parse()?].try_into()?;
715-
let index1_id = id_generator.generate(&INDEX_TABLE).internal_id();
716-
let index2_id = id_generator.generate(&INDEX_TABLE).internal_id();
715+
let index1_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
716+
let index2_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
717717

718718
let ts = Timestamp::must(1000);
719719
p.write(
@@ -793,10 +793,10 @@ pub async fn same_internal_id_multiple_tables<P: Persistence>(p: Arc<P>) -> anyh
793793

794794
pub async fn query_index_at_ts<P: Persistence>(p: Arc<P>) -> anyhow::Result<()> {
795795
let mut id_generator = TestIdGenerator::new();
796-
let index_id = id_generator.generate(&INDEX_TABLE).internal_id();
796+
let index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
797797

798798
let table: TableName = str::parse("table")?;
799-
let doc_id = id_generator.generate(&table);
799+
let doc_id = id_generator.user_generate(&table);
800800
let tablet_id = doc_id.table().tablet_id;
801801

802802
let mut ts_to_value: BTreeMap<Timestamp, ConvexValue> = BTreeMap::new();
@@ -877,10 +877,10 @@ pub async fn query_index_range_with_prefix<P: Persistence>(
877877
prefix: Vec<u8>,
878878
) -> anyhow::Result<()> {
879879
let mut id_generator = TestIdGenerator::new();
880-
let index_id = id_generator.generate(&INDEX_TABLE).internal_id();
880+
let index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
881881

882882
let table: TableName = str::parse("table")?;
883-
let tablet_id = id_generator.table_id(&table).tablet_id;
883+
let tablet_id = id_generator.user_table_id(&table).tablet_id;
884884
let fields: IndexedFields = vec!["value".parse()?].try_into()?;
885885
let ts = Timestamp::must(1702);
886886

@@ -893,7 +893,7 @@ pub async fn query_index_range_with_prefix<P: Persistence>(
893893
value.extend(testing::generate::<Vec<u8>>());
894894
let value: ConvexValue = value.try_into()?;
895895

896-
let doc_id = id_generator.generate(&table);
896+
let doc_id = id_generator.user_generate(&table);
897897
let doc = ResolvedDocument::new(doc_id, CreationTime::ONE, assert_obj!("value" => value))?;
898898
documents.push((ts, doc.id_with_table_id(), Some(doc.clone())));
899899
let key = doc.index_key(&fields, p.reader().version());
@@ -980,16 +980,16 @@ pub async fn query_multiple_indexes<P: Persistence>(p: Arc<P>) -> anyhow::Result
980980
let ts = Timestamp::must(1702);
981981

982982
let mut id_generator = TestIdGenerator::new();
983-
let tablet_id = id_generator.table_id(&table).tablet_id;
983+
let tablet_id = id_generator.user_table_id(&table).tablet_id;
984984
let mut documents = Vec::new();
985985
let mut indexes = BTreeSet::new();
986986
let mut index_to_results: BTreeMap<_, Vec<_>> = BTreeMap::new();
987987
for i in 0..5 {
988-
let index_id = id_generator.generate(&INDEX_TABLE).internal_id();
988+
let index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
989989
let fields: IndexedFields = vec![format!("value_{}", i).parse()?].try_into()?;
990990

991991
for j in 0..5 {
992-
let doc_id = id_generator.generate(&table);
992+
let doc_id = id_generator.user_generate(&table);
993993
let doc = ResolvedDocument::new(
994994
doc_id,
995995
CreationTime::ONE,
@@ -1049,12 +1049,12 @@ pub async fn query_dangling_reference<P: Persistence>(p: Arc<P>) -> anyhow::Resu
10491049
let ts = Timestamp::must(1702);
10501050
let mut id_generator = TestIdGenerator::new();
10511051

1052-
let tablet_id = id_generator.table_id(&table).tablet_id;
1052+
let tablet_id = id_generator.user_table_id(&table).tablet_id;
10531053

1054-
let index_id = id_generator.generate(&INDEX_TABLE).internal_id();
1054+
let index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
10551055

10561056
let index_fields: IndexedFields = vec!["value".parse()?].try_into()?;
1057-
let doc_id = id_generator.generate(&table);
1057+
let doc_id = id_generator.user_generate(&table);
10581058
let document = ResolvedDocument::new(doc_id, CreationTime::ONE, assert_obj!("value" => 20))?;
10591059
let index_update = DatabaseIndexUpdate {
10601060
index_id,
@@ -1099,11 +1099,11 @@ pub async fn query_reference_deleted_doc<P: Persistence>(p: Arc<P>) -> anyhow::R
10991099

11001100
let mut id_generator = TestIdGenerator::new();
11011101

1102-
let tablet_id = id_generator.table_id(&table).tablet_id;
1103-
let index_id = id_generator.generate(&INDEX_TABLE).internal_id();
1102+
let tablet_id = id_generator.user_table_id(&table).tablet_id;
1103+
let index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
11041104

11051105
let index_fields: IndexedFields = vec!["value".parse()?].try_into()?;
1106-
let doc_id = id_generator.generate(&table);
1106+
let doc_id = id_generator.user_generate(&table);
11071107
let document = ResolvedDocument::new(doc_id, CreationTime::ONE, assert_obj!("value" => 20))?;
11081108
let index_update = DatabaseIndexUpdate {
11091109
index_id,
@@ -1149,13 +1149,13 @@ pub async fn query_with_rows_estimate_with_prefix<P: Persistence>(
11491149
let ts = Timestamp::must(1702);
11501150

11511151
let mut id_generator = TestIdGenerator::new();
1152-
let index_id = id_generator.generate(&INDEX_TABLE).internal_id();
1153-
let tablet_id = id_generator.table_id(&table).tablet_id;
1152+
let index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
1153+
let tablet_id = id_generator.user_table_id(&table).tablet_id;
11541154

11551155
let index_fields: IndexedFields = vec!["value".parse()?].try_into()?;
11561156
let mut documents = Vec::new();
11571157
for i in 0..99 {
1158-
let doc_id = id_generator.generate(&table);
1158+
let doc_id = id_generator.user_generate(&table);
11591159

11601160
let mut value = prefix.clone();
11611161
value.push(i as u8);
@@ -1220,7 +1220,7 @@ where
12201220
let p_write = make_p().await?;
12211221
let table: TableName = str::parse("table")?;
12221222
let mut id_generator = TestIdGenerator::new();
1223-
let doc_id = id_generator.generate(&table);
1223+
let doc_id = id_generator.user_generate(&table);
12241224

12251225
let doc = ResolvedDocument::new(doc_id, CreationTime::ONE, ConvexObject::empty())?;
12261226

@@ -1273,7 +1273,7 @@ where
12731273
let p_backend1 = make_p().await?;
12741274
let table: TableName = str::parse("table")?;
12751275
let mut id_generator = TestIdGenerator::new();
1276-
let doc_id = id_generator.generate(&table);
1276+
let doc_id = id_generator.user_generate(&table);
12771277

12781278
let doc = ResolvedDocument::new(doc_id, CreationTime::ONE, ConvexObject::empty())?;
12791279

@@ -1353,10 +1353,10 @@ pub fn doc(
13531353

13541354
pub async fn persistence_enforce_retention<P: Persistence>(p: Arc<P>) -> anyhow::Result<()> {
13551355
let mut id_generator = TestIdGenerator::new();
1356-
let by_id_index_id = id_generator.generate(&INDEX_TABLE).internal_id();
1357-
let by_val_index_id = id_generator.generate(&INDEX_TABLE).internal_id();
1356+
let by_id_index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
1357+
let by_val_index_id = id_generator.system_generate(&INDEX_TABLE).internal_id();
13581358
let table: TableName = str::parse("table")?;
1359-
let tablet_id = id_generator.table_id(&table).tablet_id;
1359+
let tablet_id = id_generator.user_table_id(&table).tablet_id;
13601360

13611361
let by_id = |id: ResolvedDocumentId,
13621362
ts: i32,
@@ -1399,11 +1399,11 @@ pub async fn persistence_enforce_retention<P: Persistence>(p: Arc<P>) -> anyhow:
13991399
))
14001400
};
14011401

1402-
let id1 = id_generator.generate(&table);
1403-
let id2 = id_generator.generate(&table);
1404-
let id3 = id_generator.generate(&table);
1405-
let id4 = id_generator.generate(&table);
1406-
let id5 = id_generator.generate(&table);
1402+
let id1 = id_generator.user_generate(&table);
1403+
let id2 = id_generator.user_generate(&table);
1404+
let id3 = id_generator.user_generate(&table);
1405+
let id4 = id_generator.user_generate(&table);
1406+
let id5 = id_generator.user_generate(&table);
14071407

14081408
let documents = vec![
14091409
doc(id1, 1, Some(5))?, // expired because overwritten.
@@ -1525,16 +1525,16 @@ pub async fn persistence_delete_documents<P: Persistence>(p: Arc<P>) -> anyhow::
15251525
let mut id_generator = TestIdGenerator::new();
15261526
let table: TableName = str::parse("table")?;
15271527

1528-
let id1 = id_generator.generate(&table);
1529-
let id2 = id_generator.generate(&table);
1530-
let id3 = id_generator.generate(&table);
1531-
let id4 = id_generator.generate(&table);
1532-
let id5 = id_generator.generate(&table);
1533-
let id6 = id_generator.generate(&table);
1534-
let id7 = id_generator.generate(&table);
1535-
let id8 = id_generator.generate(&table);
1536-
let id9 = id_generator.generate(&table);
1537-
let id10 = id_generator.generate(&table);
1528+
let id1 = id_generator.user_generate(&table);
1529+
let id2 = id_generator.user_generate(&table);
1530+
let id3 = id_generator.user_generate(&table);
1531+
let id4 = id_generator.user_generate(&table);
1532+
let id5 = id_generator.user_generate(&table);
1533+
let id6 = id_generator.user_generate(&table);
1534+
let id7 = id_generator.user_generate(&table);
1535+
let id8 = id_generator.user_generate(&table);
1536+
let id9 = id_generator.user_generate(&table);
1537+
let id10 = id_generator.user_generate(&table);
15381538

15391539
let documents = vec![
15401540
doc(id1, 1, Some(1))?,
@@ -1586,18 +1586,18 @@ pub async fn persistence_previous_revisions<P: Persistence>(p: Arc<P>) -> anyhow
15861586

15871587
let table: TableName = str::parse("table")?;
15881588
let mut id_generator = TestIdGenerator::new();
1589-
let id1 = id_generator.generate(&table);
1590-
let id2 = id_generator.generate(&table);
1591-
let id3 = id_generator.generate(&table);
1592-
let id4 = id_generator.generate(&table);
1593-
let id5 = id_generator.generate(&table);
1594-
let id6 = id_generator.generate(&table);
1595-
let id7 = id_generator.generate(&table);
1596-
let id8 = id_generator.generate(&table);
1597-
let id9 = id_generator.generate(&table);
1598-
let id10 = id_generator.generate(&table);
1599-
let id11 = id_generator.generate(&table);
1600-
let id12 = id_generator.generate(&table);
1589+
let id1 = id_generator.user_generate(&table);
1590+
let id2 = id_generator.user_generate(&table);
1591+
let id3 = id_generator.user_generate(&table);
1592+
let id4 = id_generator.user_generate(&table);
1593+
let id5 = id_generator.user_generate(&table);
1594+
let id6 = id_generator.user_generate(&table);
1595+
let id7 = id_generator.user_generate(&table);
1596+
let id8 = id_generator.user_generate(&table);
1597+
let id9 = id_generator.user_generate(&table);
1598+
let id10 = id_generator.user_generate(&table);
1599+
let id11 = id_generator.user_generate(&table);
1600+
let id12 = id_generator.user_generate(&table);
16011601

16021602
let doc = |id: ResolvedDocumentId| {
16031603
ResolvedDocument::new(id, CreationTime::ONE, assert_obj!("field" => id)).unwrap()

0 commit comments

Comments
 (0)