From a47828e04c0c4fbdb25f7ce7aa65f2f75fe96699 Mon Sep 17 00:00:00 2001 From: Mike Bruin Date: Mon, 27 Jan 2025 12:42:35 -0500 Subject: [PATCH] Changed it to pass the AttributeValidator in as a parameter to the handled exception, so it can be replaced for testing --- Agent/General/NewRelicAgentInternal.m | 4 +- .../HandledException/NRMAHandledExceptions.h | 3 +- .../HandledException/NRMAHandledExceptions.mm | 7 +-- .../NRMAHandledExcaptionStressor.mm | 3 +- .../TestHandledExceptionController.mm | 52 +++++++++++++------ 5 files changed, 46 insertions(+), 23 deletions(-) diff --git a/Agent/General/NewRelicAgentInternal.m b/Agent/General/NewRelicAgentInternal.m index 9ea1d4b2..2ddd7213 100644 --- a/Agent/General/NewRelicAgentInternal.m +++ b/Agent/General/NewRelicAgentInternal.m @@ -54,6 +54,7 @@ #import "NRMAUDIDManager.h" #import "NRMASupportMetricHelper.h" #import "NRAutoLogCollector.h" +#import "NRMAAttributeValidator.h" // Support for teardown and re-setup of the agent within a process lifetime for our test harness @@ -568,7 +569,8 @@ - (void) onSessionStart { sessionStartTime:self.appSessionStartDate agentConfiguration:self.agentConfiguration platform:[NewRelicInternalUtils osName] - sessionId:[self currentSessionId]]; + sessionId:[self currentSessionId] + attributeValidator:[[NRMAAttributeValidator alloc] init]]; if (status != NotReachable) { // Because we support offline mode check if we're online before sending the handled exceptions [self.handledExceptionsController processAndPublishPersistedReports]; diff --git a/Agent/HandledException/NRMAHandledExceptions.h b/Agent/HandledException/NRMAHandledExceptions.h index 2578cf18..5892a319 100644 --- a/Agent/HandledException/NRMAHandledExceptions.h +++ b/Agent/HandledException/NRMAHandledExceptions.h @@ -24,7 +24,8 @@ extern const NSString* kHexBackupStoreFolder; sessionStartTime:(NSDate*)sessionStartDate agentConfiguration:(NRMAAgentConfiguration*)agentConfiguration platform:(NSString*)platform - sessionId:(NSString*)sessionId; + sessionId:(NSString*)sessionId + attributeValidator:(id) attributeValidator; - (void) recordHandledException:(NSException*) exception attributes:(NSDictionary* _Nullable)attributes; diff --git a/Agent/HandledException/NRMAHandledExceptions.mm b/Agent/HandledException/NRMAHandledExceptions.mm index be2d7243..92be8a1f 100644 --- a/Agent/HandledException/NRMAHandledExceptions.mm +++ b/Agent/HandledException/NRMAHandledExceptions.mm @@ -51,7 +51,7 @@ - (void) dealloc { self.sessionId = nil; self.sessionStartDate = nil; - _attributeValidator = nil; + [_attributeValidator release]; [super dealloc]; } @@ -60,7 +60,8 @@ - (instancetype) initWithAnalyticsController:(NRMAAnalytics*)analytics sessionStartTime:(NSDate*)sessionStartDate agentConfiguration:(NRMAAgentConfiguration*)agentConfiguration platform:(NSString*)platform - sessionId:(NSString*)sessionId { + sessionId:(NSString*)sessionId + attributeValidator:(id) attributeValidator { if (analytics == nil || sessionStartDate == nil || [agentConfiguration applicationToken] == nil || platform == nil || sessionId == nil) { NSMutableArray* missingParams = [[NSMutableArray new] autorelease]; if ([agentConfiguration applicationToken] == nil) [missingParams addObject:@"appToken"]; @@ -75,7 +76,7 @@ - (instancetype) initWithAnalyticsController:(NRMAAnalytics*)analytics if (self) { analyticsParent = analytics; - _attributeValidator = [[NRMAAttributeValidator alloc] init]; + _attributeValidator = [attributeValidator retain]; _analytics = std::shared_ptr([analytics analyticsController]); self.sessionStartDate = sessionStartDate; diff --git a/Tests/Stress-Tests/Handled Exception Tests/NRMAHandledExcaptionStressor.mm b/Tests/Stress-Tests/Handled Exception Tests/NRMAHandledExcaptionStressor.mm index 210d1db6..b6c2d871 100644 --- a/Tests/Stress-Tests/Handled Exception Tests/NRMAHandledExcaptionStressor.mm +++ b/Tests/Stress-Tests/Handled Exception Tests/NRMAHandledExcaptionStressor.mm @@ -45,7 +45,8 @@ - (void)setUp { sessionStartTime:[NSDate date] agentConfiguration:_agentConfiguration platform:@"iOS" - sessionId:@"id"]; + sessionId:@"id" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; NSUInteger procCount = [[NSProcessInfo processInfo] processorCount]; self.semaphore = dispatch_semaphore_create(procCount); diff --git a/Tests/Unit-Tests/NewRelicAgentTests/Handled-Exception-Tests/TestHandledExceptionController.mm b/Tests/Unit-Tests/NewRelicAgentTests/Handled-Exception-Tests/TestHandledExceptionController.mm index fe5c184b..5db697b6 100644 --- a/Tests/Unit-Tests/NewRelicAgentTests/Handled-Exception-Tests/TestHandledExceptionController.mm +++ b/Tests/Unit-Tests/NewRelicAgentTests/Handled-Exception-Tests/TestHandledExceptionController.mm @@ -13,6 +13,7 @@ #import "NRMAAgentConfiguration.h" #import "NewRelicInternalUtils.h" +#import "NRMAAttributeValidator.h" #import #import "NRAgentTestBase.h" @@ -63,14 +64,16 @@ - (void) testBadParams { sessionStartTime:0 agentConfiguration:nil platform:nil - sessionId:nil]); + sessionId:nil + attributeValidator:nil]); NRMAAnalytics* analytics = [[NRMAAnalytics alloc] initWithSessionStartTimeMS:0]; NRMAHandledExceptions* exceptions = [[NRMAHandledExceptions alloc] initWithAnalyticsController:nil sessionStartTime:0 agentConfiguration:nil platform:nil - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -81,7 +84,8 @@ - (void) testBadParams { sessionStartTime:0 agentConfiguration:nil platform:nil - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -94,7 +98,8 @@ - (void) testBadParams { sessionStartTime:0 agentConfiguration:agentConfig platform:nil - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -104,7 +109,8 @@ - (void) testBadParams { sessionStartTime:0 agentConfiguration:agentConfig platform:@"iOS" - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -119,14 +125,16 @@ - (void) testBadParamsNewEventSystem { sessionStartTime:0 agentConfiguration:nil platform:nil - sessionId:nil]); + sessionId:nil + attributeValidator:nil]); NRMAAnalytics* analytics = [[NRMAAnalytics alloc] initWithSessionStartTimeMS:0]; NRMAHandledExceptions* exceptions = [[NRMAHandledExceptions alloc] initWithAnalyticsController:nil sessionStartTime:0 agentConfiguration:nil platform:nil - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -137,7 +145,8 @@ - (void) testBadParamsNewEventSystem { sessionStartTime:0 agentConfiguration:nil platform:nil - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -150,7 +159,8 @@ - (void) testBadParamsNewEventSystem { sessionStartTime:0 agentConfiguration:agentConfig platform:nil - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -160,7 +170,8 @@ - (void) testBadParamsNewEventSystem { sessionStartTime:0 agentConfiguration:agentConfig platform:@"iOS" - sessionId:nil]; + sessionId:nil + attributeValidator:nil]; XCTAssertTrue(exceptions == nil); @@ -180,7 +191,8 @@ - (void) testHandleException { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; XCTAssertNoThrow([hexController recordHandledException:[NSException exceptionWithName:@"Hot Tea Exception" reason:@"the Tea is too hot" @@ -211,7 +223,8 @@ - (void) testHandleExceptionWithStackTrace { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; id dict = @{@"name": @"Exception name not found", @"reason": @"Reason not found", @@ -238,7 +251,8 @@ - (void) testHandleExceptionWithStackTraceNewEventSystem { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; id dict = @{@"name": @"Exception name not found", @"reason": @"Reason not found", @@ -266,7 +280,8 @@ - (void) testPlatform { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; XCTAssertTrue([hexController fbsPlatformFromString:@"iOS"] == com::newrelic::mobile::fbs::Platform_iOS, @"Method returned %d, but should be %d", [hexController fbsPlatformFromString:@"iOS"],com::newrelic::mobile::fbs::Platform_iOS ); XCTAssertTrue([hexController fbsPlatformFromString:@"tvOS"] == com::newrelic::mobile::fbs::Platform_tvOS,@"Method returned %d, but should be %d", [hexController fbsPlatformFromString:@"tvOS"],com::newrelic::mobile::fbs::Platform_tvOS); @@ -284,7 +299,8 @@ - (void) testDontRecordUnThrownExceptions { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; id mockLogger = [OCMockObject mockForClass:[NRLogger class]]; @@ -319,7 +335,8 @@ - (void) testRecordError { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; NSError* error = [NSError errorWithDomain:@"" code:NSURLErrorUnknown userInfo:@{}]; @@ -351,7 +368,8 @@ - (void) testRecordErrorNewEventSystem { sessionStartTime:[NSDate new] agentConfiguration:agentConfig platform:[NewRelicInternalUtils osName] - sessionId:@"sessionId"]; + sessionId:@"sessionId" + attributeValidator:[[NRMAAttributeValidator alloc] init]]; NSError* error = [NSError errorWithDomain:@"" code:NSURLErrorUnknown userInfo:@{}];