FIRCLSReportTests.m 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2019 Google
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #import <Foundation/Foundation.h>
  15. #import <XCTest/XCTest.h>
  16. #import "Crashlytics/Crashlytics/Components/FIRCLSContext.h"
  17. #import "Crashlytics/Crashlytics/Components/FIRCLSGlobals.h"
  18. #import "Crashlytics/Crashlytics/Helpers/FIRCLSFile.h"
  19. #import "Crashlytics/Crashlytics/Models/FIRCLSInternalReport.h"
  20. #import "Crashlytics/Crashlytics/Models/FIRCLSReport.h"
  21. #import "Crashlytics/Crashlytics/Models/FIRCLSReport_Private.h"
  22. @interface FIRCLSReportTests : XCTestCase
  23. @end
  24. @implementation FIRCLSReportTests
  25. - (void)setUp {
  26. [super setUp];
  27. FIRCLSContextBaseInit();
  28. // these values must be set for the internals of logging to work
  29. _firclsContext.readonly->logging.userKVStorage.maxCount = 16;
  30. _firclsContext.readonly->logging.userKVStorage.maxIncrementalCount = 16;
  31. _firclsContext.readonly->logging.internalKVStorage.maxCount = 32;
  32. _firclsContext.readonly->logging.internalKVStorage.maxIncrementalCount = 16;
  33. _firclsContext.readonly->initialized = true;
  34. }
  35. - (void)tearDown {
  36. FIRCLSContextBaseDeinit();
  37. [super tearDown];
  38. }
  39. - (NSString *)resourcePath {
  40. return [[NSBundle bundleForClass:[self class]] resourcePath];
  41. }
  42. - (NSString *)pathForResource:(NSString *)name {
  43. return [[self resourcePath] stringByAppendingPathComponent:name];
  44. }
  45. - (FIRCLSInternalReport *)createTempCopyOfInternalReportWithName:(NSString *)name {
  46. NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:name];
  47. // make sure to remove anything that was there previously
  48. [[NSFileManager defaultManager] removeItemAtPath:tempPath error:nil];
  49. NSString *resourcePath = [self pathForResource:name];
  50. [[NSFileManager defaultManager] copyItemAtPath:resourcePath toPath:tempPath error:nil];
  51. return [[FIRCLSInternalReport alloc] initWithPath:tempPath];
  52. }
  53. - (FIRCLSReport *)createTempCopyOfReportWithName:(NSString *)name {
  54. FIRCLSInternalReport *internalReport = [self createTempCopyOfInternalReportWithName:name];
  55. return [[FIRCLSReport alloc] initWithInternalReport:internalReport];
  56. }
  57. #pragma mark - Public Getter Methods
  58. - (void)testPropertiesFromMetadatFile {
  59. FIRCLSReport *report = [self createTempCopyOfReportWithName:@"metadata_only_report"];
  60. XCTAssertEqualObjects(@"772929a7f21f4ad293bb644668f257cd", report.identifier);
  61. XCTAssertEqualObjects(@"3", report.bundleVersion);
  62. XCTAssertEqualObjects(@"1.0", report.bundleShortVersionString);
  63. XCTAssertEqualObjects([NSDate dateWithTimeIntervalSince1970:1423944888], report.dateCreated);
  64. XCTAssertEqualObjects(@"14C109", report.OSBuildVersion);
  65. XCTAssertEqualObjects(@"10.10.2", report.OSVersion);
  66. }
  67. #pragma mark - Public Setter Methods
  68. - (void)testSetUserProperties {
  69. FIRCLSReport *report = [self createTempCopyOfReportWithName:@"metadata_only_report"];
  70. [report setUserIdentifier:@"12345-6"];
  71. NSArray *entries = FIRCLSFileReadSections(
  72. [[report.internalReport pathForContentFile:FIRCLSReportInternalIncrementalKVFile]
  73. fileSystemRepresentation],
  74. false, nil);
  75. XCTAssertEqual([entries count], 1, @"");
  76. XCTAssertEqualObjects(entries[0][@"kv"][@"key"],
  77. FIRCLSFileHexEncodeString([FIRCLSUserIdentifierKey UTF8String]), @"");
  78. XCTAssertEqualObjects(entries[0][@"kv"][@"value"], FIRCLSFileHexEncodeString("12345-6"), @"");
  79. }
  80. - (void)testSetKeyValuesWhenNoneWerePresent {
  81. FIRCLSReport *report = [self createTempCopyOfReportWithName:@"metadata_only_report"];
  82. [report setObjectValue:@"hello" forKey:@"mykey"];
  83. [report setObjectValue:@"goodbye" forKey:@"anotherkey"];
  84. NSArray *entries = FIRCLSFileReadSections(
  85. [[report.internalReport pathForContentFile:FIRCLSReportUserIncrementalKVFile]
  86. fileSystemRepresentation],
  87. false, nil);
  88. XCTAssertEqual([entries count], 2, @"");
  89. // mykey = "..."
  90. XCTAssertEqualObjects(entries[0][@"kv"][@"key"], FIRCLSFileHexEncodeString("mykey"), @"");
  91. XCTAssertEqualObjects(entries[0][@"kv"][@"value"], FIRCLSFileHexEncodeString("hello"), @"");
  92. // anotherkey = "..."
  93. XCTAssertEqualObjects(entries[1][@"kv"][@"key"], FIRCLSFileHexEncodeString("anotherkey"), @"");
  94. XCTAssertEqualObjects(entries[1][@"kv"][@"value"], FIRCLSFileHexEncodeString("goodbye"), @"");
  95. }
  96. @end