aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Example/Tests/SpecTests/FSTSpecTests.mm
diff options
context:
space:
mode:
authorGravatar Michael Lehenbauer <mikelehen@gmail.com>2018-03-05 09:49:41 -0800
committerGravatar GitHub <noreply@github.com>2018-03-05 09:49:41 -0800
commit34ebf10b0acc65f1924d723e82085d4104bc281d (patch)
tree98237b8eef85abdc7d464ef221a37d3bb6937be7 /Firestore/Example/Tests/SpecTests/FSTSpecTests.mm
parent1c40e7aada6b32bbc621f06fb5f380149606a58d (diff)
Add 10 second timeout waiting for connection before client behaves as-if offline. (#872)
[Port of https://github.com/firebase/firebase-js-sdk/commit/0fa319e5e019dd0d40ab441d2ff9f8f6d4724e43] * Refactored FSTOnlineState tracking out of FSTRemoteStore and into new FSTOnlineStateTracker component. * Added a 10 second timeout to transition from OnlineState.Unknown to OnlineState.Offline rather than waiting indefinitely for the stream to succeed or fail. * Removed hack to run SpecTests using an FSTDispatchQueue that wrapped dispatch_get_main_queue(). This was incompatible with [FSTDispatchQueue runDelayedCallbacksUntil:] since it queues work and blocks waiting for it to complete. Now spec tests create / use a proper FSTDispatchQueue. * Added a SpecTest to verify OnlineState timeout behavior. * Misc cleanup: * Renamed FSTOnlineState states: Failed => Offline, Healthy => Online * Renamed FSTTimerIds (ListenStreamConnection => ListenStreamConnectionBackoff) * Added ability to run timers from spec tests.
Diffstat (limited to 'Firestore/Example/Tests/SpecTests/FSTSpecTests.mm')
-rw-r--r--Firestore/Example/Tests/SpecTests/FSTSpecTests.mm25
1 files changed, 24 insertions, 1 deletions
diff --git a/Firestore/Example/Tests/SpecTests/FSTSpecTests.mm b/Firestore/Example/Tests/SpecTests/FSTSpecTests.mm
index 43b2a5f..b00ea07 100644
--- a/Firestore/Example/Tests/SpecTests/FSTSpecTests.mm
+++ b/Firestore/Example/Tests/SpecTests/FSTSpecTests.mm
@@ -22,7 +22,6 @@
#import "Firestore/Source/Core/FSTEventManager.h"
#import "Firestore/Source/Core/FSTQuery.h"
#import "Firestore/Source/Core/FSTSnapshotVersion.h"
-#import "Firestore/Source/Core/FSTViewSnapshot.h"
#import "Firestore/Source/Local/FSTEagerGarbageCollector.h"
#import "Firestore/Source/Local/FSTNoOpGarbageCollector.h"
#import "Firestore/Source/Local/FSTPersistence.h"
@@ -36,6 +35,7 @@
#import "Firestore/Source/Remote/FSTWatchChange.h"
#import "Firestore/Source/Util/FSTAssert.h"
#import "Firestore/Source/Util/FSTClasses.h"
+#import "Firestore/Source/Util/FSTDispatchQueue.h"
#import "Firestore/Source/Util/FSTLogger.h"
#import "Firestore/Example/Tests/Remote/FSTWatchChange+Testing.h"
@@ -323,6 +323,27 @@ static NSString *const kNoIOSTag = @"no-ios";
}
}
+- (void)doRunTimer:(NSString *)timer {
+ FSTTimerID timerID;
+ if ([timer isEqualToString:@"all"]) {
+ timerID = FSTTimerIDAll;
+ } else if ([timer isEqualToString:@"listen_stream_idle"]) {
+ timerID = FSTTimerIDListenStreamIdle;
+ } else if ([timer isEqualToString:@"listen_stream_connection"]) {
+ timerID = FSTTimerIDListenStreamConnectionBackoff;
+ } else if ([timer isEqualToString:@"write_stream_idle"]) {
+ timerID = FSTTimerIDWriteStreamIdle;
+ } else if ([timer isEqualToString:@"write_stream_connection"]) {
+ timerID = FSTTimerIDWriteStreamConnectionBackoff;
+ } else if ([timer isEqualToString:@"online_state_timeout"]) {
+ timerID = FSTTimerIDOnlineStateTimeout;
+ } else {
+ FSTFail(@"runTimer spec step specified unknown timer: %@", timer);
+ }
+
+ [self.driver runTimer:timerID];
+}
+
- (void)doDisableNetwork {
[self.driver disableNetwork];
}
@@ -391,6 +412,8 @@ static NSString *const kNoIOSTag = @"no-ios";
[self doWriteAck:step[@"writeAck"]];
} else if (step[@"failWrite"]) {
[self doFailWrite:step[@"failWrite"]];
+ } else if (step[@"runTimer"]) {
+ [self doRunTimer:step[@"runTimer"]];
} else if (step[@"enableNetwork"]) {
if ([step[@"enableNetwork"] boolValue]) {
[self doEnableNetwork];