Skip to content

Commit d45b8bb

Browse files
schmidt-sebastianchristibbs
authored andcommitted
Import Spec tests (#6525)
* Import Spec tests * Init * Add recovery specs * Update FSTSyncEngineTestDriver.mm
1 parent b630836 commit d45b8bb

File tree

8 files changed

+6230
-1
lines changed

8 files changed

+6230
-1
lines changed

Firestore/Example/Firestore.xcodeproj/project.pbxproj

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@
152152
21836C4D9D48F962E7A3A244 /* ordered_code_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB380D03201BC6E400D97691 /* ordered_code_test.cc */; };
153153
21A2A881F71CB825299DF06E /* hard_assert_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 444B7AB3F5A2929070CB1363 /* hard_assert_test.cc */; };
154154
21C17F15579341289AD01051 /* persistence_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9113B6F513D0473AEABBAF1F /* persistence_testing.cc */; };
155+
226574601C3F6D14DF14C16B /* recovery_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */; };
155156
227CFA0B2A01884C277E4F1D /* hashing_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 54511E8D209805F8005BD28F /* hashing_test.cc */; };
156157
229D1A9381F698D71F229471 /* string_win_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 79507DF8378D3C42F5B36268 /* string_win_test.cc */; };
157158
22A00AC39CAB3426A943E037 /* query.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = 544129D621C2DDC800EFB9CC /* query.pb.cc */; };
@@ -233,6 +234,7 @@
233234
342724CA250A65E23CB133AC /* async_queue_std_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B6FB4681208EA0BE00554BA2 /* async_queue_std_test.cc */; };
234235
3451DC1712D7BF5D288339A2 /* view_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = A5466E7809AD2871FFDE6C76 /* view_testing.cc */; };
235236
34D69886DAD4A2029BFC5C63 /* precondition_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA5520A36E1F00BCEB75 /* precondition_test.cc */; };
237+
34E866DB52AAB7DB76B69A91 /* recovery_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */; };
236238
353E47129584B8DDF10138BD /* stream_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5B5414D28802BC76FDADABD6 /* stream_test.cc */; };
237239
355A9171EF3F7AD44A9C60CB /* document_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB6B908320322E4D00CC290A /* document_test.cc */; };
238240
358DBA8B2560C65D9EB23C35 /* Pods_Firestore_IntegrationTests_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39B832380209CC5BAF93BC52 /* Pods_Firestore_IntegrationTests_macOS.framework */; };
@@ -507,6 +509,7 @@
507509
5E6F9184B271F6D5312412FF /* mutation_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = C8522DE226C467C54E6788D8 /* mutation_test.cc */; };
508510
5E7812753D960FBB373435BD /* defer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8ABAC2E0402213D837F73DC3 /* defer_test.cc */; };
509511
5E89B1A5A5430713C79C4854 /* FirestoreEncoderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1235769422B86E65007DDFA9 /* FirestoreEncoderTests.swift */; };
512+
5EA75A5DE1A705BE77BB8768 /* recovery_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */; };
510513
5ECE040F87E9FCD0A5D215DB /* pretty_printing_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB323F9553050F4F6490F9FF /* pretty_printing_test.cc */; };
511514
5EDF0D63EAD6A65D4F8CDF45 /* schedule_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9B0B005A79E765AF02793DCE /* schedule_test.cc */; };
512515
5EE21E86159A1911E9503BC1 /* transform_operation_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 33607A3AE91548BD219EC9C6 /* transform_operation_test.cc */; };
@@ -822,6 +825,7 @@
822825
AB6B908820322E8800CC290A /* no_document_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB6B908720322E8800CC290A /* no_document_test.cc */; };
823826
AB7BAB342012B519001E0872 /* geo_point_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB7BAB332012B519001E0872 /* geo_point_test.cc */; };
824827
AB8209455BAA17850D5E196D /* http.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = 618BBE9720B89AAC00B5BCE7 /* http.pb.cc */; };
828+
AB9FF792C60FC581909EF381 /* recovery_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */; };
825829
ABA495BB202B7E80008A7851 /* snapshot_version_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = ABA495B9202B7E79008A7851 /* snapshot_version_test.cc */; };
826830
ABC1D7DC2023A04B00BA84F0 /* credentials_provider_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB38D9342023966E000A432D /* credentials_provider_test.cc */; };
827831
ABC1D7DD2023A04F00BA84F0 /* empty_credentials_provider_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB38D93620239689000A432D /* empty_credentials_provider_test.cc */; };
@@ -1071,6 +1075,7 @@
10711075
E375FBA0632EFB4D14C4E5A9 /* FSTGoogleTestTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 54764FAE1FAA21B90085E60A /* FSTGoogleTestTests.mm */; };
10721076
E434ACDF63F219F3031F292E /* ConditionalConformanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3228F51DCDC2E90D5C58F97 /* ConditionalConformanceTests.swift */; };
10731077
E435450184AEB51EE8435F66 /* write.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = 544129D921C2DDC800EFB9CC /* write.pb.cc */; };
1078+
E441A53D035479C53C74A0E6 /* recovery_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */; };
10741079
E4A573B7C9227C3C24661B5B /* ordered_code_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB380D03201BC6E400D97691 /* ordered_code_test.cc */; };
10751080
E4EEF6AAFCD33303CE9E5408 /* field_value_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB356EF6200EA5EB0089B766 /* field_value_test.cc */; };
10761081
E500AB82DF2E7F3AFDB1AB3F /* to_string_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B696858D2214B53900271095 /* to_string_test.cc */; };
@@ -1089,6 +1094,7 @@
10891094
E82F8EBBC8CC37299A459E73 /* hashing_test_apple.mm in Sources */ = {isa = PBXBuildFile; fileRef = B69CF3F02227386500B281C8 /* hashing_test_apple.mm */; };
10901095
E8495A8D1E11C0844339CCA3 /* database_info_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB38D92E20235D22000A432D /* database_info_test.cc */; };
10911096
E884336B43BBD1194C17E3C4 /* status_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3CAA33F964042646FDDAF9F9 /* status_testing.cc */; };
1097+
E8BA7055EDB8B03CC99A528F /* recovery_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */; };
10921098
E9430D3EBDAE12E9016B708F /* no_document_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB6B908720322E8800CC290A /* no_document_test.cc */; };
10931099
E9B704651F9783B70F2D5E86 /* FSTUserDataConverterTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 548180A4228DEF1A004F70CD /* FSTUserDataConverterTests.mm */; };
10941100
EA38690795FBAA182A9AA63E /* FIRDatabaseTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E06C202154D500B64F25 /* FIRDatabaseTests.mm */; };
@@ -1458,7 +1464,8 @@
14581464
97C492D2524E92927C11F425 /* Pods-Firestore_FuzzTests_iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Firestore_FuzzTests_iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Firestore_FuzzTests_iOS/Pods-Firestore_FuzzTests_iOS.release.xcconfig"; sourceTree = "<group>"; };
14591465
98366480BD1FD44A1FEDD982 /* Pods-Firestore_Example_macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Firestore_Example_macOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Firestore_Example_macOS/Pods-Firestore_Example_macOS.debug.xcconfig"; sourceTree = "<group>"; };
14601466
99434327614FEFF7F7DC88EC /* counting_query_engine.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = counting_query_engine.cc; sourceTree = "<group>"; };
1461-
9B0B005A79E765AF02793DCE /* schedule_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = schedule_test.cc; sourceTree = "<group>"; };
1467+
9B0B005A79E765AF02793DCE /* schedule_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; path = schedule_test.cc; sourceTree = "<group>"; };
1468+
9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */ = {isa = PBXFileReference; includeInIndex = 1; path = recovery_spec_test.json; sourceTree = "<group>"; };
14621469
9CFD366B783AE27B9E79EE7A /* string_format_apple_test.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; path = string_format_apple_test.mm; sourceTree = "<group>"; };
14631470
A5466E7809AD2871FFDE6C76 /* view_testing.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = view_testing.cc; sourceTree = "<group>"; };
14641471
A5FA86650A18F3B7A8162287 /* Pods-Firestore_Benchmarks_iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Firestore_Benchmarks_iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Firestore_Benchmarks_iOS/Pods-Firestore_Benchmarks_iOS.release.xcconfig"; sourceTree = "<group>"; };
@@ -2352,6 +2359,7 @@
23522359
D5B2593BCB52957D62F1C9D3 /* perf_spec_test.json */,
23532360
54DA12A31F315EE100DD57A1 /* persistence_spec_test.json */,
23542361
731541602214AFFA0037F4DC /* query_spec_test.json */,
2362+
9C1AFCC9E616EC33D6E169CF /* recovery_spec_test.json */,
23552363
3B843E4A1F3930A400548890 /* remote_store_spec_test.json */,
23562364
54DA12A41F315EE100DD57A1 /* resume_token_spec_test.json */,
23572365
54DA12A51F315EE100DD57A1 /* write_spec_test.json */,
@@ -2734,6 +2742,7 @@
27342742
546877DC2248206A005E3DE0 /* perf_spec_test.json in Resources */,
27352743
546877DD2248206A005E3DE0 /* persistence_spec_test.json in Resources */,
27362744
546877DE2248206A005E3DE0 /* query_spec_test.json in Resources */,
2745+
5EA75A5DE1A705BE77BB8768 /* recovery_spec_test.json in Resources */,
27372746
546877DF2248206A005E3DE0 /* remote_store_spec_test.json in Resources */,
27382747
546877E02248206A005E3DE0 /* resume_token_spec_test.json in Resources */,
27392748
546877E12248206A005E3DE0 /* write_spec_test.json in Resources */,
@@ -2764,6 +2773,7 @@
27642773
54ACB6D0224C11F400172E69 /* perf_spec_test.json in Resources */,
27652774
54ACB6D1224C11F400172E69 /* persistence_spec_test.json in Resources */,
27662775
54ACB6D2224C11F400172E69 /* query_spec_test.json in Resources */,
2776+
226574601C3F6D14DF14C16B /* recovery_spec_test.json in Resources */,
27672777
54ACB6D3224C11F400172E69 /* remote_store_spec_test.json in Resources */,
27682778
54ACB6D4224C11F400172E69 /* resume_token_spec_test.json in Resources */,
27692779
54ACB6D5224C11F400172E69 /* write_spec_test.json in Resources */,
@@ -2785,6 +2795,7 @@
27852795
66DFEA9E324797E6EA81CBA9 /* perf_spec_test.json in Resources */,
27862796
32F8B4652010E8224E353041 /* persistence_spec_test.json in Resources */,
27872797
B0B779769926304268200015 /* query_spec_test.json in Resources */,
2798+
E8BA7055EDB8B03CC99A528F /* recovery_spec_test.json in Resources */,
27882799
E21D819A06D9691A4B313440 /* remote_store_spec_test.json in Resources */,
27892800
B43014A0517F31246419E08A /* resume_token_spec_test.json in Resources */,
27902801
9382BE7190E7750EE7CCCE7C /* write_spec_test.json in Resources */,
@@ -2806,6 +2817,7 @@
28062817
ABFD599019CF312CFF96B3EC /* perf_spec_test.json in Resources */,
28072818
D143FBD057481C1A59B27E5E /* persistence_spec_test.json in Resources */,
28082819
4CDFF1AE3D639AA89C5C4411 /* query_spec_test.json in Resources */,
2820+
34E866DB52AAB7DB76B69A91 /* recovery_spec_test.json in Resources */,
28092821
AF81B6A91987826426F18647 /* remote_store_spec_test.json in Resources */,
28102822
CC94A33318F983907E9ED509 /* resume_token_spec_test.json in Resources */,
28112823
2DB56B6DED2C93014AE5C51A /* write_spec_test.json in Resources */,
@@ -2845,6 +2857,7 @@
28452857
D5B25CBF07F65E885C9D68AB /* perf_spec_test.json in Resources */,
28462858
54DA12AD1F315EE100DD57A1 /* persistence_spec_test.json in Resources */,
28472859
731541612214AFFA0037F4DC /* query_spec_test.json in Resources */,
2860+
AB9FF792C60FC581909EF381 /* recovery_spec_test.json in Resources */,
28482861
3B843E4C1F3A182900548890 /* remote_store_spec_test.json in Resources */,
28492862
54DA12AE1F315EE100DD57A1 /* resume_token_spec_test.json in Resources */,
28502863
54DA12AF1F315EE100DD57A1 /* write_spec_test.json in Resources */,
@@ -2884,6 +2897,7 @@
28842897
CFCDC4670C61E034021F400B /* perf_spec_test.json in Resources */,
28852898
45FF545C6421398E9E1D647E /* persistence_spec_test.json in Resources */,
28862899
7AA8771FE1F048D012E5E317 /* query_spec_test.json in Resources */,
2900+
E441A53D035479C53C74A0E6 /* recovery_spec_test.json in Resources */,
28872901
022BA1619A576F6818B212C5 /* remote_store_spec_test.json in Resources */,
28882902
9EE81B1FB9B7C664B7B0A904 /* resume_token_spec_test.json in Resources */,
28892903
E6688C8E524770A3C6EBB33A /* write_spec_test.json in Resources */,

Firestore/Example/Tests/SpecTests/FSTSpecTests.mm

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,10 @@ - (void)doDelete:(NSString *)key {
353353
[self.driver writeUserMutation:FSTTestDeleteMutation(key)];
354354
}
355355

356+
- (void)doWaitForPendingWrites {
357+
[self.driver waitForPendingWrites];
358+
}
359+
356360
- (void)doAddSnapshotsInSyncListener {
357361
[self.driver addSnapshotsInSyncListener];
358362
}
@@ -593,6 +597,8 @@ - (void)doStep:(NSDictionary *)step {
593597
[self doWriteAck:step[@"writeAck"]];
594598
} else if (step[@"failWrite"]) {
595599
[self doFailWrite:step[@"failWrite"]];
600+
} else if (step[@"waitForPendingWrites"]) {
601+
[self doWaitForPendingWrites];
596602
} else if (step[@"runTimer"]) {
597603
[self doRunTimer:step[@"runTimer"]];
598604
} else if (step[@"enableNetwork"]) {
@@ -756,6 +762,11 @@ - (void)validateExpectedState:(nullable NSDictionary *)expectedState {
756762
[self validateActiveTargets];
757763
}
758764

765+
- (void)validateWaitForPendingWritesEvents:(int)expectedWaitForPendingWritesEvents {
766+
XCTAssertEqual(expectedWaitForPendingWritesEvents, [self.driver waitForPendingWritesEvents]);
767+
[self.driver resetWaitForPendingWritesEvents];
768+
}
769+
759770
- (void)validateSnapshotsInSyncEvents:(int)expectedSnapshotInSyncEvents {
760771
XCTAssertEqual(expectedSnapshotInSyncEvents, [self.driver snapshotsInSyncEvents]);
761772
[self.driver resetSnapshotsInSyncEvents];
@@ -869,6 +880,9 @@ - (void)runSpecTestSteps:(NSArray *)steps config:(NSDictionary *)config {
869880
[self validateExpectedState:step[@"expectedState"]];
870881
int expectedSnapshotsInSyncEvents = [step[@"expectedSnapshotsInSyncEvents"] intValue];
871882
[self validateSnapshotsInSyncEvents:expectedSnapshotsInSyncEvents];
883+
int expectedWaitForPendingWritesEvents =
884+
[step[@"expectedWaitForPendingWritesEvents"] intValue];
885+
[self validateWaitForPendingWritesEvents:expectedWaitForPendingWritesEvents];
872886
}
873887
[self.driver validateUsage];
874888
} @finally {

Firestore/Example/Tests/SpecTests/FSTSyncEngineTestDriver.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,20 @@ typedef std::unordered_map<auth::User, NSMutableArray<FSTOutstandingWrite *> *,
324324
/** The current user for the FSTSyncEngine; determines which mutation queue is active. */
325325
@property(nonatomic, assign, readonly) const auth::User &currentUser;
326326

327+
/**
328+
* The number of waitForPendingWrites events that have been received.
329+
*/
330+
@property(nonatomic, readonly) int waitForPendingWritesEvents;
331+
332+
- (void)incrementWaitForPendingWritesEvents;
333+
334+
- (void)resetWaitForPendingWritesEvents;
335+
336+
/**
337+
* Register a new waitForPendingWrites() callback.
338+
*/
339+
- (void)waitForPendingWrites;
340+
327341
/**
328342
* The number of snapshots-in-sync events that have been received.
329343
*/

Firestore/Example/Tests/SpecTests/FSTSyncEngineTestDriver.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ @implementation FSTSyncEngineTestDriver {
195195
IndexFreeQueryEngine _queryEngine;
196196

197197
int _snapshotsInSyncEvents;
198+
int _waitForPendingWritesEvents;
198199
}
199200

200201
- (instancetype)initWithPersistence:(std::unique_ptr<Persistence>)persistence
@@ -284,6 +285,19 @@ - (void)resetSnapshotsInSyncEvents {
284285
_snapshotsInSyncEvents = 0;
285286
}
286287

288+
- (void)incrementWaitForPendingWritesEvents {
289+
_waitForPendingWritesEvents += 1;
290+
}
291+
292+
- (void)resetWaitForPendingWritesEvents {
293+
_waitForPendingWritesEvents = 0;
294+
}
295+
296+
- (void)waitForPendingWrites {
297+
_syncEngine->RegisterPendingWritesCallback(
298+
[self](const Status &) { [self incrementWaitForPendingWritesEvents]; });
299+
}
300+
287301
- (void)addSnapshotsInSyncListener {
288302
std::shared_ptr<EventListener<Empty>> eventListener = EventListener<Empty>::Create(
289303
[self](const StatusOr<Empty> &) { [self incrementSnapshotsInSyncEvents]; });
@@ -300,6 +314,10 @@ - (void)removeSnapshotsInSyncListener {
300314
}
301315
}
302316

317+
- (int)waitForPendingWritesEvents {
318+
return _waitForPendingWritesEvents;
319+
}
320+
303321
- (int)snapshotsInSyncEvents {
304322
return _snapshotsInSyncEvents;
305323
}

0 commit comments

Comments
 (0)