From 2a85e65652f9e43e141d69a9f762f3e2bd0c0bc6 Mon Sep 17 00:00:00 2001 From: "Benjamin Scholtysik (Reimold)" Date: Tue, 6 Sep 2016 20:59:41 -0700 Subject: [PATCH] =?UTF-8?q?Adding=20two=20unit=20test=20to=20make=20sure?= =?UTF-8?q?=20we=20don=E2=80=99t=20create=20sessions=20for=20the=20wrong?= =?UTF-8?q?=20timestamps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HockeySDKTests/BITMetricsManagerTests.m | 97 +++++++++++++++++-- 1 file changed, 90 insertions(+), 7 deletions(-) diff --git a/Support/HockeySDKTests/BITMetricsManagerTests.m b/Support/HockeySDKTests/BITMetricsManagerTests.m index 38d3ca0f81..7ebfb764ad 100644 --- a/Support/HockeySDKTests/BITMetricsManagerTests.m +++ b/Support/HockeySDKTests/BITMetricsManagerTests.m @@ -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