Skip to content

Commit a66932c

Browse files
committed
Test cleanup
* Removed FIRLoggerTest as they mostly actually test `GULASLLogger` functionality now. * Renamed `GULLoggerInitializeASL` to `GULLoggerInitialize`. * Use dot-notation for the defaultLogger class property. * Removed unused debug only test methods.
1 parent 47adb90 commit a66932c

File tree

8 files changed

+87
-321
lines changed

8 files changed

+87
-321
lines changed

Example/Core/Tests/FIRLoggerTest.m

Lines changed: 2 additions & 257 deletions
Original file line numberDiff line numberDiff line change
@@ -12,268 +12,13 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
#ifdef DEBUG
16-
// The tests depend upon library methods only built with #ifdef DEBUG
17-
18-
#import "FIRTestCase.h"
19-
20-
// TODO - FIRLoggerTest should be split into a separate FIRLoggerTest and GULLoggerTest.
21-
// No test should include both includes.
2215
#import <FirebaseCore/FIRLogger.h>
23-
#import <GoogleUtilities/GULLogger.h>
24-
25-
#import <asl.h>
26-
27-
// The following constants are exposed from FIRLogger for unit tests.
28-
extern NSString *const kFIRDisableDebugModeApplicationArgument;
29-
extern NSString *const kFIREnableDebugModeApplicationArgument;
30-
31-
/// Key for the debug mode bit in NSUserDefaults.
32-
extern NSString *const kFIRPersistedDebugModeKey;
33-
34-
extern const char *kGULLoggerASLClientFacilityName;
3516

36-
extern void FIRResetLogger(void);
37-
38-
extern void FIRSetLoggerUserDefaults(NSUserDefaults *defaults);
39-
40-
extern aslclient getGULLoggerClient(void);
41-
42-
extern dispatch_queue_t getGULClientQueue(void);
43-
44-
extern BOOL getGULLoggerDebugMode(void);
45-
46-
static NSString *const kMessageCode = @"I-COR000001";
17+
#import "FIRTestCase.h"
4718

4819
@interface FIRLoggerTest : FIRTestCase
49-
50-
@property(nonatomic) NSString *randomLogString;
51-
52-
@property(nonatomic, strong) NSUserDefaults *defaults;
53-
5420
@end
5521

5622
@implementation FIRLoggerTest
57-
58-
- (void)setUp {
59-
[super setUp];
60-
FIRResetLogger();
61-
62-
// Stub NSUserDefaults for cleaner testing.
63-
_defaults = [[NSUserDefaults alloc] initWithSuiteName:@"com.firebase.logger_test"];
64-
FIRSetLoggerUserDefaults(_defaults);
65-
}
66-
67-
- (void)tearDown {
68-
[super tearDown];
69-
70-
_defaults = nil;
71-
}
72-
73-
// Test some stable variables to make sure they weren't accidently changed.
74-
- (void)testStableVariables {
75-
// Strings of type FIRLoggerServices.
76-
XCTAssertEqualObjects(kFIRLoggerABTesting, @"[Firebase/ABTesting]");
77-
XCTAssertEqualObjects(kFIRLoggerAdMob, @"[Firebase/AdMob]");
78-
XCTAssertEqualObjects(kFIRLoggerAnalytics, @"[Firebase/Analytics]");
79-
XCTAssertEqualObjects(kFIRLoggerAuth, @"[Firebase/Auth]");
80-
XCTAssertEqualObjects(kFIRLoggerCore, @"[Firebase/Core]");
81-
XCTAssertEqualObjects(kFIRLoggerCrash, @"[Firebase/Crash]");
82-
XCTAssertEqualObjects(kFIRLoggerDatabase, @"[Firebase/Database]");
83-
XCTAssertEqualObjects(kFIRLoggerDynamicLinks, @"[Firebase/DynamicLinks]");
84-
XCTAssertEqualObjects(kFIRLoggerInstanceID, @"[Firebase/InstanceID]");
85-
XCTAssertEqualObjects(kFIRLoggerInvites, @"[Firebase/Invites]");
86-
XCTAssertEqualObjects(kFIRLoggerMLKit, @"[Firebase/MLKit]");
87-
XCTAssertEqualObjects(kFIRLoggerMessaging, @"[Firebase/Messaging]");
88-
XCTAssertEqualObjects(kFIRLoggerRemoteConfig, @"[Firebase/RemoteConfig]");
89-
XCTAssertEqualObjects(kFIRLoggerStorage, @"[Firebase/Storage]");
90-
}
91-
92-
- (void)testInitializeASLForNonDebugMode {
93-
// Stub.
94-
id processInfoMock = [OCMockObject partialMockForObject:[NSProcessInfo processInfo]];
95-
NSArray *arguments = @[ kFIRDisableDebugModeApplicationArgument ];
96-
[[[processInfoMock stub] andReturn:arguments] arguments];
97-
98-
// Test.
99-
FIRLogError(kFIRLoggerCore, kMessageCode, @"Some error.");
100-
101-
// Assert.
102-
#if MAKE_THREAD_SAFE
103-
NSNumber *debugMode = [self.defaults objectForKey:kFIRPersistedDebugModeKey];
104-
XCTAssertNil(debugMode);
105-
XCTAssertFalse(getGULLoggerDebugMode());
106-
#endif
107-
108-
// Stop.
109-
[processInfoMock stopMocking];
110-
}
111-
112-
- (void)testInitializeASLForDebugModeWithArgument {
113-
// Stub.
114-
id processInfoMock = [OCMockObject partialMockForObject:[NSProcessInfo processInfo]];
115-
NSArray *arguments = @[ kFIREnableDebugModeApplicationArgument ];
116-
[[[processInfoMock stub] andReturn:arguments] arguments];
117-
118-
// Test.
119-
FIRLogError(kFIRLoggerCore, kMessageCode, @"Some error.");
120-
121-
#ifdef MAKE_THREAD_SAFE
122-
// Assert.
123-
NSNumber *debugMode = [self.defaults objectForKey:kGULPersistedDebugModeKey];
124-
XCTAssertTrue(debugMode.boolValue);
125-
XCTAssertTrue(getGULLoggerDebugMode());
126-
#endif
127-
128-
// Stop.
129-
[processInfoMock stopMocking];
130-
}
131-
132-
- (void)testInitializeASLForDebugModeWithUserDefaults {
133-
// Stub.
134-
NSNumber *debugMode = @YES;
135-
[self.defaults setBool:debugMode.boolValue forKey:kFIRPersistedDebugModeKey];
136-
137-
// Test.
138-
GULLogError(@"my service", NO, kMessageCode, @"Some error.");
139-
140-
// Assert.
141-
debugMode = [self.defaults objectForKey:kFIRPersistedDebugModeKey];
142-
XCTAssertTrue(debugMode.boolValue);
143-
}
144-
145-
- (void)testMessageCodeFormat {
146-
// Valid case.
147-
XCTAssertNoThrow(FIRLogError(kFIRLoggerCore, @"I-APP000001", @"Message."));
148-
149-
// An extra dash or missing dash should fail.
150-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"I-APP-000001", @"Message."));
151-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"IAPP000001", @"Message."));
152-
153-
// Wrong number of digits should fail.
154-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"I-APP00001", @"Message."));
155-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"I-APP0000001", @"Message."));
156-
157-
// Lowercase should fail.
158-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"I-app000001", @"Message."));
159-
160-
// nil or empty message code should fail.
161-
#pragma clang diagnostic push
162-
#pragma clang diagnostic ignored "-Wnonnull"
163-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, nil, @"Message."));
164-
#pragma clang diagnostic pop
165-
166-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"", @"Message."));
167-
168-
// Android message code should fail.
169-
XCTAssertThrows(FIRLogError(kFIRLoggerCore, @"A-APP000001", @"Message."));
170-
}
171-
172-
- (void)testLoggerInterface {
173-
XCTAssertNoThrow(FIRLogError(kFIRLoggerCore, kMessageCode, @"Message."));
174-
XCTAssertNoThrow(FIRLogError(kFIRLoggerCore, kMessageCode, @"Configure %@.", @"blah"));
175-
176-
XCTAssertNoThrow(FIRLogWarning(kFIRLoggerCore, kMessageCode, @"Message."));
177-
XCTAssertNoThrow(FIRLogWarning(kFIRLoggerCore, kMessageCode, @"Configure %@.", @"blah"));
178-
179-
XCTAssertNoThrow(FIRLogNotice(kFIRLoggerCore, kMessageCode, @"Message."));
180-
XCTAssertNoThrow(FIRLogNotice(kFIRLoggerCore, kMessageCode, @"Configure %@.", @"blah"));
181-
182-
XCTAssertNoThrow(FIRLogInfo(kFIRLoggerCore, kMessageCode, @"Message."));
183-
XCTAssertNoThrow(FIRLogInfo(kFIRLoggerCore, kMessageCode, @"Configure %@.", @"blah"));
184-
185-
XCTAssertNoThrow(FIRLogDebug(kFIRLoggerCore, kMessageCode, @"Message."));
186-
XCTAssertNoThrow(FIRLogDebug(kFIRLoggerCore, kMessageCode, @"Configure %@.", @"blah"));
187-
}
188-
189-
// asl_set_filter does not perform as expected in unit test environment with simulator. The
190-
// following test only checks whether the logs have been sent to system with the default settings in
191-
// the unit test environment.
192-
- (void)testSystemLogWithDefaultStatus {
193-
#if !(BUG128) // Disable until https://github.com/firebase/firebase-ios-sdk/issues/128 is fixed
194-
// Test fails on device and iOS 9 simulators - b/38130372
195-
return;
196-
#else
197-
// Sets the time interval that we need to wait in order to fetch all the logs.
198-
NSTimeInterval timeInterval = 0.1f;
199-
// Generates a random string each time and check whether it has been logged.
200-
// Log messages with Notice level and below should be logged to system/device by default.
201-
self.randomLogString = [NSUUID UUID].UUIDString;
202-
FIRLogError(kFIRLoggerCore, kMessageCode, @"%@", self.randomLogString);
203-
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:timeInterval]];
204-
XCTAssertTrue([self logExists]);
205-
206-
self.randomLogString = [NSUUID UUID].UUIDString;
207-
FIRLogWarning(kFIRLoggerCore, kMessageCode, @"%@", self.randomLogString);
208-
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:timeInterval]];
209-
XCTAssertTrue([self logExists]);
210-
211-
self.randomLogString = [NSUUID UUID].UUIDString;
212-
FIRLogNotice(kFIRLoggerCore, kMessageCode, @"%@", self.randomLogString);
213-
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:timeInterval]];
214-
XCTAssertTrue([self logExists]);
215-
216-
// Log messages with Info level and above should NOT be logged to system/device by default.
217-
self.randomLogString = [NSUUID UUID].UUIDString;
218-
FIRLogInfo(kFIRLoggerCore, kMessageCode, @"%@", self.randomLogString);
219-
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:timeInterval]];
220-
XCTAssertFalse([self logExists]);
221-
222-
self.randomLogString = [NSUUID UUID].UUIDString;
223-
FIRLogDebug(kFIRLoggerCore, kMessageCode, @"%@", self.randomLogString);
224-
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:timeInterval]];
225-
XCTAssertFalse([self logExists]);
226-
#endif
227-
}
228-
229-
// The FIRLoggerLevel enum must match the ASL_LEVEL_* constants, but we manually redefine
230-
// them in FIRLoggerLevel.h since we cannot include <asl.h> (see b/34976089 for more details).
231-
// This test ensures the constants match.
232-
- (void)testFIRLoggerLevelValues {
233-
XCTAssertEqual(FIRLoggerLevelError, ASL_LEVEL_ERR);
234-
XCTAssertEqual(FIRLoggerLevelWarning, ASL_LEVEL_WARNING);
235-
XCTAssertEqual(FIRLoggerLevelNotice, ASL_LEVEL_NOTICE);
236-
XCTAssertEqual(FIRLoggerLevelInfo, ASL_LEVEL_INFO);
237-
XCTAssertEqual(FIRLoggerLevelDebug, ASL_LEVEL_DEBUG);
238-
}
239-
240-
// Helper functions.
241-
- (BOOL)logExists {
242-
[self drainFIRClientQueue];
243-
NSString *correctMsg =
244-
[NSString stringWithFormat:@"%@[%@] %@", kFIRLoggerCore, kMessageCode, self.randomLogString];
245-
return [self messageWasLogged:correctMsg];
246-
}
247-
248-
- (void)drainFIRClientQueue {
249-
dispatch_semaphore_t workerSemaphore = dispatch_semaphore_create(0);
250-
dispatch_async(getGULClientQueue(), ^{
251-
dispatch_semaphore_signal(workerSemaphore);
252-
});
253-
dispatch_semaphore_wait(workerSemaphore, DISPATCH_TIME_FOREVER);
254-
}
255-
256-
- (BOOL)messageWasLogged:(NSString *)message {
257-
#pragma clang diagnostic push
258-
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
259-
aslmsg query = asl_new(ASL_TYPE_QUERY);
260-
asl_set_query(query, ASL_KEY_FACILITY, kGULLoggerASLClientFacilityName, ASL_QUERY_OP_EQUAL);
261-
aslresponse r = asl_search(getGULLoggerClient(), query);
262-
asl_free(query);
263-
aslmsg m;
264-
const char *val;
265-
NSMutableArray *allMsg = [[NSMutableArray alloc] init];
266-
while ((m = asl_next(r)) != NULL) {
267-
val = asl_get(m, ASL_KEY_MSG);
268-
if (val) {
269-
[allMsg addObject:[NSString stringWithUTF8String:val]];
270-
}
271-
}
272-
asl_free(m);
273-
asl_release(r);
274-
return [allMsg containsObject:message];
275-
#pragma clang pop
276-
}
277-
23+
// TODO(bstpierre):Create FIRLogger tests which do not depend on GULLogger implementation details.
27824
@end
279-
#endif

Example/Firebase.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5754,7 +5754,7 @@
57545754
DEBUG_INFORMATION_FORMAT = dwarf;
57555755
DEVELOPMENT_TEAM = 4ANB9W7R3P;
57565756
GCC_C_LANGUAGE_STANDARD = gnu11;
5757-
INFOPLIST_FILE = $SRCROOT/DynamicLinks/FDLBuilderTestAppObjC/Info.plist;
5757+
INFOPLIST_FILE = "$SRCROOT/DynamicLinks/FDLBuilderTestAppObjC/Info.plist";
57585758
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
57595759
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
57605760
MTL_ENABLE_DEBUG_INFO = YES;
@@ -5788,7 +5788,7 @@
57885788
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
57895789
DEVELOPMENT_TEAM = 4ANB9W7R3P;
57905790
GCC_C_LANGUAGE_STANDARD = gnu11;
5791-
INFOPLIST_FILE = $SRCROOT/DynamicLinks/FDLBuilderTestAppObjC/Info.plist;
5791+
INFOPLIST_FILE = "$SRCROOT/DynamicLinks/FDLBuilderTestAppObjC/Info.plist";
57925792
IPHONEOS_DEPLOYMENT_TARGET = 11.4;
57935793
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
57945794
MTL_ENABLE_DEBUG_INFO = NO;

Firebase/Core/FIRLogger.m

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ void FIRLoggerInitializeASL() {
8787
[sFIRLoggerUserDefaults setBool:YES forKey:kFIRPersistedDebugModeKey];
8888
forceDebugMode = YES;
8989
}
90-
GULLoggerInitializeASL();
90+
GULLoggerInitialize();
9191
if (overrideSTDERR) {
9292
GULLoggerEnableSTDERR();
9393
}
@@ -106,20 +106,6 @@ void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel) {
106106
GULSetLoggerLevel((GULLoggerLevel)loggerLevel);
107107
}
108108

109-
#ifdef DEBUG
110-
void FIRResetLogger() {
111-
extern void GULResetLogger(void);
112-
sFIRLoggerOnceToken = 0;
113-
[sFIRLoggerUserDefaults removeObjectForKey:kFIRPersistedDebugModeKey];
114-
sFIRLoggerUserDefaults = nil;
115-
GULResetLogger();
116-
}
117-
118-
void FIRSetLoggerUserDefaults(NSUserDefaults *defaults) {
119-
sFIRLoggerUserDefaults = defaults;
120-
}
121-
#endif
122-
123109
/**
124110
* Check if the level is high enough to be loggable.
125111
*

GoogleUtilities/Example/GoogleUtilities.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; };
1414
6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };
1515
6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };
16+
C8042CCE220C7B69009A8CCF /* GULASLLoggerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = C8042CCD220C7B69009A8CCF /* GULASLLoggerTest.m */; };
1617
DE5CF98E20F686310063FFDD /* GULAppEnvironmentUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DE5CF98C20F686290063FFDD /* GULAppEnvironmentUtilTest.m */; };
1718
DE84BBC421D7EC900048A176 /* GULUserDefaultsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DE84BBC321D7EC900048A176 /* GULUserDefaultsTests.m */; };
1819
DE84BBC521D7EC900048A176 /* GULUserDefaultsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DE84BBC321D7EC900048A176 /* GULUserDefaultsTests.m */; };
@@ -93,6 +94,7 @@
9394
6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
9495
6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = "<group>"; };
9596
7BEA793625C8DE7C8EC60006 /* GoogleUtilities.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = GoogleUtilities.podspec; path = ../GoogleUtilities.podspec; sourceTree = "<group>"; };
97+
C8042CCD220C7B69009A8CCF /* GULASLLoggerTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GULASLLoggerTest.m; sourceTree = "<group>"; };
9698
DE5CF98C20F686290063FFDD /* GULAppEnvironmentUtilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GULAppEnvironmentUtilTest.m; sourceTree = "<group>"; };
9799
DE84BBC321D7EC900048A176 /* GULUserDefaultsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GULUserDefaultsTests.m; sourceTree = "<group>"; };
98100
DEC977D320F68C3300014E20 /* GULReachabilityCheckerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GULReachabilityCheckerTest.m; sourceTree = "<group>"; };
@@ -311,6 +313,7 @@
311313
isa = PBXGroup;
312314
children = (
313315
DEC977DF20F6A7A700014E20 /* GULLoggerTest.m */,
316+
C8042CCD220C7B69009A8CCF /* GULASLLoggerTest.m */,
314317
);
315318
path = Logger;
316319
sourceTree = "<group>";
@@ -616,6 +619,7 @@
616619
DEC977D820F68C3300014E20 /* GULMutableDictionaryTest.m in Sources */,
617620
DEC977E120F6A7C100014E20 /* GULLoggerTest.m in Sources */,
618621
DEC977D920F68C3300014E20 /* GULNetworkTest.m in Sources */,
622+
C8042CCE220C7B69009A8CCF /* GULASLLoggerTest.m in Sources */,
619623
EFBE67FA2101401100E756A7 /* GULSwizzlerTest.m in Sources */,
620624
EFBE67FD2101401100E756A7 /* GULObjectSwizzlerTest.m in Sources */,
621625
EFBE67FE2101401100E756A7 /* GULRuntimeClassSnapshotTests.m in Sources */,
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2019 Google
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+
15+
#import <OCMock/OCMock.h>
16+
#import <XCTest/XCTest.h>
17+
18+
#import <GoogleUtilities/GULLogger.h>
19+
20+
#import <asl.h>
21+
22+
@interface GULASLLoggerTest : XCTestCase
23+
@end
24+
25+
@implementation GULASLLoggerTest
26+
27+
- (void)setUp {
28+
// Clear out any logger state as though the app just launched.
29+
}
30+
31+
// TODO(bstpierre): Write Tests
32+
33+
@end

0 commit comments

Comments
 (0)