aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Example/Tests/SpecTests
diff options
context:
space:
mode:
authorGravatar Sebastian Schmidt <mrschmidt@google.com>2017-10-30 18:17:16 -0700
committerGravatar GitHub <noreply@github.com>2017-10-30 18:17:16 -0700
commit02ff6bbee95150eacff9563af4dd7a6e1aeaebdd (patch)
tree8a095ae29bdb6daf273f57913af021c2eae981ab /Firestore/Example/Tests/SpecTests
parent1db9fd83df8d29abe5e7369ad1cbf3eb8545a78a (diff)
Closing the write and watch stream after 60s of idleness (#388)
Diffstat (limited to 'Firestore/Example/Tests/SpecTests')
-rw-r--r--Firestore/Example/Tests/SpecTests/FSTMockDatastore.m71
1 files changed, 40 insertions, 31 deletions
diff --git a/Firestore/Example/Tests/SpecTests/FSTMockDatastore.m b/Firestore/Example/Tests/SpecTests/FSTMockDatastore.m
index 8b95286..6af2053 100644
--- a/Firestore/Example/Tests/SpecTests/FSTMockDatastore.m
+++ b/Firestore/Example/Tests/SpecTests/FSTMockDatastore.m
@@ -39,19 +39,17 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database
workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue
credentials:(id<FSTCredentialsProvider>)credentials
- serializer:(FSTSerializerBeta *)serializer
- delegate:(id<FSTWatchStreamDelegate>)delegate NS_DESIGNATED_INITIALIZER;
+ serializer:(FSTSerializerBeta *)serializer NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database
workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue
credentials:(id<FSTCredentialsProvider>)credentials
- responseMessageClass:(Class)responseMessageClass
- delegate:(id<FSTWatchStreamDelegate>)delegate NS_UNAVAILABLE;
+ responseMessageClass:(Class)responseMessageClass NS_UNAVAILABLE;
@property(nonatomic, assign) BOOL open;
-
@property(nonatomic, strong, readonly)
NSMutableDictionary<FSTBoxedTargetID *, FSTQueryData *> *activeTargets;
+@property(nonatomic, weak, readwrite, nullable) id<FSTWatchStreamDelegate> delegate;
@end
@@ -60,13 +58,11 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database
workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue
credentials:(id<FSTCredentialsProvider>)credentials
- serializer:(FSTSerializerBeta *)serializer
- delegate:(id<FSTWatchStreamDelegate>)delegate {
+ serializer:(FSTSerializerBeta *)serializer {
self = [super initWithDatabase:database
workerDispatchQueue:workerDispatchQueue
credentials:credentials
- serializer:serializer
- delegate:delegate];
+ serializer:serializer];
if (self) {
FSTAssert(database, @"Database must not be nil");
_activeTargets = [NSMutableDictionary dictionary];
@@ -76,10 +72,15 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Overridden FSTWatchStream methods.
-- (void)start {
+- (void)startWithDelegate:(id<FSTWatchStreamDelegate>)delegate {
FSTAssert(!self.open, @"Trying to start already started watch stream");
self.open = YES;
- [self handleStreamOpen];
+ self.delegate = delegate;
+ [self notifyStreamOpen];
+}
+
+- (void)stop {
+ self.delegate = nil;
}
- (BOOL)isOpen {
@@ -90,10 +91,14 @@ NS_ASSUME_NONNULL_BEGIN
return self.open;
}
-- (void)handleStreamOpen {
+- (void)notifyStreamOpen {
[self.delegate watchStreamDidOpen];
}
+- (void)notifyStreamInterruptedWithError:(nullable NSError *)error {
+ [self.delegate watchStreamWasInterruptedWithError:error];
+}
+
- (void)watchQuery:(FSTQueryData *)query {
FSTLog(@"watchQuery: %d: %@", query.targetID, query.query);
// Snapshot version is ignored on the wire
@@ -110,7 +115,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)failStreamWithError:(NSError *)error {
self.open = NO;
- [self.delegate watchStreamDidClose:error];
+ [self notifyStreamInterruptedWithError:error];
}
#pragma mark - Helper methods.
@@ -142,17 +147,16 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database
workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue
credentials:(id<FSTCredentialsProvider>)credentials
- serializer:(FSTSerializerBeta *)serializer
- delegate:(id<FSTWriteStreamDelegate>)delegate NS_DESIGNATED_INITIALIZER;
+ serializer:(FSTSerializerBeta *)serializer NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database
workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue
credentials:(id<FSTCredentialsProvider>)credentials
- responseMessageClass:(Class)responseMessageClass
- delegate:(id<FSTWriteStreamDelegate>)delegate NS_UNAVAILABLE;
+ responseMessageClass:(Class)responseMessageClass NS_UNAVAILABLE;
@property(nonatomic, assign) BOOL open;
@property(nonatomic, strong, readonly) NSMutableArray<NSArray<FSTMutation *> *> *sentMutations;
+@property(nonatomic, weak, readwrite, nullable) id<FSTWriteStreamDelegate> delegate;
@end
@@ -161,13 +165,11 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithDatabase:(FSTDatabaseInfo *)database
workerDispatchQueue:(FSTDispatchQueue *)workerDispatchQueue
credentials:(id<FSTCredentialsProvider>)credentials
- serializer:(FSTSerializerBeta *)serializer
- delegate:(id<FSTWriteStreamDelegate>)delegate {
+ serializer:(FSTSerializerBeta *)serializer {
self = [super initWithDatabase:database
workerDispatchQueue:workerDispatchQueue
credentials:credentials
- serializer:serializer
- delegate:delegate];
+ serializer:serializer];
if (self) {
_sentMutations = [NSMutableArray array];
}
@@ -176,11 +178,16 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Overridden FSTWriteStream methods.
-- (void)start {
+- (void)startWithDelegate:(id<FSTWriteStreamDelegate>)delegate {
FSTAssert(!self.open, @"Trying to start already started write stream");
self.open = YES;
[self.sentMutations removeAllObjects];
- [self handleStreamOpen];
+ self.delegate = delegate;
+ [self notifyStreamOpen];
+}
+
+- (void)stop {
+ self.delegate = nil;
}
- (BOOL)isOpen {
@@ -200,10 +207,14 @@ NS_ASSUME_NONNULL_BEGIN
[self.sentMutations addObject:mutations];
}
-- (void)handleStreamOpen {
+- (void)notifyStreamOpen {
[self.delegate writeStreamDidOpen];
}
+- (void)notifyStreamInterruptedWithError:(nullable NSError *)error {
+ [self.delegate writeStreamWasInterruptedWithError:error];
+}
+
#pragma mark - Helper methods.
/** Injects a write ack as though it had come from the backend in response to a write. */
@@ -215,7 +226,7 @@ NS_ASSUME_NONNULL_BEGIN
/** Injects a failed write response as though it had come from the backend. */
- (void)failStreamWithError:(NSError *)error {
self.open = NO;
- [self.delegate writeStreamDidClose:error];
+ [self notifyStreamInterruptedWithError:error];
}
/**
@@ -269,27 +280,25 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Overridden FSTDatastore methods.
-- (FSTWatchStream *)createWatchStreamWithDelegate:(id<FSTWatchStreamDelegate>)delegate {
+- (FSTWatchStream *)createWatchStream {
FSTAssert(self.databaseInfo, @"DatabaseInfo must not be nil");
self.watchStream = [[FSTMockWatchStream alloc]
initWithDatabase:self.databaseInfo
workerDispatchQueue:self.workerDispatchQueue
credentials:self.credentials
serializer:[[FSTSerializerBeta alloc]
- initWithDatabaseID:self.databaseInfo.databaseID]
- delegate:delegate];
+ initWithDatabaseID:self.databaseInfo.databaseID]];
return self.watchStream;
}
-- (FSTWriteStream *)createWriteStreamWithDelegate:(id<FSTWriteStreamDelegate>)delegate {
+- (FSTWriteStream *)createWriteStream {
FSTAssert(self.databaseInfo, @"DatabaseInfo must not be nil");
self.writeStream = [[FSTMockWriteStream alloc]
initWithDatabase:self.databaseInfo
workerDispatchQueue:self.workerDispatchQueue
credentials:self.credentials
serializer:[[FSTSerializerBeta alloc]
- initWithDatabaseID:self.databaseInfo.databaseID]
- delegate:delegate];
+ initWithDatabaseID:self.databaseInfo.databaseID]];
return self.writeStream;
}