// // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // #import "OWSScrubbingLogFormatter.h" #import NS_ASSUME_NONNULL_BEGIN @interface OWSScrubbingLogFormatterTest : XCTestCase @end @implementation OWSScrubbingLogFormatterTest - (DDLogMessage *)messageWithString:(NSString *)string { return [[DDLogMessage alloc] initWithMessage:string level:DDLogLevelInfo flag:0 context:0 file:nil function:nil line:0 tag:nil options:0 timestamp:[NSDate new]]; } - (void)testDataScrubbed { NSDictionary *expectedOutputs = @{ @"<01234567 89a23def 23234567 89ab1234>" : @"[ REDACTED_DATA:01... ]", @"My data is: <01234567 89a23def 23234567 89ab1223>" : @"My data is: [ REDACTED_DATA:01... ]", @"My data is <12345670 89a23def 23234567 89ab1223> their data is <87654321 89ab1234>" : @"My data is [ REDACTED_DATA:12... ] their data is [ REDACTED_DATA:87... ]" }; OWSScrubbingLogFormatter *formatter = [OWSScrubbingLogFormatter new]; // Other formatters add a dynamic date prefix to log lines. We truncate that when comparing our expected output. NSUInteger datePrefixLength = [formatter formatLogMessage:[self messageWithString:@""]].length; for (NSString *input in expectedOutputs) { NSString *rawActual = [formatter formatLogMessage:[self messageWithString:input]]; // strip out dynamic date portion of log line NSString *actual = [rawActual substringWithRange:NSMakeRange(datePrefixLength, rawActual.length - datePrefixLength)]; NSString *expected = expectedOutputs[input]; XCTAssertEqualObjects(expected, actual); } } - (void)testPhoneNumbersScrubbed { NSArray *phoneStrings = @[ @"+13331231234 ", @"+4113331231234", @"+13331231234 something something +13331231234", ]; for (NSString *phoneString in phoneStrings) { OWSScrubbingLogFormatter *formatter = [OWSScrubbingLogFormatter new]; NSString *messageText = [NSString stringWithFormat:@"My phone number is %@", phoneString]; NSString *actual = [formatter formatLogMessage:[self messageWithString:messageText]]; NSRange redactedRange = [actual rangeOfString:@"My phone number is [ REDACTED_PHONE_NUMBER:xxx234 ]"]; XCTAssertNotEqual(NSNotFound, redactedRange.location, "Failed to redact phone string: %@", phoneString); NSRange phoneNumberRange = [actual rangeOfString:phoneString]; XCTAssertEqual(NSNotFound, phoneNumberRange.location, "Failed to redact phone string: %@", phoneString); } } - (void)testNonPhonenumberNotScrubbed { OWSScrubbingLogFormatter *formatter = [OWSScrubbingLogFormatter new]; NSString *actual = [formatter formatLogMessage:[self messageWithString:[NSString stringWithFormat:@"Some unfiltered string"]]]; NSRange redactedRange = [actual rangeOfString:@"Some unfiltered string"]; XCTAssertNotEqual(NSNotFound, redactedRange.location, "Shouldn't touch non phone string."); } @end NS_ASSUME_NONNULL_END