Adding two unit test to make sure we don’t create sessions for the wrong timestamps

This commit is contained in:
Benjamin Scholtysik (Reimold)
2016-09-06 20:59:41 -07:00
parent aeebd5b2d7
commit 2a85e65652

View File

@@ -21,12 +21,12 @@
@implementation BITMetricsManagerTests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
[super tearDown];
[super tearDown];
}
- (void)testMetricsManagerGetsInstantiated {
@@ -92,9 +92,9 @@
#pragma clang diagnostic pop
OCMExpect([mockChannel enqueueTelemetryItem:[OCMArg checkWithBlock:^BOOL(NSObject *value)
{
return [value isKindOfClass:[BITSessionStateData class]];
}]]);
{
return [value isKindOfClass:[BITSessionStateData class]];
}]]);
[self.sut trackSessionWithState:BITSessionState_start];
OCMVerifyAll(mockChannel);
}
@@ -109,7 +109,7 @@
#pragma clang diagnostic ignored "-Wnonnull"
self.sut = [[BITMetricsManager alloc] initWithChannel:nil telemetryContext:mockContext persistence:nil userDefaults:testUserDefaults];
#pragma clang diagnostic pop
NSString *testSessionId = @"sessionId";
OCMExpect([mockContext setSessionId:testSessionId]);
@@ -120,4 +120,87 @@
OCMVerifyAll(mockContext);
}
- (void)testNewSessionCreated {
NSUserDefaults *testUserDefaults = [NSUserDefaults new];
BITTelemetryContext *context = [BITTelemetryContext new];
BITChannel *channel = [BITChannel new];
id mockChannel = OCMPartialMock(channel);
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
self.sut = [[BITMetricsManager alloc] initWithChannel:mockChannel telemetryContext:context persistence:nil userDefaults:testUserDefaults];
#pragma clang diagnostic pop
int sessionStartCount = 0;
int sessionNotRenewedCount = 0;
for(int i = 0; i < 100; i++) {
double randomOffset = (i%2 == 0) ? arc4random_uniform(1000 - 20 + 1) + 20 : arc4random_uniform(19 - 0 + 1) + 0;
double backgroundtime = [[NSDate date] timeIntervalSince1970] - randomOffset;
[testUserDefaults setDouble:backgroundtime forKey:@"BITApplicationDidEnterBackgroundTime"];
[self.sut startNewSessionIfNeeded];
NSLog(@"Test iteration %i", i);
if(randomOffset >= 20.0) {
NSLog(@"Calling OCMVerify for %f", randomOffset);
OCMVerify([mockChannel enqueueTelemetryItem:anything()]);
sessionStartCount +=1;
}
else {
NSLog(@"Calling OCMReject for %f", randomOffset);
// we cant OCMReject for the mockChannel as it will fail because enqueueTelemetryItem has been invoked before for all
// randomOffset >= 20.
sessionNotRenewedCount +=1;
}
}
// Ac we can't use OCMReject, at least verify the counts of the cases.
XCTAssertEqual(sessionStartCount, 50);
XCTAssertEqual(sessionNotRenewedCount, 50);
}
- (void)testNewSessionNeverCreated {
NSUserDefaults *testUserDefaults = [NSUserDefaults new];
BITTelemetryContext *context = [BITTelemetryContext new];
BITChannel *channel = [BITChannel new];
id mockChannel = OCMPartialMock(channel);
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
self.sut = [[BITMetricsManager alloc] initWithChannel:mockChannel telemetryContext:context persistence:nil userDefaults:testUserDefaults];
#pragma clang diagnostic pop
int sessionStartCount = 0;
int sessionNotRenewedCount = 0;
for(int i = 0; i < 100; i++) {
double randomOffset = (i%2 == 0) ? arc4random_uniform(19 - 0 + 1) + 0 : arc4random_uniform(19 - 0 + 1) + 0;
double backgroundtime = [[NSDate date] timeIntervalSince1970] - randomOffset;
[testUserDefaults setDouble:backgroundtime forKey:@"BITApplicationDidEnterBackgroundTime"];
[self.sut startNewSessionIfNeeded];
NSLog(@"Test iteration %i", i);
if(randomOffset >= 20.0) {
NSLog(@"Calling OCMVerify for %f", randomOffset);
OCMVerify([mockChannel enqueueTelemetryItem:anything()]);
sessionStartCount +=1;
}
else {
NSLog(@"Calling OCMReject for %f", randomOffset);
OCMReject([mockChannel enqueueTelemetryItem:anything()]);
sessionNotRenewedCount +=1;
}
}
XCTAssertEqual(sessionStartCount, 0);
XCTAssertEqual(sessionNotRenewedCount, 100);
}
@end