CommandLineToolkit
118 строк · 3.9 Кб
1/*
2* Copyright (c) Avito Tech LLC
3*/
4
5import DateProviderTestHelpers
6import CLTLogging
7import CLTLoggingModels
8import Foundation
9import TestHelpers
10import Tmp
11import XCTest
12
13final class FileHandleLoggerHandlerTests: XCTestCase {
14lazy var tempFile = assertDoesNotThrow { try TemporaryFile(deleteOnDealloc: true) }
15
16lazy var loggerHandler = FileHandleLoggerHandler(
17dateProvider: DateProviderFixture(),
18fileHandle: tempFile.fileHandleForWriting,
19logEntryTextFormatter: SimpleLogEntryTextFormatter(),
20fileHandleShouldBeClosed: true,
21skipMetadataFlag: nil
22)
23
24func test___handling_coordinates___alters_message() throws {
25let logEntry = LogEntry(
26file: "file",
27line: 42,
28coordinates: [
29LogEntryCoordinate(name: "coordinate"),
30LogEntryCoordinate(name: "123"),
31],
32message: "message",
33timestamp: Date(),
34verbosity: Verbosity.info
35)
36loggerHandler.handle(logEntry: logEntry)
37
38XCTAssertEqual(
39try tempFileContents(),
40SimpleLogEntryTextFormatter().format(logEntry: logEntry) + "\n"
41)
42}
43
44func test___handling_coordinates___alters_message___filters_out_context_key_coordinates() throws {
45let logEntry = LogEntry(
46file: "file",
47line: 42,
48coordinates: [
49LogEntryCoordinate(name: "coordinate"),
50LogEntryCoordinate(name: "123"),
51LogEntryCoordinate(name: ContextualLogger.ContextKeys.hostname.rawValue, value: "value"),
52],
53message: "message",
54timestamp: Date(),
55verbosity: Verbosity.info
56)
57loggerHandler.handle(logEntry: logEntry)
58
59XCTAssertEqual(
60try tempFileContents(),
61SimpleLogEntryTextFormatter().format(
62logEntry: logEntry.with(
63coordinates: [
64LogEntryCoordinate(name: "coordinate"),
65LogEntryCoordinate(name: "123"),
66]
67)
68) + "\n"
69)
70}
71
72func test___non_closable_file___is_not_closed() throws {
73let fileHandler = FakeFileHandle()
74let loggerHandler = FileHandleLoggerHandler(
75dateProvider: DateProviderFixture(),
76fileHandle: fileHandler,
77logEntryTextFormatter: SimpleLogEntryTextFormatter(),
78fileHandleShouldBeClosed: false,
79skipMetadataFlag: nil
80)
81loggerHandler.tearDownLogging(timeout: 10)
82
83XCTAssertFalse(fileHandler.isClosed)
84}
85
86func test___closable_file___is_closed() throws {
87let fileHandler = FakeFileHandle()
88let loggerHandler = FileHandleLoggerHandler(
89dateProvider: DateProviderFixture(),
90fileHandle: fileHandler,
91logEntryTextFormatter: SimpleLogEntryTextFormatter(),
92fileHandleShouldBeClosed: true,
93skipMetadataFlag: nil
94)
95loggerHandler.tearDownLogging(timeout: 10)
96
97XCTAssertTrue(fileHandler.isClosed)
98}
99
100func test___closable_file___is_closed_only_once() throws {
101let fileHandler = FakeFileHandle()
102let loggerHandler = FileHandleLoggerHandler(
103dateProvider: DateProviderFixture(),
104fileHandle: fileHandler,
105logEntryTextFormatter: SimpleLogEntryTextFormatter(),
106fileHandleShouldBeClosed: true,
107skipMetadataFlag: nil
108)
109loggerHandler.tearDownLogging(timeout: 10)
110loggerHandler.tearDownLogging(timeout: 10)
111
112XCTAssertEqual(fileHandler.closeCounter, 1)
113}
114
115private func tempFileContents() throws -> String {
116return try String(contentsOf: tempFile.absolutePath.fileUrl)
117}
118}
119