/ OSX / utilities / test / SecTapToRadarTests.m
SecTapToRadarTests.m
  1  //
  2  //  SecTapToRadarTests.m
  3  //  TrustedPeersTests
  4  //
  5  
  6  #import <TargetConditionals.h>
  7  
  8  #if !TARGET_OS_BRIDGE
  9  
 10  #import <XCTest/XCTest.h>
 11  #import <OCMock/OCMock.h>
 12  #import "utilities/SecTapToRadar.h"
 13  
 14  @interface SecTapToRadarTests : XCTestCase
 15  @property BOOL isRateLimited;
 16  @property BOOL userSay;
 17  
 18  @property bool ttrDidAppear;
 19  @property id mockTTR;
 20  
 21  @end
 22  
 23  @implementation SecTapToRadarTests
 24  
 25  - (void)triggerTapToRadar:(SecTapToRadar *)ttrRequest
 26  {
 27      self.ttrDidAppear = true;
 28  }
 29  
 30  - (BOOL)isRateLimited:(SecTapToRadar *)ttrRequest
 31  {
 32      return self.isRateLimited;
 33  }
 34  
 35  - (BOOL)askUserIfTTR:(SecTapToRadar *)ttrRequest
 36  {
 37      return self.userSay;
 38  }
 39  
 40  - (void)setUp {
 41  
 42      self.ttrDidAppear = NO;
 43      self.isRateLimited = NO;
 44      self.userSay = YES;
 45  
 46      self.mockTTR = OCMClassMock([SecTapToRadar class]);
 47      OCMStub([self.mockTTR triggerTapToRadar:[OCMArg any]]).andCall(self, @selector(triggerTapToRadar:));
 48      OCMStub([self.mockTTR isRateLimited:[OCMArg any]]).andCall(self, @selector(isRateLimited:));
 49      OCMStub([self.mockTTR askUserIfTTR:[OCMArg any]]).andCall(self, @selector(askUserIfTTR:));
 50  }
 51  
 52  - (void)testSecTTRNormal {
 53  
 54      SecTapToRadar *ttr = [[SecTapToRadar alloc] initTapToRadar:@"alert" description:@"test" radar:@"1"];
 55  
 56      [ttr trigger];
 57      XCTAssertTrue(self.ttrDidAppear, "should have appeared");
 58  }
 59  
 60  - (void)testSecTTRRateLimit {
 61      SecTapToRadar *ttr = [[SecTapToRadar alloc] initTapToRadar:@"alert" description:@"test" radar:@"1"];
 62  
 63      self.isRateLimited = YES;
 64      [ttr trigger];
 65      XCTAssertFalse(self.ttrDidAppear, "should not have appered");
 66  }
 67  
 68  - (void)testSecTTRUserSupress {
 69  
 70      SecTapToRadar *ttr = [[SecTapToRadar alloc] initTapToRadar:@"alert" description:@"test" radar:@"1"];
 71  
 72      self.userSay = false;
 73      [ttr trigger];
 74      XCTAssertFalse(self.ttrDidAppear, "should not have appered");
 75  
 76      self.userSay = true;
 77      [ttr trigger];
 78      XCTAssertTrue(self.ttrDidAppear, "should have appeared");
 79  }
 80  
 81  - (void)testSecTTRRateLimiter {
 82  
 83      SecTapToRadar *ttr = [[SecTapToRadar alloc] initTapToRadar:@"alert" description:@"test" radar:@"1"];
 84      NSString *key = [SecTapToRadar keyname:ttr];
 85      NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.apple.security"];
 86  
 87      [ttr clearRetryTimestamp];
 88  
 89      XCTAssertFalse([ttr isRateLimited], @"should not be rate-limited for first request");
 90      [ttr updateRetryTimestamp];
 91      XCTAssertTrue([ttr isRateLimited], @"should be rate-limited after first request");
 92  
 93      [ttr clearRetryTimestamp];
 94      XCTAssertFalse([ttr isRateLimited], @"should not be ratelitmied after clear");
 95  
 96      // check invalid settings
 97      [defaults setObject:@"invalid" forKey:key];
 98      XCTAssertNotNil([defaults objectForKey:key], "should have cleared setting");
 99      XCTAssertFalse([ttr isRateLimited], @"should not be rate-limited if invalid type");
100      XCTAssertNil([defaults objectForKey:key], "should have cleared setting");
101  
102  
103  }
104  
105  
106  @end
107  
108  #endif /* TARGET_OS_BRIDGE */