zashi-ios-wallet-private/secantTests/UtilTests/LoggerTests.swift

274 lines
8.5 KiB
Swift

//
// LoggerTests.swift
// secantTests
//
// Created by Lukáš Korba on 24.01.2023.
//
import XCTest
@testable import secant_testnet
import OSLog
import ZcashLightClientKit
class LoggerTests: XCTestCase {
let timeToPast: TimeInterval = 0.1
func testOSLogger_loggingAndExport() throws {
let category = "testOSLogger_loggingAndExport"
let osLogger = OSLogger(logLevel: .debug, category: category)
let testMessage = "test message"
osLogger.debug(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
func testOSLogger_DebugLevel_DebugLog() throws {
let category = "testOSLogger_DebugLevel_DebugLog"
let osLogger = OSLogger(logLevel: .debug, category: category)
let testMessage = "debug message"
osLogger.debug(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
func testOSLogger_ErrorLevel_ErrorLog() throws {
let category = "testOSLogger_ErrorLevel_ErrorLog"
let osLogger = OSLogger(logLevel: .debug, category: category)
let testMessage = "error message"
osLogger.error(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
func testOSLogger_WarningLevel_WarningLog() throws {
let category = "testOSLogger_WarningLevel_WarningLog"
let osLogger = OSLogger(logLevel: .warning, category: category)
let testMessage = "warning message"
osLogger.warn(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
func testOSLogger_EventLevel_EventLog() throws {
let category = "testOSLogger_EventLevel_EventLog"
let osLogger = OSLogger(logLevel: .event, category: category)
let testMessage = "event message"
osLogger.event(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
func testOSLogger_InfoLevel_InfoLog() throws {
let category = "testOSLogger_InfoLevel_InfoLog"
let osLogger = OSLogger(logLevel: .info, category: category)
let testMessage = "info message"
osLogger.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
func testOSLogger_DebugLevel_OtherLogs() throws {
let category = "testOSLogger_DebugLevel_OtherLogs"
let osLogger = OSLogger(logLevel: .debug, category: category)
let testMessage = "debug message"
osLogger.debug(testMessage)
osLogger.error(testMessage)
osLogger.warn(testMessage)
osLogger.event(testMessage)
osLogger.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
guard let logs else { return }
XCTAssertEqual(logs.count, 5)
}
func testOSLogger_ErrorLevel_OtherLogs() throws {
let category = "testOSLogger_ErrorLevel_OtherLogs"
let osLogger = OSLogger(logLevel: .error, category: category)
let testMessage = "debug message"
osLogger.debug(testMessage)
osLogger.error(testMessage)
osLogger.warn(testMessage)
osLogger.event(testMessage)
osLogger.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
guard let logs else { return }
XCTAssertEqual(logs.count, 4)
}
func testOSLogger_WarningLevel_OtherLogs() throws {
let category = "testOSLogger_WarningLevel_OtherLogs"
let osLogger = OSLogger(logLevel: .warning, category: category)
let testMessage = "debug message"
osLogger.debug(testMessage)
osLogger.error(testMessage)
osLogger.warn(testMessage)
osLogger.event(testMessage)
osLogger.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
guard let logs else { return }
XCTAssertEqual(logs.count, 3)
}
func testOSLogger_EventLevel_OtherLogs() throws {
let category = "testOSLogger_EventLevel_OtherLogs"
let osLogger = OSLogger(logLevel: .event, category: category)
let testMessage = "debug message"
osLogger.debug(testMessage)
osLogger.error(testMessage)
osLogger.warn(testMessage)
osLogger.event(testMessage)
osLogger.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
guard let logs else { return }
XCTAssertEqual(logs.count, 2)
}
func testOSLogger_InfoLevel_OtherLogs() throws {
let category = "testOSLogger_InfoLevel_OtherLogs"
let osLogger = OSLogger(logLevel: .info, category: category)
let testMessage = "debug message"
osLogger.debug(testMessage)
osLogger.error(testMessage)
osLogger.warn(testMessage)
osLogger.event(testMessage)
osLogger.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
}
func testWalletLogger() throws {
let category = "testWalletLogger"
walletLogger = OSLogger(logLevel: .info, category: category)
let testMessage = "wallet test message"
LoggerProxy.info(testMessage)
let logs = TestLogStore.exportCategory(category, hoursToThePast: timeToPast)
XCTAssertNotNil(logs)
guard let logs else { return }
XCTAssertEqual(logs.count, 1)
let loggedMessage = logs[0].osLoggedMessage()
XCTAssertEqual(testMessage, loggedMessage)
}
}
extension String {
func osLoggedMessage() -> String? {
let split = components(separatedBy: "-> ")
if split.count == 2 {
return split[1]
}
return nil
}
}
enum TestLogStore {
static func exportCategory(_ category: String, hoursToThePast: TimeInterval = 24) -> [String]? {
guard let bundle = Bundle.main.bundleIdentifier else { return nil }
do {
let store = try OSLogStore(scope: .currentProcessIdentifier)
let date = Date.now.addingTimeInterval(-hoursToThePast * 3600)
let position = store.position(date: date)
var entries: [String] = []
entries = try store
.getEntries(at: position)
.compactMap { $0 as? OSLogEntryLog }
.filter { $0.subsystem == bundle && $0.category == category }
.map { "[\($0.date.formatted())] \($0.composedMessage)" }
return entries
} catch {
return nil
}
}
}