diff options
author | Casper Beyer <caspervonb@pm.me> | 2021-02-02 19:05:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-02 12:05:46 +0100 |
commit | 6abf126c2a7a451cded8c6b5e6ddf1b69c84055d (patch) | |
tree | fd94c013a19fcb38954844085821ec1601c20e18 /std/log/handlers_test.ts | |
parent | a2b5d44f1aa9d64f448a2a3cc2001272e2f60b98 (diff) |
chore: remove std directory (#9361)
This removes the std folder from the tree.
Various parts of the tests are pretty tightly dependent
on std (47 direct imports and 75 indirect imports, not
counting the cli tests that use them as fixtures) so I've
added std as a submodule for now.
Diffstat (limited to 'std/log/handlers_test.ts')
-rw-r--r-- | std/log/handlers_test.ts | 541 |
1 files changed, 0 insertions, 541 deletions
diff --git a/std/log/handlers_test.ts b/std/log/handlers_test.ts deleted file mode 100644 index a8e3a3df2..000000000 --- a/std/log/handlers_test.ts +++ /dev/null @@ -1,541 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { - assert, - assertEquals, - assertNotEquals, - assertThrowsAsync, -} from "../testing/asserts.ts"; -import { - getLevelByName, - getLevelName, - LevelName, - LogLevelNames, - LogLevels, -} from "./levels.ts"; -import { BaseHandler, FileHandler, RotatingFileHandler } from "./handlers.ts"; -import { LogRecord } from "./logger.ts"; -import { existsSync } from "../fs/exists.ts"; - -const LOG_FILE = "./test_log.file"; - -class TestHandler extends BaseHandler { - public messages: string[] = []; - - public log(str: string): void { - this.messages.push(str); - } -} - -Deno.test("simpleHandler", function (): void { - const cases = new Map<number, string[]>([ - [ - LogLevels.DEBUG, - [ - "DEBUG debug-test", - "INFO info-test", - "WARNING warning-test", - "ERROR error-test", - "CRITICAL critical-test", - ], - ], - [ - LogLevels.INFO, - [ - "INFO info-test", - "WARNING warning-test", - "ERROR error-test", - "CRITICAL critical-test", - ], - ], - [ - LogLevels.WARNING, - ["WARNING warning-test", "ERROR error-test", "CRITICAL critical-test"], - ], - [LogLevels.ERROR, ["ERROR error-test", "CRITICAL critical-test"]], - [LogLevels.CRITICAL, ["CRITICAL critical-test"]], - ]); - - for (const [testCase, messages] of cases.entries()) { - const testLevel = getLevelName(testCase); - const handler = new TestHandler(testLevel); - - for (const levelName of LogLevelNames) { - const level = getLevelByName(levelName as LevelName); - handler.handle( - new LogRecord({ - msg: `${levelName.toLowerCase()}-test`, - args: [], - level: level, - loggerName: "default", - }), - ); - } - - assertEquals(handler.level, testCase); - assertEquals(handler.levelName, testLevel); - assertEquals(handler.messages, messages); - } -}); - -Deno.test("testFormatterAsString", function (): void { - const handler = new TestHandler("DEBUG", { - formatter: "test {levelName} {msg}", - }); - - handler.handle( - new LogRecord({ - msg: "Hello, world!", - args: [], - level: LogLevels.DEBUG, - loggerName: "default", - }), - ); - - assertEquals(handler.messages, ["test DEBUG Hello, world!"]); -}); - -Deno.test("testFormatterWithEmptyMsg", function () { - const handler = new TestHandler("DEBUG", { - formatter: "test {levelName} {msg}", - }); - - handler.handle( - new LogRecord({ - msg: "", - args: [], - level: LogLevels.DEBUG, - loggerName: "default", - }), - ); - - assertEquals(handler.messages, ["test DEBUG "]); -}); - -Deno.test("testFormatterAsFunction", function (): void { - const handler = new TestHandler("DEBUG", { - formatter: (logRecord): string => - `fn formatter ${logRecord.levelName} ${logRecord.msg}`, - }); - - handler.handle( - new LogRecord({ - msg: "Hello, world!", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); - - assertEquals(handler.messages, ["fn formatter ERROR Hello, world!"]); -}); - -Deno.test({ - name: "FileHandler with mode 'w' will wipe clean existing log file", - async fn() { - const fileHandler = new FileHandler("WARNING", { - filename: LOG_FILE, - mode: "w", - }); - - await fileHandler.setup(); - fileHandler.handle( - new LogRecord({ - msg: "Hello World", - args: [], - level: LogLevels.WARNING, - loggerName: "default", - }), - ); - await fileHandler.destroy(); - const firstFileSize = (await Deno.stat(LOG_FILE)).size; - - await fileHandler.setup(); - fileHandler.handle( - new LogRecord({ - msg: "Hello World", - args: [], - level: LogLevels.WARNING, - loggerName: "default", - }), - ); - await fileHandler.destroy(); - const secondFileSize = (await Deno.stat(LOG_FILE)).size; - - assertEquals(secondFileSize, firstFileSize); - Deno.removeSync(LOG_FILE); - }, -}); - -Deno.test({ - name: "FileHandler with mode 'x' will throw if log file already exists", - async fn() { - const fileHandler = new FileHandler("WARNING", { - filename: LOG_FILE, - mode: "x", - }); - Deno.writeFileSync(LOG_FILE, new TextEncoder().encode("hello world")); - - await assertThrowsAsync(async () => { - await fileHandler.setup(); - }, Deno.errors.AlreadyExists); - - await fileHandler.destroy(); - - Deno.removeSync(LOG_FILE); - }, -}); - -Deno.test({ - name: - "RotatingFileHandler with mode 'w' will wipe clean existing log file and remove others", - async fn() { - Deno.writeFileSync(LOG_FILE, new TextEncoder().encode("hello world")); - Deno.writeFileSync( - LOG_FILE + ".1", - new TextEncoder().encode("hello world"), - ); - Deno.writeFileSync( - LOG_FILE + ".2", - new TextEncoder().encode("hello world"), - ); - Deno.writeFileSync( - LOG_FILE + ".3", - new TextEncoder().encode("hello world"), - ); - - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 50, - maxBackupCount: 3, - mode: "w", - }); - await fileHandler.setup(); - await fileHandler.destroy(); - - assertEquals((await Deno.stat(LOG_FILE)).size, 0); - assert(!existsSync(LOG_FILE + ".1")); - assert(!existsSync(LOG_FILE + ".2")); - assert(!existsSync(LOG_FILE + ".3")); - - Deno.removeSync(LOG_FILE); - }, -}); - -Deno.test({ - name: - "RotatingFileHandler with mode 'x' will throw if any log file already exists", - async fn() { - Deno.writeFileSync( - LOG_FILE + ".3", - new TextEncoder().encode("hello world"), - ); - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 50, - maxBackupCount: 3, - mode: "x", - }); - await assertThrowsAsync( - async () => { - await fileHandler.setup(); - }, - Deno.errors.AlreadyExists, - "Backup log file " + LOG_FILE + ".3 already exists", - ); - - fileHandler.destroy(); - Deno.removeSync(LOG_FILE + ".3"); - Deno.removeSync(LOG_FILE); - }, -}); - -Deno.test({ - name: "RotatingFileHandler with first rollover, monitor step by step", - async fn() { - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 25, - maxBackupCount: 3, - mode: "w", - }); - await fileHandler.setup(); - - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); // 'ERROR AAA\n' = 10 bytes - fileHandler.flush(); - assertEquals((await Deno.stat(LOG_FILE)).size, 10); - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); - fileHandler.flush(); - assertEquals((await Deno.stat(LOG_FILE)).size, 20); - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); - fileHandler.flush(); - // Rollover occurred. Log file now has 1 record, rollover file has the original 2 - assertEquals((await Deno.stat(LOG_FILE)).size, 10); - assertEquals((await Deno.stat(LOG_FILE + ".1")).size, 20); - await fileHandler.destroy(); - - Deno.removeSync(LOG_FILE); - Deno.removeSync(LOG_FILE + ".1"); - }, -}); - -Deno.test({ - name: "RotatingFileHandler with first rollover, check all at once", - async fn() { - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 25, - maxBackupCount: 3, - mode: "w", - }); - await fileHandler.setup(); - - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); // 'ERROR AAA\n' = 10 bytes - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); - - await fileHandler.destroy(); - - assertEquals((await Deno.stat(LOG_FILE)).size, 10); - assertEquals((await Deno.stat(LOG_FILE + ".1")).size, 20); - - Deno.removeSync(LOG_FILE); - Deno.removeSync(LOG_FILE + ".1"); - }, -}); - -Deno.test({ - name: "RotatingFileHandler with all backups rollover", - async fn() { - Deno.writeFileSync(LOG_FILE, new TextEncoder().encode("original log file")); - Deno.writeFileSync( - LOG_FILE + ".1", - new TextEncoder().encode("original log.1 file"), - ); - Deno.writeFileSync( - LOG_FILE + ".2", - new TextEncoder().encode("original log.2 file"), - ); - Deno.writeFileSync( - LOG_FILE + ".3", - new TextEncoder().encode("original log.3 file"), - ); - - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 2, - maxBackupCount: 3, - mode: "a", - }); - await fileHandler.setup(); - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); // 'ERROR AAA\n' = 10 bytes - await fileHandler.destroy(); - - const decoder = new TextDecoder(); - assertEquals(decoder.decode(Deno.readFileSync(LOG_FILE)), "ERROR AAA\n"); - assertEquals( - decoder.decode(Deno.readFileSync(LOG_FILE + ".1")), - "original log file", - ); - assertEquals( - decoder.decode(Deno.readFileSync(LOG_FILE + ".2")), - "original log.1 file", - ); - assertEquals( - decoder.decode(Deno.readFileSync(LOG_FILE + ".3")), - "original log.2 file", - ); - assert(!existsSync(LOG_FILE + ".4")); - - Deno.removeSync(LOG_FILE); - Deno.removeSync(LOG_FILE + ".1"); - Deno.removeSync(LOG_FILE + ".2"); - Deno.removeSync(LOG_FILE + ".3"); - }, -}); - -Deno.test({ - name: "RotatingFileHandler maxBytes cannot be less than 1", - async fn() { - await assertThrowsAsync( - async () => { - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 0, - maxBackupCount: 3, - mode: "w", - }); - await fileHandler.setup(); - }, - Error, - "maxBytes cannot be less than 1", - ); - }, -}); - -Deno.test({ - name: "RotatingFileHandler maxBackupCount cannot be less than 1", - async fn() { - await assertThrowsAsync( - async () => { - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 50, - maxBackupCount: 0, - mode: "w", - }); - await fileHandler.setup(); - }, - Error, - "maxBackupCount cannot be less than 1", - ); - }, -}); - -Deno.test({ - name: "Window unload flushes buffer", - async fn() { - const fileHandler = new FileHandler("WARNING", { - filename: LOG_FILE, - mode: "w", - }); - await fileHandler.setup(); - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); // 'ERROR AAA\n' = 10 bytes - - assertEquals((await Deno.stat(LOG_FILE)).size, 0); - dispatchEvent(new Event("unload")); - assertEquals((await Deno.stat(LOG_FILE)).size, 10); - - Deno.removeSync(LOG_FILE); - }, -}); - -Deno.test({ - name: "RotatingFileHandler: rotate on byte length, not msg length", - async fn() { - const fileHandler = new RotatingFileHandler("WARNING", { - filename: LOG_FILE, - maxBytes: 7, - maxBackupCount: 1, - mode: "w", - }); - await fileHandler.setup(); - - const msg = "。"; - const msgLength = msg.length; - const msgByteLength = new TextEncoder().encode(msg).byteLength; - assertNotEquals(msgLength, msgByteLength); - assertEquals(msgLength, 1); - assertEquals(msgByteLength, 3); - - fileHandler.log(msg); // logs 4 bytes (including '\n') - fileHandler.log(msg); // max bytes is 7, but this would be 8. Rollover. - - await fileHandler.destroy(); - - const fileSize1 = (await Deno.stat(LOG_FILE)).size; - const fileSize2 = (await Deno.stat(LOG_FILE + ".1")).size; - - assertEquals(fileSize1, msgByteLength + 1); - assertEquals(fileSize2, msgByteLength + 1); - - Deno.removeSync(LOG_FILE); - Deno.removeSync(LOG_FILE + ".1"); - }, -}); - -Deno.test({ - name: "FileHandler: Critical logs trigger immediate flush", - async fn() { - const fileHandler = new FileHandler("WARNING", { - filename: LOG_FILE, - mode: "w", - }); - await fileHandler.setup(); - - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.ERROR, - loggerName: "default", - }), - ); - - // ERROR won't trigger immediate flush - const fileSize = (await Deno.stat(LOG_FILE)).size; - assertEquals(fileSize, 0); - - fileHandler.handle( - new LogRecord({ - msg: "AAA", - args: [], - level: LogLevels.CRITICAL, - loggerName: "default", - }), - ); - - // CRITICAL will trigger immediate flush - const fileSize2 = (await Deno.stat(LOG_FILE)).size; - // ERROR record is 10 bytes, CRITICAL is 13 bytes - assertEquals(fileSize2, 23); - - await fileHandler.destroy(); - Deno.removeSync(LOG_FILE); - }, -}); |