Skip to content

Commit 1ef1da5

Browse files
committed
Trying to detect writes for logging tests
1 parent 5464124 commit 1ef1da5

File tree

2 files changed

+79
-11
lines changed

2 files changed

+79
-11
lines changed

Tests/Unit-Tests/NewRelicAgentTests/Uncategorized/NRLoggerTests.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@
1616
NSString* category;
1717
NSString* name;
1818
}
19+
@property (nonatomic) int fileDescriptor;
20+
@property (nonatomic, strong) dispatch_source_t source;
1921
@end

Tests/Unit-Tests/NewRelicAgentTests/Uncategorized/NRLoggerTests.m

Lines changed: 77 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,35 @@ - (void) setUp
5252

5353
[NRLogger clearLog];
5454

55+
// Open a file descriptor for the file
56+
self.fileDescriptor = open([[NRLogger logFilePath] fileSystemRepresentation], O_EVTONLY);
57+
if (self.fileDescriptor < 0) {
58+
XCTFail(@"Failed to open file descriptor");
59+
return;
60+
}
61+
62+
// Set up dispatch source for file monitoring
63+
self.source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, self.fileDescriptor, DISPATCH_VNODE_WRITE, DISPATCH_TARGET_QUEUE_DEFAULT);
64+
65+
__weak typeof(self) weakSelf = self;
66+
dispatch_source_set_cancel_handler(self.source, ^{
67+
if (weakSelf.fileDescriptor) {
68+
close(weakSelf.fileDescriptor);
69+
weakSelf.fileDescriptor = 0;
70+
}
71+
});
72+
5573

5674
}
5775
- (void) tearDown
5876
{
77+
if (self.fileDescriptor > 0) {
78+
close(self.fileDescriptor);
79+
}
80+
if (self.source) {
81+
dispatch_source_cancel(self.source);
82+
}
83+
5984
[NRMAMeasurements removeMeasurementConsumer:helper];
6085
helper = nil;
6186

@@ -82,7 +107,7 @@ - (void) testNRLogger {
82107
}];
83108

84109
sleep(5);
85-
110+
86111
NSError* error;
87112
NSData* logData = [NRLogger logFileData:&error];
88113
if(error){
@@ -151,8 +176,22 @@ - (void) testRemoteLogLevels {
151176
// Set the remote log level to Debug.
152177
[NRLogger setRemoteLogLevel:NRLogLevelDebug];
153178

154-
sleep(1);
155-
179+
// Set up the expectation
180+
XCTestExpectation *fileWrittenExpectation = [self expectationWithDescription:@"File has been modified"];
181+
182+
__block int count = 0;
183+
dispatch_source_set_event_handler(self.source, ^{
184+
count++;
185+
if(count == 7){
186+
// Fulfill the expectation when a write is detected
187+
sleep(1);
188+
[fileWrittenExpectation fulfill];
189+
}
190+
});
191+
192+
// Start monitoring
193+
dispatch_resume(self.source);
194+
156195
// Seven messages should reach the remote log file for upload.
157196

158197
[NewRelic logInfo: @"Info Log..."];
@@ -168,7 +207,7 @@ - (void) testRemoteLogLevels {
168207
@"additionalAttribute2": @"attribute2"
169208
}];
170209

171-
sleep(5);
210+
[self waitForExpectationsWithTimeout:5 handler:nil];
172211

173212
NSError* error;
174213
NSData* logData = [NRLogger logFileData:&error];
@@ -221,10 +260,23 @@ - (void) testLocalLogLevels {
221260
// Set the remote log level to Info.
222261
[NRLogger setRemoteLogLevel:NRLogLevelInfo];
223262

224-
sleep(1);
225-
263+
// Set up the expectation
264+
XCTestExpectation *fileWrittenExpectation = [self expectationWithDescription:@"File has been modified"];
265+
266+
__block int count = 0;
267+
dispatch_source_set_event_handler(self.source, ^{
268+
count++;
269+
if(count == 4){
270+
// Fulfill the expectation when a write is detected
271+
sleep(1);
272+
[fileWrittenExpectation fulfill];
273+
}
274+
});
275+
276+
// Start monitoring
277+
dispatch_resume(self.source);
278+
226279
// Seven messages should reach the remote log file for upload.
227-
228280
[NewRelic logInfo: @"Info Log..."];
229281
[NewRelic logError: @"Error Log..."];
230282
[NewRelic logVerbose:@"Verbose Log..."];
@@ -238,7 +290,7 @@ - (void) testLocalLogLevels {
238290
@"additionalAttribute2": @"attribute2"
239291
}];
240292

241-
sleep(5);
293+
[self waitForExpectationsWithTimeout:5 handler:nil];
242294

243295
NSError* error;
244296
NSData* logData = [NRLogger logFileData:&error];
@@ -289,8 +341,21 @@ - (void) testAutoCollectedLogs {
289341
[NRLogger setRemoteLogLevel:NRLogLevelDebug];
290342
XCTAssertTrue([NRAutoLogCollector redirectStandardOutputAndError]);
291343

292-
sleep(1);
293-
344+
// Set up the expectation
345+
XCTestExpectation *fileWrittenExpectation = [self expectationWithDescription:@"File has been modified"];
346+
347+
__block int count = 0;
348+
dispatch_source_set_event_handler(self.source, ^{
349+
count++;
350+
if(count == 5){
351+
// Fulfill the expectation when a write is detected
352+
sleep(1);
353+
[fileWrittenExpectation fulfill];
354+
}
355+
});
356+
357+
// Start monitoring
358+
dispatch_resume(self.source);
294359
// Three messages should reach the remote log file for upload.
295360
NSLog(@"NSLog Test \n\n");
296361
os_log_t customLog = os_log_create("com.agent.tests", "logTest");
@@ -300,7 +365,8 @@ - (void) testAutoCollectedLogs {
300365
os_log_error(customLog, "This is an error os_log message.\n");
301366
os_log_fault(customLog, "This is a fault os_log message.\n");
302367

303-
sleep(5);
368+
[self waitForExpectationsWithTimeout:5 handler:nil];
369+
304370
[NRAutoLogCollector restoreStandardOutputAndError];
305371

306372
NSError* error;

0 commit comments

Comments
 (0)