GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — codeql-action/src/diagnostics.test.ts at main · github/codeql-action Expand file tree/ Copy pathdiagnostics.test.tsMore file actions 165 lines (142 loc) · 4.96 KB / Copy pathdiagnostics.test.tsFile metadata and controls165 lines (142 loc) · 4.96 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 import * as fs from "fs"; import path from "path"; import test, { type ExecutionContext } from "ava"; import * as diagnostics from "./diagnostics"; import { BuiltInLanguage } from "./languages"; import { checkExpectedLogMessages, createTestConfig, initAllState, RecordingLogger, setupTests, } from "./testing-utils"; import { withTmpDir } from "./util"; setupTests(test); const id = "codeql-action/test-diagnostic"; const name = "Test title"; test("makeDiagnostic - adds expected properties", (t) => { const diagnostic = diagnostics.makeDiagnostic(id, name, {}); t.truthy(diagnostic.timestamp); t.is(diagnostic.source.id, id); t.is(diagnostic.source.name, name); }); test("getLanguageDiagnosticsPath gets language-specific path", async (t) => withTmpDir(async (tmpDir) => { for (const language of Object.values(BuiltInLanguage)) { t.is( diagnostics.getLanguageDiagnosticsPath(tmpDir, language), path.resolve( tmpDir, language, ...diagnostics.CODEQL_ACTION_DIAGNOSTIC_SUBDIR_PARTS, ), ); } })); test("getTempLanguageDiagnosticsPath returns path without language", async (t) => withTmpDir(async (tmpDir) => { t.is( diagnostics.getTempLanguageDiagnosticsPath(tmpDir), path.resolve( tmpDir, diagnostics.TEMP_DIAGNOSTIC_DIR_NAME, ...diagnostics.CODEQL_ACTION_DIAGNOSTIC_SUBDIR_PARTS, ), ); })); test("getTempLanguageDiagnosticsPath returns language-specific path if a language is provided", async (t) => withTmpDir(async (tmpDir) => { t.is( diagnostics.getTempLanguageDiagnosticsPath(tmpDir, BuiltInLanguage.swift), path.resolve( tmpDir, diagnostics.TEMP_DIAGNOSTIC_DIR_NAME, BuiltInLanguage.swift, ...diagnostics.CODEQL_ACTION_DIAGNOSTIC_SUBDIR_PARTS, ), ); })); test("getDatabaseDiagnosticsPath returns language-specific path", async (t) => withTmpDir(async (tmpDir) => { t.is( diagnostics.getDatabaseDiagnosticsPath( createTestConfig({ dbLocation: tmpDir }), BuiltInLanguage.swift, ), path.resolve( tmpDir, BuiltInLanguage.swift, ...diagnostics.CODEQL_ACTION_DIAGNOSTIC_SUBDIR_PARTS, ), ); })); /** * Diagnostic files that are written to disk don't have deterministic names. * This function recursively finds all `.json` files at {@link rootPath}, * asserts that there is exactly one, and that it matches {@link expected}. * * @param rootPath The path to start searching from. */ function assertSingleDiagnosticIn( t: ExecutionContext<unknown>, rootPath: string, expected: diagnostics.DiagnosticMessage, ) { // Find all `.json` files in `rootPath` and check that there is exactly one. const filePaths = fs .readdirSync(rootPath, { recursive: true, encoding: "utf-8", }) .filter((p) => p.endsWith(".json")); t.is(filePaths.length, 1); // Check that the written diagnostic matches the one we added. const contents = fs.readFileSync( path.resolve(rootPath, filePaths[0]), "utf-8", ); const readDiagnostic = JSON.parse(contents) as diagnostics.DiagnosticMessage; t.deepEqual(readDiagnostic, expected); } test("addDiagnostic writes temporary diagnostics and flushDiagnostics moves them to the database", async (t) => withTmpDir(async (tmpDir) => { const logger = new RecordingLogger(); const tempDiagDir = path.resolve(tmpDir, "temp"); const testDbDir = path.resolve(tmpDir, "test", "database"); const diagnostic = diagnostics.makeDiagnostic(id, name, {}); // Write the diagnostic. The path provided for `dbLocation` doesn't exist, // so the diagnostic will be written to a temporary location. t.notThrows(() => { diagnostics.addDiagnostic( createTestConfig({ tempDir: tempDiagDir, dbLocation: testDbDir }), BuiltInLanguage.actions, diagnostic, logger, ); }); // Check that `tempDiagDir` was created. t.true(fs.existsSync(tempDiagDir)); // Check that the diagnostic exists under `tempDiagDir`. assertSingleDiagnosticIn(t, tempDiagDir, diagnostic); // Flush the diagnostics. This will cause the diagnostic we wrote previously to // be moved to a location under `dbLocation`. t.notThrows(() => { diagnostics.flushDiagnostics( initAllState({ logger }), createTestConfig({ tempDir: tempDiagDir, dbLocation: testDbDir, }), ); }); // Check that `testDbDir` was created. t.true(fs.existsSync(testDbDir)); // Check that the diagnostic exists under `testDbDir`. assertSingleDiagnosticIn(t, testDbDir, diagnostic); // Check that we logged that the database directory doesn't exist yet // and that we moved one diagnostic. checkExpectedLogMessages(t, logger.messages, [ `but the database at ${path.join(testDbDir, "actions")} does not exist yet`, "Moving 1 diagnostic(s) to their respective databases.", ]); })); |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |