FPRTestUtils.m 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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/FPRProtoUtils.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/ProtoSupport/PerfMetric.pbobjc.h"
  22. static NSInteger const kLogSource = 462; // LogRequest_LogSource_Fireperf
  23. @implementation FPRTestUtils
  24. #pragma mark - Test utility methods
  25. + (FIRTrace *)createRandomTraceWithName:(NSString *)traceName {
  26. FIRTrace *trace = [[FIRTrace alloc] initWithName:traceName];
  27. [trace start];
  28. [trace stop];
  29. // Make sure there are no sessions.
  30. trace.activeSessions = [NSMutableArray array];
  31. return trace;
  32. }
  33. + (FIRTrace *)addVerboseSessionToTrace:(FIRTrace *)trace {
  34. FPRSessionDetails *details =
  35. [[FPRSessionDetails alloc] initWithSessionId:@"random" options:FPRSessionOptionsGauges];
  36. trace.activeSessions = [[NSMutableArray alloc] initWithObjects:details, nil];
  37. return trace;
  38. }
  39. + (FPRMSGPerfMetric *)createRandomPerfMetric:(NSString *)traceName {
  40. FPRMSGPerfMetric *perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  41. FIRTrace *trace = [FPRTestUtils createRandomTraceWithName:traceName];
  42. // Make sure there are no sessions.
  43. trace.activeSessions = [NSMutableArray array];
  44. perfMetric.traceMetric = FPRGetTraceMetric(trace);
  45. return perfMetric;
  46. }
  47. + (FPRMSGPerfMetric *)createVerboseRandomPerfMetric:(NSString *)traceName {
  48. FPRMSGPerfMetric *perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  49. FIRTrace *trace = [FPRTestUtils createRandomTraceWithName:traceName];
  50. trace = [FPRTestUtils addVerboseSessionToTrace:trace];
  51. perfMetric.traceMetric = FPRGetTraceMetric(trace);
  52. return perfMetric;
  53. }
  54. + (FPRMSGPerfMetric *)createRandomInternalPerfMetric:(NSString *)traceName {
  55. FPRMSGPerfMetric *perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  56. FIRTrace *trace = [[FIRTrace alloc] initInternalTraceWithName:traceName];
  57. [trace start];
  58. [trace stop];
  59. // Make sure there are no sessions.
  60. trace.activeSessions = [NSMutableArray array];
  61. perfMetric.traceMetric = FPRGetTraceMetric(trace);
  62. return perfMetric;
  63. }
  64. + (FPRMSGPerfMetric *)createRandomNetworkPerfMetric:(NSString *)url {
  65. FPRMSGPerfMetric *perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  66. NSURL *URL = [NSURL URLWithString:url];
  67. NSURLRequest *URLRequest = [NSURLRequest requestWithURL:URL];
  68. FPRNetworkTrace *networkTrace = [[FPRNetworkTrace alloc] initWithURLRequest:URLRequest];
  69. [networkTrace start];
  70. [networkTrace checkpointState:FPRNetworkTraceCheckpointStateInitiated];
  71. [networkTrace checkpointState:FPRNetworkTraceCheckpointStateResponseReceived];
  72. NSDictionary<NSString *, NSString *> *headerFields = @{@"Content-Type" : @"text/json"};
  73. NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:URL
  74. statusCode:200
  75. HTTPVersion:@"HTTP/1.1"
  76. headerFields:headerFields];
  77. [networkTrace didReceiveData:[NSData data]];
  78. [networkTrace didCompleteRequestWithResponse:response error:nil];
  79. networkTrace.activeSessions = [NSMutableArray array];
  80. perfMetric.networkRequestMetric = FPRGetNetworkRequestMetric(networkTrace);
  81. return perfMetric;
  82. }
  83. + (FPRMSGPerfMetric *)createRandomGaugePerfMetric {
  84. FPRMSGPerfMetric *perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
  85. NSMutableArray<NSObject *> *gauges = [[NSMutableArray alloc] init];
  86. NSDate *date = [NSDate date];
  87. FPRMemoryGaugeData *memoryData = [[FPRMemoryGaugeData alloc] initWithCollectionTime:date
  88. heapUsed:5 * 1024
  89. heapAvailable:10 * 1024];
  90. [gauges addObject:memoryData];
  91. FPRMSGGaugeMetric *gaugeMetric = FPRGetGaugeMetric(gauges, @"123");
  92. perfMetric.gaugeMetric = gaugeMetric;
  93. return perfMetric;
  94. }
  95. + (GDTCOREvent *)createRandomTraceGDTEvent:(NSString *)traceName {
  96. FPRMSGPerfMetric *perfMetric = [self createRandomPerfMetric:traceName];
  97. NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
  98. GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetCCT];
  99. gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
  100. return gdtEvent;
  101. }
  102. + (GDTCOREvent *)createRandomInternalTraceGDTEvent:(NSString *)traceName {
  103. FPRMSGPerfMetric *perfMetric = [self createRandomInternalPerfMetric:traceName];
  104. NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
  105. GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetCCT];
  106. gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
  107. return gdtEvent;
  108. }
  109. + (GDTCOREvent *)createRandomNetworkGDTEvent:(NSString *)url {
  110. FPRMSGPerfMetric *perfMetric = [self createRandomNetworkPerfMetric:url];
  111. NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
  112. GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetCCT];
  113. gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
  114. return gdtEvent;
  115. }
  116. @end