GDTCORUploadPackageTest.m 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. * Copyright 2019 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "GDTCORTests/Unit/GDTCORTestCase.h"
  17. #import <GoogleDataTransport/GDTCORClock.h>
  18. #import <GoogleDataTransport/GDTCOREvent.h>
  19. #import <GoogleDataTransport/GDTCORRegistrar.h>
  20. #import <GoogleDataTransport/GDTCORUploadPackage.h>
  21. #import "GDTCORLibrary/Private/GDTCORUploadPackage_Private.h"
  22. #import "GDTCORTests/Unit/Helpers/GDTCOREventGenerator.h"
  23. #import "GDTCORTests/Unit/Helpers/GDTCORTestPrioritizer.h"
  24. #import "GDTCORTests/Unit/Helpers/GDTCORTestUploadPackage.h"
  25. #import "GDTCORTests/Unit/Helpers/GDTCORTestUploader.h"
  26. @interface GDTCORUploadPackageTest : GDTCORTestCase <NSSecureCoding, GDTCORUploadPackageProtocol>
  27. /** If YES, -packageDelivered:successful was called. */
  28. @property(nonatomic) BOOL packageDeliveredCalledSuccessful;
  29. /** If YES, -packageDeliveryFailed: was called. */
  30. @property(nonatomic) BOOL packageDeliveredCalledFailed;
  31. /** If YES, -packageExpired: was called. */
  32. @property(nonatomic) BOOL packageExpiredCalled;
  33. @end
  34. @implementation GDTCORUploadPackageTest
  35. - (void)setUp {
  36. [super setUp];
  37. _packageExpiredCalled = NO;
  38. _packageDeliveredCalledFailed = NO;
  39. _packageDeliveredCalledSuccessful = NO;
  40. }
  41. - (void)packageDelivered:(GDTCORUploadPackage *)package successful:(BOOL)successful {
  42. if (successful) {
  43. self.packageDeliveredCalledSuccessful = YES;
  44. } else {
  45. self.packageDeliveredCalledFailed = YES;
  46. }
  47. }
  48. - (void)packageExpired:(GDTCORUploadPackage *)package {
  49. self.packageExpiredCalled = YES;
  50. }
  51. + (BOOL)supportsSecureCoding {
  52. return YES;
  53. }
  54. - (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
  55. }
  56. - (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
  57. return [[[self class] alloc] init];
  58. }
  59. /** Tests the default initializer. */
  60. - (void)testInit {
  61. XCTAssertNotNil([[GDTCORUploadPackage alloc] initWithTarget:kGDTCORTargetTest]);
  62. }
  63. /** Tests copying indicates that the underlying sets of events can't be changed from underneath. */
  64. - (void)testRegisterUpload {
  65. GDTCORUploadPackage *uploadPackage =
  66. [[GDTCORUploadPackage alloc] initWithTarget:kGDTCORTargetTest];
  67. GDTCORUploadPackage *uploadPackageCopy = [uploadPackage copy];
  68. XCTAssertNotEqual(uploadPackage, uploadPackageCopy);
  69. XCTAssertEqualObjects(uploadPackage.events, uploadPackageCopy.events);
  70. XCTAssertEqualObjects(uploadPackage, uploadPackageCopy);
  71. uploadPackage.events = [NSSet set];
  72. uploadPackageCopy = [uploadPackage copy];
  73. XCTAssertNotEqual(uploadPackage, uploadPackageCopy);
  74. XCTAssertEqualObjects(uploadPackage.events, uploadPackageCopy.events);
  75. XCTAssertEqualObjects(uploadPackage, uploadPackageCopy);
  76. NSMutableSet<GDTCOREvent *> *set = [GDTCOREventGenerator generate3Events];
  77. uploadPackage.events = set;
  78. uploadPackageCopy = [uploadPackage copy];
  79. XCTAssertNotEqual(uploadPackage, uploadPackageCopy);
  80. GDTCOREvent *newEvent = [[GDTCOREventGenerator generate3Events] anyObject];
  81. [set addObject:newEvent];
  82. XCTAssertFalse([uploadPackageCopy.events containsObject:newEvent]);
  83. XCTAssertNotEqualObjects(uploadPackage.events, uploadPackageCopy.events);
  84. XCTAssertNotEqualObjects(uploadPackage, uploadPackageCopy);
  85. [set removeObject:newEvent];
  86. XCTAssertEqualObjects(uploadPackage.events, uploadPackageCopy.events);
  87. XCTAssertEqualObjects(uploadPackage, uploadPackageCopy);
  88. }
  89. - (void)testEncoding {
  90. GDTCORUploadPackage *uploadPackage =
  91. [[GDTCORUploadPackage alloc] initWithTarget:kGDTCORTargetTest];
  92. NSMutableSet<GDTCOREvent *> *set = [GDTCOREventGenerator generate3Events];
  93. uploadPackage.events = set;
  94. uploadPackage.handler = self;
  95. NSError *error;
  96. NSData *packageData = GDTCOREncodeArchive(uploadPackage, nil, &error);
  97. XCTAssertNil(error);
  98. XCTAssertNotNil(packageData);
  99. error = nil;
  100. GDTCORUploadPackage *recreatedPackage = (GDTCORUploadPackage *)GDTCORDecodeArchive(
  101. [GDTCORUploadPackage class], nil, packageData, &error);
  102. XCTAssertNil(error);
  103. XCTAssertNotNil(recreatedPackage);
  104. XCTAssertEqualObjects(uploadPackage, recreatedPackage);
  105. }
  106. - (void)testExpiration {
  107. XCTAssertFalse(self.packageExpiredCalled);
  108. GDTCORUploadPackage *uploadPackage =
  109. [[GDTCORUploadPackage alloc] initWithTarget:kGDTCORTargetTest];
  110. uploadPackage.deliverByTime = [GDTCORClock clockSnapshotInTheFuture:1000];
  111. uploadPackage.handler = self;
  112. NSPredicate *pred =
  113. [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject,
  114. NSDictionary<NSString *, id> *_Nullable bindings) {
  115. return self.packageExpiredCalled;
  116. }];
  117. XCTestExpectation *expectation = [self expectationForPredicate:pred
  118. evaluatedWithObject:self
  119. handler:nil];
  120. [self waitForExpectations:@[ expectation ] timeout:30];
  121. }
  122. @end