FPRTestUtils.m 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // Copyright 2020 Google LLC
  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 "FirebasePerformance/Tests/Unit/FPRTestUtils.h"
  15. #import "FirebasePerformance/Sources/FPRNanoPbUtils.h"
  16. #import "FirebasePerformance/Sources/Gauges/Memory/FPRMemoryGaugeData.h"
  17. #import "FirebasePerformance/Sources/Instrumentation/FPRNetworkTrace+Private.h"
  18. #import "FirebasePerformance/Sources/Instrumentation/FPRNetworkTrace.h"
  19. #import "FirebasePerformance/Sources/Timer/FIRTrace+Internal.h"
  20. #import "FirebasePerformance/Sources/Timer/FIRTrace+Private.h"
  21. #import "FirebasePerformance/Sources/Protogen/nanopb/perf_metric.nanopb.h"
  22. static NSInteger const kLogSource = 462; // LogRequest_LogSource_Fireperf
  23. @implementation FPRTestUtils
  24. #pragma mark - Test utility methods
  25. + (NSBundle *)getBundle {
  26. #if SWIFT_PACKAGE
  27. return Firebase_PerformanceUnit_SWIFTPM_MODULE_BUNDLE();
  28. #else
  29. return [NSBundle bundleForClass:[FPRTestUtils class]];
  30. #endif
  31. }
  32. + (FIRTrace *)createRandomTraceWithName:(NSString *)traceName {
  33. FIRTrace *trace = [[FIRTrace alloc] initWithName:traceName];
  34. [trace start];
  35. [trace stop];
  36. // Make sure there are no sessions.
  37. trace.activeSessions = [NSMutableArray array];
  38. return trace;
  39. }
  40. + (FIRTrace *)addVerboseSessionToTrace:(FIRTrace *)trace {
  41. FPRSessionDetails *details =
  42. [[FPRSessionDetails alloc] initWithSessionId:@"random" options:FPRSessionOptionsGauges];
  43. trace.activeSessions = [[NSMutableArray alloc] initWithObjects:details, nil];
  44. return trace;
  45. }
  46. + (firebase_perf_v1_PerfMetric)createRandomPerfMetric:(NSString *)traceName {
  47. firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  48. FIRTrace *trace = [FPRTestUtils createRandomTraceWithName:traceName];
  49. // Make sure there are no sessions.
  50. trace.activeSessions = [NSMutableArray array];
  51. FPRSetTraceMetric(&perfMetric, FPRGetTraceMetric(trace));
  52. return perfMetric;
  53. }
  54. + (firebase_perf_v1_PerfMetric)createVerboseRandomPerfMetric:(NSString *)traceName {
  55. firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  56. FIRTrace *trace = [FPRTestUtils createRandomTraceWithName:traceName];
  57. trace = [FPRTestUtils addVerboseSessionToTrace:trace];
  58. FPRSetTraceMetric(&perfMetric, FPRGetTraceMetric(trace));
  59. return perfMetric;
  60. }
  61. + (firebase_perf_v1_PerfMetric)createRandomInternalPerfMetric:(NSString *)traceName {
  62. firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  63. FIRTrace *trace = [[FIRTrace alloc] initInternalTraceWithName:traceName];
  64. [trace start];
  65. [trace stop];
  66. // Make sure there are no sessions.
  67. trace.activeSessions = [NSMutableArray array];
  68. FPRSetTraceMetric(&perfMetric, FPRGetTraceMetric(trace));
  69. return perfMetric;
  70. }
  71. + (firebase_perf_v1_PerfMetric)createRandomNetworkPerfMetric:(NSString *)url {
  72. firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  73. NSURL *URL = [NSURL URLWithString:url];
  74. NSURLRequest *URLRequest = [NSURLRequest requestWithURL:URL];
  75. FPRNetworkTrace *networkTrace = [[FPRNetworkTrace alloc] initWithURLRequest:URLRequest];
  76. [networkTrace start];
  77. [networkTrace checkpointState:FPRNetworkTraceCheckpointStateInitiated];
  78. [networkTrace checkpointState:FPRNetworkTraceCheckpointStateResponseReceived];
  79. NSDictionary<NSString *, NSString *> *headerFields = @{@"Content-Type" : @"text/json"};
  80. NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:URL
  81. statusCode:200
  82. HTTPVersion:@"HTTP/1.1"
  83. headerFields:headerFields];
  84. [networkTrace didReceiveData:[NSData data]];
  85. [networkTrace didCompleteRequestWithResponse:response error:nil];
  86. networkTrace.activeSessions = [NSMutableArray array];
  87. FPRSetNetworkRequestMetric(&perfMetric, FPRGetNetworkRequestMetric(networkTrace));
  88. return perfMetric;
  89. }
  90. + (firebase_perf_v1_PerfMetric)createRandomGaugePerfMetric {
  91. firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  92. NSMutableArray<NSObject *> *gauges = [[NSMutableArray alloc] init];
  93. NSDate *date = [NSDate date];
  94. FPRMemoryGaugeData *memoryData = [[FPRMemoryGaugeData alloc] initWithCollectionTime:date
  95. heapUsed:5 * 1024
  96. heapAvailable:10 * 1024];
  97. [gauges addObject:memoryData];
  98. firebase_perf_v1_GaugeMetric gaugeMetric = FPRGetGaugeMetric(gauges, @"123");
  99. FPRSetGaugeMetric(&perfMetric, gaugeMetric);
  100. return perfMetric;
  101. }
  102. + (GDTCOREvent *)createRandomTraceGDTEvent:(NSString *)traceName {
  103. firebase_perf_v1_PerfMetric perfMetric = [self createRandomPerfMetric:traceName];
  104. NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
  105. GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetFLL];
  106. gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
  107. return gdtEvent;
  108. }
  109. + (GDTCOREvent *)createRandomInternalTraceGDTEvent:(NSString *)traceName {
  110. firebase_perf_v1_PerfMetric perfMetric = [self createRandomInternalPerfMetric:traceName];
  111. NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
  112. GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetFLL];
  113. gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
  114. return gdtEvent;
  115. }
  116. + (GDTCOREvent *)createRandomNetworkGDTEvent:(NSString *)url {
  117. firebase_perf_v1_PerfMetric perfMetric = [self createRandomNetworkPerfMetric:url];
  118. NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
  119. GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetFLL];
  120. gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
  121. return gdtEvent;
  122. }
  123. @end