Files
firebase-ios-sdk/FirebasePerformance/Tests/Unit/FPRTestUtils.m
T
Jeremy JiangandPaul Beusterien ec193d0150 Add Performance Support for Swift Package Manager (#8412)
* Create NanoPb code generation scripts (#8336)

* Create NanoPb code generation scripts

* Fix style and add README

* Fix copyright

* Update proto_generator.py

* Update README.md

* Create nanopb options file. (#8371)

* Create NanoPb code generation scripts

* Fix style and add README

* Fix copyright

* Update perf_metrics.options

* Update options with map

* Add generated proto files.

* Update imports.

* Convert Objective-C Classes to Nanopb (#8387)

* Convert all traces to nanopb

* Refactor for loop.

* Add set has_application_info to true.

* Incorporated comments.

* Fix style

* Create NanoPb code generation scripts (#8336)

* Create NanoPb code generation scripts

* Fix style and add README

* Fix copyright

* Update proto_generator.py

* Update README.md

* Create nanopb options file. (#8371)

* Create NanoPb code generation scripts

* Fix style and add README

* Fix copyright

* Update perf_metrics.options

* Update options with map

* Add generated proto files.

* Update imports.

* Convert Objective-C Classes to Nanopb (#8387)

* Convert all traces to nanopb

* Refactor for loop.

* Add set has_application_info to true.

* Incorporated comments.

* Fix style

* Fix style

* Convert nanopb struct to GDTCOREventDataObject and update the source code to use nanopb struct. (#8439)

* Convert all traces to nanopb

* Refactor for loop.

* WIP: nanopb conversion in FPRClient and FPREvent

* Update FPRClientTest.m

* Update FPRClient.m

* Update FPRClientTest.m

* Add set has_application_info to true.

* Remove proto imports.

* Set has_fields to be true in FPRTestUtils.m

* Completed GDTEvent conversion.

* Fix sampler tests.

* Fix style

* Refactor nanopb struct setter

* Fix style

* Fix pod-lib-lint failures.

* Update FPRClient with decoded string

* Set some "_has" fields to true.

* Add prefix to extern methods.

* Fix style.

* Update FPRClient to use trace.name without FPRDecodeString

* Fix style

* Incorporate comments.

* Integrate Performance with SPM (#8476)

* Convert all traces to nanopb

* Refactor for loop.

* WIP: nanopb conversion in FPRClient and FPREvent

* Update FPRClientTest.m

* Update FPRClient.m

* Update FPRClientTest.m

* Add set has_application_info to true.

* Remove proto imports.

* Set has_fields to be true in FPRTestUtils.m

* Completed GDTEvent conversion.

* Fix sampler tests.

* Fix style

* Refactor nanopb struct setter

* Fix style

* Fix pod-lib-lint failures.

* Update FPRClient with decoded string

* Set some "_has" fields to true.

* Add prefix to extern methods.

* Fix style.

* Update FPRClient to use trace.name without FPRDecodeString

* Fix style

* Update Package.swift

* Update Package.swift

* Update Package.swift

* Made SDK and unit tests buildable.

* Made all unit tests passing.

* Update keyWindow style.

* Add Performance to workflow.

* Update FPRUIViewControllerInstrument.h

* Incorporate comments.

* Add Performance to SwiftPMTests.

* Update style.

* Fix Unit tests and update workflow.

* Add FirebasePerformance wrapper

* Update import statement.

* Update style.

* Update performance.yml

* Create PerformanceUnit.xcscheme

* Update objc-module.m

* Update objc-module.m

* Updae objc-header.m

* Update objc-header.m

* Incorporate feedback.

* Update objc-header.m

* Organize folder structure to fix the spm tests.

* Update public import path

* Delete xcodebuild.log

* Update workflow files

* Fix failing swift-test for Perf SPM (#8507)

* Fix UIKit import

* Update FPRNetworkTraceTest.m

* Exclude TARGET_OS_MACCATALYST from objc header test

* Update main.swift

* Update main.swift

Co-authored-by: Paul Beusterien <paulbeusterien@google.com>

* Remove Protobuf dependency  (#8511)

* Remove protobuf dependency

* Update FirebasePerformance.podspec

* Incorporate comments.

* Update UIKit import

Co-authored-by: Paul Beusterien <paulbeusterien@google.com>
2021-08-10 13:41:18 -04:00

157 lines
6.3 KiB
Objective-C

// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "FirebasePerformance/Tests/Unit/FPRTestUtils.h"
#import "FirebasePerformance/Sources/FPRNanoPbUtils.h"
#import "FirebasePerformance/Sources/Gauges/Memory/FPRMemoryGaugeData.h"
#import "FirebasePerformance/Sources/Instrumentation/FPRNetworkTrace+Private.h"
#import "FirebasePerformance/Sources/Instrumentation/FPRNetworkTrace.h"
#import "FirebasePerformance/Sources/Timer/FIRTrace+Internal.h"
#import "FirebasePerformance/Sources/Timer/FIRTrace+Private.h"
#import "FirebasePerformance/Sources/Protogen/nanopb/perf_metric.nanopb.h"
static NSInteger const kLogSource = 462; // LogRequest_LogSource_Fireperf
@implementation FPRTestUtils
#pragma mark - Test utility methods
+ (NSBundle *)getBundle {
#if SWIFT_PACKAGE
return Firebase_PerformanceUnit_SWIFTPM_MODULE_BUNDLE();
#else
return [NSBundle bundleForClass:[FPRTestUtils class]];
#endif
}
+ (FIRTrace *)createRandomTraceWithName:(NSString *)traceName {
FIRTrace *trace = [[FIRTrace alloc] initWithName:traceName];
[trace start];
[trace stop];
// Make sure there are no sessions.
trace.activeSessions = [NSMutableArray array];
return trace;
}
+ (FIRTrace *)addVerboseSessionToTrace:(FIRTrace *)trace {
FPRSessionDetails *details =
[[FPRSessionDetails alloc] initWithSessionId:@"random" options:FPRSessionOptionsGauges];
trace.activeSessions = [[NSMutableArray alloc] initWithObjects:details, nil];
return trace;
}
+ (firebase_perf_v1_PerfMetric)createRandomPerfMetric:(NSString *)traceName {
firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
FIRTrace *trace = [FPRTestUtils createRandomTraceWithName:traceName];
// Make sure there are no sessions.
trace.activeSessions = [NSMutableArray array];
FPRSetTraceMetric(&perfMetric, FPRGetTraceMetric(trace));
return perfMetric;
}
+ (firebase_perf_v1_PerfMetric)createVerboseRandomPerfMetric:(NSString *)traceName {
firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
FIRTrace *trace = [FPRTestUtils createRandomTraceWithName:traceName];
trace = [FPRTestUtils addVerboseSessionToTrace:trace];
FPRSetTraceMetric(&perfMetric, FPRGetTraceMetric(trace));
return perfMetric;
}
+ (firebase_perf_v1_PerfMetric)createRandomInternalPerfMetric:(NSString *)traceName {
firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
FIRTrace *trace = [[FIRTrace alloc] initInternalTraceWithName:traceName];
[trace start];
[trace stop];
// Make sure there are no sessions.
trace.activeSessions = [NSMutableArray array];
FPRSetTraceMetric(&perfMetric, FPRGetTraceMetric(trace));
return perfMetric;
}
+ (firebase_perf_v1_PerfMetric)createRandomNetworkPerfMetric:(NSString *)url {
firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *URLRequest = [NSURLRequest requestWithURL:URL];
FPRNetworkTrace *networkTrace = [[FPRNetworkTrace alloc] initWithURLRequest:URLRequest];
[networkTrace start];
[networkTrace checkpointState:FPRNetworkTraceCheckpointStateInitiated];
[networkTrace checkpointState:FPRNetworkTraceCheckpointStateResponseReceived];
NSDictionary<NSString *, NSString *> *headerFields = @{@"Content-Type" : @"text/json"};
NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:URL
statusCode:200
HTTPVersion:@"HTTP/1.1"
headerFields:headerFields];
[networkTrace didReceiveData:[NSData data]];
[networkTrace didCompleteRequestWithResponse:response error:nil];
networkTrace.activeSessions = [NSMutableArray array];
FPRSetNetworkRequestMetric(&perfMetric, FPRGetNetworkRequestMetric(networkTrace));
return perfMetric;
}
+ (firebase_perf_v1_PerfMetric)createRandomGaugePerfMetric {
firebase_perf_v1_PerfMetric perfMetric = FPRGetPerfMetricMessage(@"RandomAppID");
NSMutableArray<NSObject *> *gauges = [[NSMutableArray alloc] init];
NSDate *date = [NSDate date];
FPRMemoryGaugeData *memoryData = [[FPRMemoryGaugeData alloc] initWithCollectionTime:date
heapUsed:5 * 1024
heapAvailable:10 * 1024];
[gauges addObject:memoryData];
firebase_perf_v1_GaugeMetric gaugeMetric = FPRGetGaugeMetric(gauges, @"123");
FPRSetGaugeMetric(&perfMetric, gaugeMetric);
return perfMetric;
}
+ (GDTCOREvent *)createRandomTraceGDTEvent:(NSString *)traceName {
firebase_perf_v1_PerfMetric perfMetric = [self createRandomPerfMetric:traceName];
NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetFLL];
gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
return gdtEvent;
}
+ (GDTCOREvent *)createRandomInternalTraceGDTEvent:(NSString *)traceName {
firebase_perf_v1_PerfMetric perfMetric = [self createRandomInternalPerfMetric:traceName];
NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetFLL];
gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
return gdtEvent;
}
+ (GDTCOREvent *)createRandomNetworkGDTEvent:(NSString *)url {
firebase_perf_v1_PerfMetric perfMetric = [self createRandomNetworkPerfMetric:url];
NSString *mappingID = [NSString stringWithFormat:@"%ld", (long)kLogSource];
GDTCOREvent *gdtEvent = [[GDTCOREvent alloc] initWithMappingID:mappingID target:kGDTCORTargetFLL];
gdtEvent.dataObject = [FPRGDTEvent gdtEventForPerfMetric:perfMetric];
return gdtEvent;
}
@end