Skip to content

Commit 971445c

Browse files
authored
Add cross-platform support for creating Executors (#3897)
* Add Executor::CreateSerial ... a standard way to create an Executor for most cases where we don't care about the implementation. * Add ExecutorForTesting/AsyncQueueForTesting Uses Executor::CreateSerial to do the heavy lifting. * Use AsyncQueueForTesting * Avoid direct references to ExecutorLibdispatch in prod code * Rewrite time_testing in terms of absl::Time * Migrate async_test_util's now to time_testing * Fix AddressSanitizer stack-buffer-underflow error This was reading random data off the stack until it hit a negative integer's worth of data. The test passed because this was generating the input and expected values, which were much longer than expected given the input.
1 parent b389b8b commit 971445c

28 files changed

+231
-103
lines changed

Firestore/Example/Firestore.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
08839E1CEAAC07E350257E9D /* collection_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 54DA129C1F315EE100DD57A1 /* collection_spec_test.json */; };
4646
08A9C531265B5E4C5367346E /* cc_compilation_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1B342370EAE3AA02393E33EB /* cc_compilation_test.cc */; };
4747
08D853C9D3A4DC919C55671A /* comparison_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 548DB928200D59F600E00ABC /* comparison_test.cc */; };
48+
08E3D48B3651E4908D75B23A /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
4849
08F44F7DF9A3EF0D35C8FB57 /* FIRNumericTransformTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = D5B25E7E7D6873CBA4571841 /* FIRNumericTransformTests.mm */; };
4950
08FA4102AD14452E9587A1F2 /* leveldb_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 332485C4DCC6BA0DBB5E31B7 /* leveldb_util_test.cc */; };
5051
0963F6D7B0F9AE1E24B82866 /* path_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 403DBF6EFB541DFD01582AA3 /* path_test.cc */; };
@@ -74,6 +75,7 @@
7475
10CA552415BE0954221A1626 /* FSTLRUGarbageCollectorTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CC9650220A0E93200A2D6A1 /* FSTLRUGarbageCollectorTests.mm */; };
7576
1115DB1F1DCE93B63E03BA8C /* comparison_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 548DB928200D59F600E00ABC /* comparison_test.cc */; };
7677
113190791F42202FDE1ABC14 /* FIRQuerySnapshotTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E04F202154AA00B64F25 /* FIRQuerySnapshotTests.mm */; };
78+
11BC867491A6631D37DE56A8 /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
7779
11CFC7F545012C246B3484FD /* FSTLevelDBMigrationsTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E0862021552A00B64F25 /* FSTLevelDBMigrationsTests.mm */; };
7880
11F8EE69182C9699E90A9E3D /* database_info_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB38D92E20235D22000A432D /* database_info_test.cc */; };
7981
12158DFCEE09D24B7988A340 /* maybe_document.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = 618BBE7E20B89AAC00B5BCE7 /* maybe_document.pb.cc */; };
@@ -184,6 +186,7 @@
184186
2BA71CDFB97B8F854F5E7AD7 /* field_transform_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 54A0352320A3AEC3003E0143 /* field_transform_test.mm */; };
185187
2BBFAD893295881057E6C1FD /* FSTMockDatastore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E02D20213FFC00B64F25 /* FSTMockDatastore.mm */; };
186188
2BCFA42FEA5657A17C5439B3 /* FSTQueryListenerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E05D202154B900B64F25 /* FSTQueryListenerTests.mm */; };
189+
2C5E4D9FDE7615AD0F63909E /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
187190
2C66492A0099ED7C8B6CDEC6 /* FSTLevelDBRemoteDocumentCacheTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E0922021552B00B64F25 /* FSTLevelDBRemoteDocumentCacheTests.mm */; };
188191
2CD379584D1D35AAEA271D21 /* sorted_map_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA4E20A36DBB00BCEB75 /* sorted_map_test.cc */; };
189192
2D220B9ABFA36CD7AC43D0A7 /* time_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5497CB76229DECDE000FB92F /* time_testing.cc */; };
@@ -219,6 +222,7 @@
219222
34D69886DAD4A2029BFC5C63 /* precondition_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA5520A36E1F00BCEB75 /* precondition_test.cc */; };
220223
355A9171EF3F7AD44A9C60CB /* document_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB6B908320322E4D00CC290A /* document_test.cc */; };
221224
358DBA8B2560C65D9EB23C35 /* Pods_Firestore_IntegrationTests_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39B832380209CC5BAF93BC52 /* Pods_Firestore_IntegrationTests_macOS.framework */; };
225+
35C330499D50AC415B24C580 /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
222226
36E174A66C323891AEA16A2A /* FIRTimestampTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B65D34A7203C99090076A5E1 /* FIRTimestampTest.m */; };
223227
36FD4CE79613D18BC783C55B /* string_apple_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0EE5300F8233D14025EF0456 /* string_apple_test.mm */; };
224228
37282216FF1CF33E15B3D363 /* stream_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = B66D8995213609EE0086DA0C /* stream_test.mm */; };
@@ -842,6 +846,7 @@
842846
B1BD0A7EC48C7B7AF09437D5 /* FSTLocalStoreTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E0832021552A00B64F25 /* FSTLocalStoreTests.mm */; };
843847
B220E091D8F4E6DE1EA44F57 /* executor_libdispatch_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = B6FB4689208F9B9100554BA2 /* executor_libdispatch_test.mm */; };
844848
B235E260EA0DCB7BAC04F69B /* field_path_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B686F2AD2023DDB20028D6BE /* field_path_test.cc */; };
849+
B28ACC69EB1F232AE612E77B /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
845850
B371628DA91E80B64AE53085 /* FIRFieldPathTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E04C202154AA00B64F25 /* FIRFieldPathTests.mm */; };
846851
B3A309CCF5D75A555C7196E1 /* path_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 403DBF6EFB541DFD01582AA3 /* path_test.cc */; };
847852
B3B8608727430210C4405AC0 /* FSTMemorySpecTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E02F20213FFC00B64F25 /* FSTMemorySpecTests.mm */; };
@@ -1102,6 +1107,7 @@
11021107
F66650439F7B638789EFB810 /* memory_index_manager_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 73F1F7392210F3D800E1F692 /* memory_index_manager_test.mm */; };
11031108
F72DF72447EA7AB9D100816A /* FSTHelpers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E03A2021401F00B64F25 /* FSTHelpers.mm */; };
11041109
F731A0CCD0220B370BC1BE8B /* BasicCompileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE0761F61F2FE68D003233AF /* BasicCompileTests.swift */; };
1110+
F73471529D36DD48ABD8AAE8 /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
11051111
F74AA9DA46B7B2820B5AC79F /* FSTMemoryMutationQueueTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E0972021552C00B64F25 /* FSTMemoryMutationQueueTests.mm */; };
11061112
F7718C43D3A8FCCDB4BB0071 /* geo_point_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB7BAB332012B519001E0872 /* geo_point_test.cc */; };
11071113
F8038FD17F7CDB7C6510D8DB /* watch_change_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD9224E7AB303B920105EF13 /* watch_change_test.mm */; };
@@ -1376,6 +1382,7 @@
13761382
6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
13771383
6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = "<group>"; };
13781384
6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1385+
600A7D7D821CE84E0CA8CB89 /* async_testing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = async_testing.h; sourceTree = "<group>"; };
13791386
6161B5012047140400A99DBB /* FIRFirestoreSourceTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FIRFirestoreSourceTests.mm; sourceTree = "<group>"; };
13801387
618BBE7D20B89AAC00B5BCE7 /* target.pb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = target.pb.cc; sourceTree = "<group>"; };
13811388
618BBE7E20B89AAC00B5BCE7 /* maybe_document.pb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maybe_document.pb.cc; sourceTree = "<group>"; };
@@ -1417,6 +1424,7 @@
14171424
79507DF8378D3C42F5B36268 /* string_win_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = string_win_test.cc; sourceTree = "<group>"; };
14181425
7B65C996438B84DBC7616640 /* CodableTimestampTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CodableTimestampTests.swift; sourceTree = "<group>"; };
14191426
84434E57CA72951015FC71BC /* Pods-Firestore_FuzzTests_iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Firestore_FuzzTests_iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Firestore_FuzzTests_iOS/Pods-Firestore_FuzzTests_iOS.debug.xcconfig"; sourceTree = "<group>"; };
1427+
872C92ABD71B12784A1C5520 /* async_testing.cc */ = {isa = PBXFileReference; includeInIndex = 1; path = async_testing.cc; sourceTree = "<group>"; };
14201428
873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
14211429
8E002F4AD5D9B6197C940847 /* Firestore.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Firestore.podspec; path = ../Firestore.podspec; sourceTree = "<group>"; };
14221430
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>"; };
@@ -1682,6 +1690,8 @@
16821690
children = (
16831691
5467FB06203E6A44009C9584 /* app_testing.h */,
16841692
5467FB07203E6A44009C9584 /* app_testing.mm */,
1693+
872C92ABD71B12784A1C5520 /* async_testing.cc */,
1694+
600A7D7D821CE84E0CA8CB89 /* async_testing.h */,
16851695
CD422AF3E4515FB8E9BE67A0 /* equals_tester.h */,
16861696
54A0352820A3B3BD003E0143 /* testutil.cc */,
16871697
54A0352920A3B3BD003E0143 /* testutil.h */,
@@ -3376,6 +3386,7 @@
33763386
4F857404731D45F02C5EE4C3 /* async_queue_libdispatch_test.mm in Sources */,
33773387
83A9CD3B6E791A860CE81FA1 /* async_queue_std_test.cc in Sources */,
33783388
0B7B24194E2131F5C325FE0E /* async_queue_test.cc in Sources */,
3389+
B28ACC69EB1F232AE612E77B /* async_testing.cc in Sources */,
33793390
1733601ECCEA33E730DEAF45 /* autoid_test.cc in Sources */,
33803391
0DAA255C2FEB387895ADEE12 /* bits_test.cc in Sources */,
33813392
EBE4A7B6A57BCE02B389E8A6 /* byte_string_test.cc in Sources */,
@@ -3546,6 +3557,7 @@
35463557
4AD9809C9CE9FA09AC40992F /* async_queue_libdispatch_test.mm in Sources */,
35473558
38208AC761FF994BA69822BE /* async_queue_std_test.cc in Sources */,
35483559
900D0E9F18CE3DB954DD0D1E /* async_queue_test.cc in Sources */,
3560+
F73471529D36DD48ABD8AAE8 /* async_testing.cc in Sources */,
35493561
5D5E24E3FA1128145AA117D2 /* autoid_test.cc in Sources */,
35503562
B6FDE6F91D3F81D045E962A0 /* bits_test.cc in Sources */,
35513563
E1264B172412967A09993EC6 /* byte_string_test.cc in Sources */,
@@ -3727,6 +3739,7 @@
37273739
9B2CD4CBB1DFE8BC3C81A335 /* async_queue_libdispatch_test.mm in Sources */,
37283740
342724CA250A65E23CB133AC /* async_queue_std_test.cc in Sources */,
37293741
DA1D665B12AA1062DCDEA6BD /* async_queue_test.cc in Sources */,
3742+
08E3D48B3651E4908D75B23A /* async_testing.cc in Sources */,
37303743
B842780CF42361ACBBB381A9 /* autoid_test.cc in Sources */,
37313744
146C140B254F3837A4DD7AE8 /* bits_test.cc in Sources */,
37323745
D658E6DA5A218E08810E1688 /* byte_string_test.cc in Sources */,
@@ -3908,6 +3921,7 @@
39083921
1CB8AEFBF3E9565FF9955B50 /* async_queue_libdispatch_test.mm in Sources */,
39093922
AB2BAB0BD77FF05CC26FCF75 /* async_queue_std_test.cc in Sources */,
39103923
2FA0BAE32D587DF2EA5EEB97 /* async_queue_test.cc in Sources */,
3924+
2C5E4D9FDE7615AD0F63909E /* async_testing.cc in Sources */,
39113925
6AF739DDA9D33DF756DE7CDE /* autoid_test.cc in Sources */,
39123926
C1B4621C0820EEB0AC9CCD22 /* bits_test.cc in Sources */,
39133927
297DC2B3C1EB136D58F4BA9C /* byte_string_test.cc in Sources */,
@@ -4100,6 +4114,7 @@
41004114
B6FB4684208EA0EC00554BA2 /* async_queue_libdispatch_test.mm in Sources */,
41014115
B6FB4685208EA0F000554BA2 /* async_queue_std_test.cc in Sources */,
41024116
B6FB467D208E9D3C00554BA2 /* async_queue_test.cc in Sources */,
4117+
11BC867491A6631D37DE56A8 /* async_testing.cc in Sources */,
41034118
54740A581FC914F000713A1A /* autoid_test.cc in Sources */,
41044119
AB380D02201BC69F00D97691 /* bits_test.cc in Sources */,
41054120
7B86B1B21FD0EF2A67547F66 /* byte_string_test.cc in Sources */,
@@ -4300,6 +4315,7 @@
43004315
45A5504D33D39C6F80302450 /* async_queue_libdispatch_test.mm in Sources */,
43014316
6F914209F46E6552B5A79570 /* async_queue_std_test.cc in Sources */,
43024317
AD74843082C6465A676F16A7 /* async_queue_test.cc in Sources */,
4318+
35C330499D50AC415B24C580 /* async_testing.cc in Sources */,
43034319
8F781F527ED72DC6C123689E /* autoid_test.cc in Sources */,
43044320
0B9BD73418289EFF91917934 /* bits_test.cc in Sources */,
43054321
52967C3DD7896BFA48840488 /* byte_string_test.cc in Sources */,

Firestore/Example/Tests/API/FSTUserDataConverterTests.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ - (void)testConvertsGeoPoints {
137137
}
138138

139139
- (void)testConvertsBlobs {
140-
NSArray<NSData *> *values = @[ FSTTestData(1, 2, 3), FSTTestData(1, 2) ];
140+
NSArray<NSData *> *values = @[ FSTTestData(1, 2, 3, -1), FSTTestData(1, 2, -1) ];
141141
for (NSData *value in values) {
142142
FieldValue wrapped = FSTTestFieldValue(value);
143143
XCTAssertEqual(wrapped.type(), FieldValue::Type::Blob);

Firestore/Example/Tests/Integration/FSTDatastoreTests.mm

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939
#include "Firestore/core/src/firebase/firestore/remote/remote_event.h"
4040
#include "Firestore/core/src/firebase/firestore/remote/remote_store.h"
4141
#include "Firestore/core/src/firebase/firestore/util/async_queue.h"
42-
#include "Firestore/core/src/firebase/firestore/util/executor_libdispatch.h"
4342
#include "Firestore/core/src/firebase/firestore/util/hard_assert.h"
4443
#include "Firestore/core/src/firebase/firestore/util/status.h"
4544
#include "Firestore/core/src/firebase/firestore/util/string_apple.h"
45+
#include "Firestore/core/test/firebase/firestore/testutil/async_testing.h"
4646
#include "Firestore/core/test/firebase/firestore/testutil/testutil.h"
4747
#include "absl/memory/memory.h"
4848

@@ -75,7 +75,6 @@
7575
using firebase::firestore::testutil::Map;
7676
using firebase::firestore::testutil::WrapObject;
7777
using firebase::firestore::util::AsyncQueue;
78-
using firebase::firestore::util::ExecutorLibdispatch;
7978
using firebase::firestore::util::Status;
8079

8180
NS_ASSUME_NONNULL_BEGIN
@@ -232,9 +231,7 @@ - (void)setUp {
232231
_databaseInfo =
233232
DatabaseInfo(database_id, "test-key", util::MakeString(settings.host), settings.sslEnabled);
234233

235-
dispatch_queue_t queue = dispatch_queue_create(
236-
"com.google.firestore.FSTDatastoreTestsWorkerQueue", DISPATCH_QUEUE_SERIAL);
237-
_testWorkerQueue = std::make_shared<AsyncQueue>(absl::make_unique<ExecutorLibdispatch>(queue));
234+
_testWorkerQueue = testutil::AsyncQueueForTesting();
238235
_datastore = std::make_shared<Datastore>(_databaseInfo, _testWorkerQueue,
239236
std::make_shared<EmptyCredentialsProvider>());
240237

Firestore/Example/Tests/SpecTests/FSTSyncEngineTestDriver.mm

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,18 @@
4242
#include "Firestore/core/src/firebase/firestore/util/async_queue.h"
4343
#include "Firestore/core/src/firebase/firestore/util/delayed_constructor.h"
4444
#include "Firestore/core/src/firebase/firestore/util/error_apple.h"
45-
#include "Firestore/core/src/firebase/firestore/util/executor_libdispatch.h"
45+
#include "Firestore/core/src/firebase/firestore/util/executor.h"
4646
#include "Firestore/core/src/firebase/firestore/util/hard_assert.h"
4747
#include "Firestore/core/src/firebase/firestore/util/log.h"
4848
#include "Firestore/core/src/firebase/firestore/util/status.h"
4949
#include "Firestore/core/src/firebase/firestore/util/statusor.h"
5050
#include "Firestore/core/src/firebase/firestore/util/string_format.h"
5151
#include "Firestore/core/src/firebase/firestore/util/to_string.h"
52+
#include "Firestore/core/test/firebase/firestore/testutil/async_testing.h"
5253
#include "absl/memory/memory.h"
5354

55+
namespace testutil = firebase::firestore::testutil;
56+
5457
using firebase::firestore::Error;
5558
using firebase::firestore::auth::EmptyCredentialsProvider;
5659
using firebase::firestore::auth::HashUser;
@@ -80,7 +83,7 @@
8083
using firebase::firestore::util::AsyncQueue;
8184
using firebase::firestore::util::DelayedConstructor;
8285
using firebase::firestore::util::Empty;
83-
using firebase::firestore::util::ExecutorLibdispatch;
86+
using firebase::firestore::util::Executor;
8487
using firebase::firestore::util::MakeNSError;
8588
using firebase::firestore::util::MakeNSString;
8689
using firebase::firestore::util::MakeString;
@@ -198,9 +201,7 @@ - (instancetype)initWithPersistence:(std::unique_ptr<Persistence>)persistence
198201
_databaseInfo = {DatabaseId{"project", "database"}, "persistence", "host", false};
199202

200203
// Set up the sync engine and various stores.
201-
dispatch_queue_t queue =
202-
dispatch_queue_create("sync_engine_test_driver", DISPATCH_QUEUE_SERIAL);
203-
_workerQueue = std::make_shared<AsyncQueue>(absl::make_unique<ExecutorLibdispatch>(queue));
204+
_workerQueue = testutil::AsyncQueueForTesting();
204205
_persistence = std::move(persistence);
205206
_localStore = absl::make_unique<LocalStore>(_persistence.get(), initialUser);
206207

0 commit comments

Comments
 (0)