mirror of https://github.com/coder/code-server.git
refactor: move unit tests to test/unit
This commit is contained in:
parent
ed839c9a03
commit
3f7104bb4e
|
@ -3,8 +3,8 @@ import * as fs from "fs-extra"
|
||||||
import * as net from "net"
|
import * as net from "net"
|
||||||
import * as os from "os"
|
import * as os from "os"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import { Args, parse, setDefaults, shouldOpenInExistingInstance } from "../src/node/cli"
|
import { Args, parse, setDefaults, shouldOpenInExistingInstance } from "../../src/node/cli"
|
||||||
import { paths, tmpdir } from "../src/node/util"
|
import { paths, tmpdir } from "../../src/node/util"
|
||||||
|
|
||||||
type Mutable<T> = {
|
type Mutable<T> = {
|
||||||
-readonly [P in keyof T]: T[P]
|
-readonly [P in keyof T]: T[P]
|
|
@ -1,8 +1,8 @@
|
||||||
import { commit, getPackageJson, version } from "../src/node/constants"
|
import { commit, getPackageJson, version } from "../../src/node/constants"
|
||||||
import { loggerModule } from "./helpers"
|
import { loggerModule } from "../utils/helpers"
|
||||||
|
|
||||||
// jest.mock is hoisted above the imports so we must use `require` here.
|
// jest.mock is hoisted above the imports so we must use `require` here.
|
||||||
jest.mock("@coder/logger", () => require("./helpers").loggerModule)
|
jest.mock("@coder/logger", () => require("../utils/helpers").loggerModule)
|
||||||
|
|
||||||
describe("constants", () => {
|
describe("constants", () => {
|
||||||
describe("getPackageJson", () => {
|
describe("getPackageJson", () => {
|
|
@ -1,8 +1,8 @@
|
||||||
// Note: we need to import logger from the root
|
// Note: we need to import logger from the root
|
||||||
// because this is the logger used in logError in ../src/common/util
|
// because this is the logger used in logError in ../src/common/util
|
||||||
import { logger } from "../node_modules/@coder/logger"
|
import { logger } from "../../node_modules/@coder/logger"
|
||||||
|
|
||||||
import { Emitter } from "../src/common/emitter"
|
import { Emitter } from "../../src/common/emitter"
|
||||||
|
|
||||||
describe("emitter", () => {
|
describe("emitter", () => {
|
||||||
let spy: jest.SpyInstance
|
let spy: jest.SpyInstance
|
|
@ -1,5 +1,5 @@
|
||||||
import * as httpserver from "./httpserver"
|
import * as httpserver from "../utils/httpserver"
|
||||||
import * as integration from "./integration"
|
import * as integration from "../utils/integration"
|
||||||
|
|
||||||
describe("health", () => {
|
describe("health", () => {
|
||||||
let codeServer: httpserver.HttpServer | undefined
|
let codeServer: httpserver.HttpServer | undefined
|
|
@ -1,4 +1,4 @@
|
||||||
import { HttpCode, HttpError } from "../src/common/http"
|
import { HttpCode, HttpError } from "../../src/common/http"
|
||||||
|
|
||||||
describe("http", () => {
|
describe("http", () => {
|
||||||
describe("HttpCode", () => {
|
describe("HttpCode", () => {
|
|
@ -2,11 +2,11 @@ import { logger } from "@coder/logger"
|
||||||
import * as express from "express"
|
import * as express from "express"
|
||||||
import * as fs from "fs"
|
import * as fs from "fs"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import { HttpCode } from "../src/common/http"
|
import { HttpCode } from "../../src/common/http"
|
||||||
import { AuthType } from "../src/node/cli"
|
import { AuthType } from "../../src/node/cli"
|
||||||
import { codeServer, PluginAPI } from "../src/node/plugin"
|
import { codeServer, PluginAPI } from "../../src/node/plugin"
|
||||||
import * as apps from "../src/node/routes/apps"
|
import * as apps from "../../src/node/routes/apps"
|
||||||
import * as httpserver from "./httpserver"
|
import * as httpserver from "../utils/httpserver"
|
||||||
const fsp = fs.promises
|
const fsp = fs.promises
|
||||||
|
|
||||||
// Jest overrides `require` so our usual override doesn't work.
|
// Jest overrides `require` so our usual override doesn't work.
|
|
@ -1,7 +1,7 @@
|
||||||
import bodyParser from "body-parser"
|
import bodyParser from "body-parser"
|
||||||
import * as express from "express"
|
import * as express from "express"
|
||||||
import * as httpserver from "./httpserver"
|
import * as httpserver from "../utils/httpserver"
|
||||||
import * as integration from "./integration"
|
import * as integration from "../utils/integration"
|
||||||
|
|
||||||
describe("proxy", () => {
|
describe("proxy", () => {
|
||||||
const nhooyrDevServer = new httpserver.HttpServer()
|
const nhooyrDevServer = new httpserver.HttpServer()
|
|
@ -1,5 +1,5 @@
|
||||||
import { JSDOM } from "jsdom"
|
import { JSDOM } from "jsdom"
|
||||||
import { loggerModule } from "./helpers"
|
import { loggerModule } from "../utils/helpers"
|
||||||
|
|
||||||
describe("register", () => {
|
describe("register", () => {
|
||||||
describe("when navigator and serviceWorker are defined", () => {
|
describe("when navigator and serviceWorker are defined", () => {
|
||||||
|
@ -40,7 +40,7 @@ describe("register", () => {
|
||||||
|
|
||||||
it("should register a ServiceWorker", () => {
|
it("should register a ServiceWorker", () => {
|
||||||
// Load service worker like you would in the browser
|
// Load service worker like you would in the browser
|
||||||
require("../src/browser/register")
|
require("../../src/browser/register")
|
||||||
expect(mockRegisterFn).toHaveBeenCalled()
|
expect(mockRegisterFn).toHaveBeenCalled()
|
||||||
expect(mockRegisterFn).toHaveBeenCalledTimes(1)
|
expect(mockRegisterFn).toHaveBeenCalledTimes(1)
|
||||||
})
|
})
|
||||||
|
@ -54,7 +54,7 @@ describe("register", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Load service worker like you would in the browser
|
// Load service worker like you would in the browser
|
||||||
require("../src/browser/register")
|
require("../../src/browser/register")
|
||||||
|
|
||||||
expect(mockRegisterFn).toHaveBeenCalled()
|
expect(mockRegisterFn).toHaveBeenCalled()
|
||||||
expect(loggerModule.logger.error).toHaveBeenCalled()
|
expect(loggerModule.logger.error).toHaveBeenCalled()
|
||||||
|
@ -78,7 +78,7 @@ describe("register", () => {
|
||||||
|
|
||||||
it("should log an error to the console", () => {
|
it("should log an error to the console", () => {
|
||||||
// Load service worker like you would in the browser
|
// Load service worker like you would in the browser
|
||||||
require("../src/browser/register")
|
require("../../src/browser/register")
|
||||||
expect(spy).toHaveBeenCalled()
|
expect(spy).toHaveBeenCalled()
|
||||||
expect(spy).toHaveBeenCalledTimes(1)
|
expect(spy).toHaveBeenCalledTimes(1)
|
||||||
expect(spy).toHaveBeenCalledWith("[Service Worker] navigator is undefined")
|
expect(spy).toHaveBeenCalledWith("[Service Worker] navigator is undefined")
|
|
@ -58,7 +58,7 @@ describe("serviceWorker", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should add 3 listeners: install, activate and fetch", () => {
|
it("should add 3 listeners: install, activate and fetch", () => {
|
||||||
require("../src/browser/serviceWorker.ts")
|
require("../../src/browser/serviceWorker.ts")
|
||||||
const listenerEventNames = listeners.map((listener) => listener.event)
|
const listenerEventNames = listeners.map((listener) => listener.event)
|
||||||
|
|
||||||
expect(listeners).toHaveLength(3)
|
expect(listeners).toHaveLength(3)
|
||||||
|
@ -68,20 +68,20 @@ describe("serviceWorker", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should call the proper callbacks for 'install'", async () => {
|
it("should call the proper callbacks for 'install'", async () => {
|
||||||
require("../src/browser/serviceWorker.ts")
|
require("../../src/browser/serviceWorker.ts")
|
||||||
emit("install")
|
emit("install")
|
||||||
expect(spy).toHaveBeenCalledWith("[Service Worker] installed")
|
expect(spy).toHaveBeenCalledWith("[Service Worker] installed")
|
||||||
expect(spy).toHaveBeenCalledTimes(1)
|
expect(spy).toHaveBeenCalledTimes(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should do nothing when 'fetch' is called", async () => {
|
it("should do nothing when 'fetch' is called", async () => {
|
||||||
require("../src/browser/serviceWorker.ts")
|
require("../../src/browser/serviceWorker.ts")
|
||||||
emit("fetch")
|
emit("fetch")
|
||||||
expect(spy).not.toHaveBeenCalled()
|
expect(spy).not.toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should call the proper callbacks for 'activate'", async () => {
|
it("should call the proper callbacks for 'activate'", async () => {
|
||||||
require("../src/browser/serviceWorker.ts")
|
require("../../src/browser/serviceWorker.ts")
|
||||||
emit("activate")
|
emit("activate")
|
||||||
|
|
||||||
// Activate serviceWorker
|
// Activate serviceWorker
|
|
@ -3,9 +3,9 @@ import * as fs from "fs-extra"
|
||||||
import * as net from "net"
|
import * as net from "net"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import * as tls from "tls"
|
import * as tls from "tls"
|
||||||
import { Emitter } from "../src/common/emitter"
|
import { Emitter } from "../../src/common/emitter"
|
||||||
import { SocketProxyProvider } from "../src/node/socket"
|
import { SocketProxyProvider } from "../../src/node/socket"
|
||||||
import { generateCertificate, tmpdir } from "../src/node/util"
|
import { generateCertificate, tmpdir } from "../../src/node/util"
|
||||||
|
|
||||||
describe("SocketProxyProvider", () => {
|
describe("SocketProxyProvider", () => {
|
||||||
const provider = new SocketProxyProvider()
|
const provider = new SocketProxyProvider()
|
|
@ -0,0 +1,5 @@
|
||||||
|
settings:
|
||||||
|
import/resolver:
|
||||||
|
alias:
|
||||||
|
map:
|
||||||
|
- [code-server, ./typings/pluginapi.d.ts]
|
|
@ -0,0 +1 @@
|
||||||
|
out
|
|
@ -0,0 +1,6 @@
|
||||||
|
out/index.js: src/index.ts
|
||||||
|
# Typescript always emits, even on errors.
|
||||||
|
yarn build || rm out/index.js
|
||||||
|
|
||||||
|
node_modules: package.json yarn.lock
|
||||||
|
yarn
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"name": "test-plugin",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"engines": {
|
||||||
|
"code-server": "^3.7.0"
|
||||||
|
},
|
||||||
|
"main": "out/index.js",
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/express": "^4.17.8",
|
||||||
|
"typescript": "^4.0.5"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
<svg width="121" height="131" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="9.612%" y1="66.482%" x2="89.899%" y2="33.523%" id="a"><stop stop-color="#FCEE39" offset="0%"/><stop stop-color="#F37B3D" offset="100%"/></linearGradient><linearGradient x1="8.601%" y1="15.03%" x2="99.641%" y2="89.058%" id="b"><stop stop-color="#EF5A6B" offset="0%"/><stop stop-color="#F26F4E" offset="57%"/><stop stop-color="#F37B3D" offset="100%"/></linearGradient><linearGradient x1="90.118%" y1="69.931%" x2="17.938%" y2="38.628%" id="c"><stop stop-color="#7C59A4" offset="0%"/><stop stop-color="#AF4C92" offset="38.52%"/><stop stop-color="#DC4183" offset="76.54%"/><stop stop-color="#ED3D7D" offset="95.7%"/></linearGradient><linearGradient x1="91.376%" y1="19.144%" x2="18.895%" y2="70.21%" id="d"><stop stop-color="#EF5A6B" offset="0%"/><stop stop-color="#EE4E72" offset="36.4%"/><stop stop-color="#ED3D7D" offset="100%"/></linearGradient></defs><g fill="none"><path d="M118.623 71.8c.9-.8 1.4-1.9 1.5-3.2.1-2.6-1.8-4.7-4.4-4.9-1.2-.1-2.4.4-3.3 1.1l-83.8 45.9c-1.9.8-3.6 2.2-4.7 4.1-2.9 4.8-1.3 11 3.6 13.9 3.4 2 7.5 1.8 10.7-.2.2-.2.5-.3.7-.5l78-54.8c.4-.3 1.5-1.1 1.7-1.4z" fill="url(#a)" transform="translate(-.023)"/><path d="M118.823 65.1l-63.8-62.6c-1.4-1.5-3.4-2.5-5.7-2.5-4.3 0-7.7 3.5-7.7 7.7 0 2.1.8 3.9 2.1 5.3.4.4.8.7 1.2 1l67.4 57.7c.8.7 1.8 1.2 3 1.3 2.6.1 4.7-1.8 4.9-4.4 0-1.3-.5-2.6-1.4-3.5z" fill="url(#b)" transform="translate(-.023)"/><path d="M57.123 59.5c-.1 0-39.4-31-40.2-31.5l-1.8-.9c-5.8-2.2-12.2.8-14.4 6.6-1.9 5.1.2 10.7 4.6 13.4.7.4 1.3.7 2 .9.4.2 45.4 18.8 45.4 18.8 1.8.8 3.9.3 5.1-1.2 1.5-1.9 1.2-4.6-.7-6.1z" fill="url(#c)" transform="translate(-.023)"/><path d="M49.323 0c-1.7 0-3.3.6-4.6 1.5l-39.8 26.8c-.1.1-.2.1-.2.2h-.1c-1.7 1.2-3.1 3-3.9 5.1-2.2 5.8.8 12.3 6.6 14.4 3.6 1.4 7.5.7 10.4-1.4.7-.5 1.3-1 1.8-1.6l34.6-31.2c1.8-1.4 3-3.6 3-6.1 0-4.2-3.5-7.7-7.8-7.7z" fill="url(#d)" transform="translate(-.023)"/><path fill="#000" d="M34.6 37.4h51v51h-51z"/><path fill="#FFF" d="M39 78.8h19.1V82H39zm-.2-28l1.5-1.4c.4.5.8.8 1.3.8.6 0 .9-.4.9-1.2v-5.3h2.3V49c0 1-.3 1.8-.8 2.3-.5.5-1.3.8-2.3.8-1.5.1-2.3-.5-2.9-1.3zm6.5-7H52v1.9h-4.4V47h4v1.8h-4v1.3h4.5v2h-6.7zm9.7 2h-2.5v-2h7.3v2h-2.5v6.3H55zM39 54h4.3c1 0 1.8.3 2.3.7.3.3.5.8.5 1.4 0 1-.5 1.5-1.3 1.9 1 .3 1.6.9 1.6 2 0 1.4-1.2 2.3-3.1 2.3H39V54zm4.8 2.6c0-.5-.4-.7-1-.7h-1.5v1.5h1.4c.7-.1 1.1-.3 1.1-.8zM43 59h-1.8v1.5H43c.7 0 1.1-.3 1.1-.8s-.4-.7-1.1-.7zm3.8-5h3.9c1.3 0 2.1.3 2.7.9.5.5.7 1.1.7 1.9 0 1.3-.7 2.1-1.7 2.6l2 2.9h-2.6l-1.7-2.5h-1v2.5h-2.3V54zm3.8 4c.8 0 1.2-.4 1.2-1 0-.7-.5-1-1.2-1h-1.5v2h1.5z"/><path d="M56.8 54H59l3.5 8.4H60l-.6-1.5h-3.2l-.6 1.5h-2.4l3.6-8.4zm2 5l-.9-2.3L57 59h1.8zm4-5h2.3v8.3h-2.3zm2.9 0h2.1l3.4 4.4V54h2.3v8.3h-2L68 57.8v4.6h-2.3zm8 7.1l1.3-1.5c.8.7 1.7 1 2.7 1 .6 0 1-.2 1-.6 0-.4-.3-.5-1.4-.8-1.8-.4-3.1-.9-3.1-2.6 0-1.5 1.2-2.7 3.2-2.7 1.4 0 2.5.4 3.4 1.1l-1.2 1.6c-.8-.5-1.6-.8-2.3-.8-.6 0-.8.2-.8.5 0 .4.3.5 1.4.8 1.9.4 3.1 1 3.1 2.6 0 1.7-1.3 2.7-3.4 2.7-1.5.1-2.9-.4-3.9-1.3z" fill="#FFF"/></g></svg>
|
After Width: | Height: | Size: 3.0 KiB |
|
@ -0,0 +1,10 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Test Plugin</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>Welcome to the test plugin!</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,52 @@
|
||||||
|
import * as cs from "code-server"
|
||||||
|
import * as fspath from "path"
|
||||||
|
|
||||||
|
export const plugin: cs.Plugin = {
|
||||||
|
displayName: "Test Plugin",
|
||||||
|
routerPath: "/test-plugin",
|
||||||
|
homepageURL: "https://example.com",
|
||||||
|
description: "Plugin used in code-server tests.",
|
||||||
|
|
||||||
|
init(config) {
|
||||||
|
config.logger.debug("test-plugin loaded!")
|
||||||
|
},
|
||||||
|
|
||||||
|
router() {
|
||||||
|
const r = cs.express.Router()
|
||||||
|
r.get("/test-app", (_, res) => {
|
||||||
|
res.sendFile(fspath.resolve(__dirname, "../public/index.html"))
|
||||||
|
})
|
||||||
|
r.get("/goland/icon.svg", (_, res) => {
|
||||||
|
res.sendFile(fspath.resolve(__dirname, "../public/icon.svg"))
|
||||||
|
})
|
||||||
|
r.get("/error", () => {
|
||||||
|
throw new cs.HttpError("error", cs.HttpCode.LargePayload)
|
||||||
|
})
|
||||||
|
return r
|
||||||
|
},
|
||||||
|
|
||||||
|
wsRouter() {
|
||||||
|
const wr = cs.WsRouter()
|
||||||
|
wr.ws("/test-app", (req) => {
|
||||||
|
cs.wss.handleUpgrade(req, req.ws, req.head, (ws) => {
|
||||||
|
req.ws.resume()
|
||||||
|
ws.send("hello")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return wr
|
||||||
|
},
|
||||||
|
|
||||||
|
applications() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
name: "Test App",
|
||||||
|
version: "4.0.0",
|
||||||
|
iconPath: "/icon.svg",
|
||||||
|
path: "/test-app",
|
||||||
|
|
||||||
|
description: "This app does XYZ.",
|
||||||
|
homepageURL: "https://example.com",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||||
|
|
||||||
|
/* Basic Options */
|
||||||
|
// "incremental": true, /* Enable incremental compilation */
|
||||||
|
"target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
|
||||||
|
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
|
||||||
|
// "lib": [], /* Specify library files to be included in the compilation. */
|
||||||
|
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||||
|
// "checkJs": true, /* Report errors in .js files. */
|
||||||
|
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
||||||
|
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||||
|
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||||
|
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||||
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||||
|
"outDir": "./out" /* Redirect output structure to the directory. */,
|
||||||
|
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||||
|
// "composite": true, /* Enable project compilation */
|
||||||
|
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||||
|
// "removeComments": true, /* Do not emit comments to output. */
|
||||||
|
// "noEmit": true, /* Do not emit outputs. */
|
||||||
|
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||||
|
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||||
|
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||||
|
|
||||||
|
/* Strict Type-Checking Options */
|
||||||
|
"strict": true /* Enable all strict type-checking options. */,
|
||||||
|
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||||
|
// "strictNullChecks": true, /* Enable strict null checks. */
|
||||||
|
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
||||||
|
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
||||||
|
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
||||||
|
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
||||||
|
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
||||||
|
|
||||||
|
/* Additional Checks */
|
||||||
|
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
||||||
|
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||||
|
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||||
|
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||||
|
|
||||||
|
/* Module Resolution Options */
|
||||||
|
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||||
|
"baseUrl": "./" /* Base directory to resolve non-absolute module names. */,
|
||||||
|
"paths": {
|
||||||
|
"code-server": ["../../typings/pluginapi"]
|
||||||
|
} /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */,
|
||||||
|
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||||
|
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||||
|
// "types": [], /* Type declaration files to be included in compilation. */
|
||||||
|
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||||
|
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
|
||||||
|
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||||
|
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||||
|
|
||||||
|
/* Source Map Options */
|
||||||
|
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||||
|
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||||
|
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||||
|
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||||
|
|
||||||
|
/* Experimental Options */
|
||||||
|
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||||
|
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||||
|
|
||||||
|
/* Advanced Options */
|
||||||
|
"skipLibCheck": true /* Skip type checking of declaration files. */,
|
||||||
|
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@types/body-parser@*":
|
||||||
|
version "1.19.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f"
|
||||||
|
integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/connect" "*"
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/connect@*":
|
||||||
|
version "3.4.33"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.33.tgz#31610c901eca573b8713c3330abc6e6b9f588546"
|
||||||
|
integrity sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/express-serve-static-core@*":
|
||||||
|
version "4.17.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz#d9af025e925fc8b089be37423b8d1eac781be084"
|
||||||
|
integrity sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
"@types/qs" "*"
|
||||||
|
"@types/range-parser" "*"
|
||||||
|
|
||||||
|
"@types/express@^4.17.8":
|
||||||
|
version "4.17.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.8.tgz#3df4293293317e61c60137d273a2e96cd8d5f27a"
|
||||||
|
integrity sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/body-parser" "*"
|
||||||
|
"@types/express-serve-static-core" "*"
|
||||||
|
"@types/qs" "*"
|
||||||
|
"@types/serve-static" "*"
|
||||||
|
|
||||||
|
"@types/mime@*":
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.3.tgz#c893b73721db73699943bfc3653b1deb7faa4a3a"
|
||||||
|
integrity sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==
|
||||||
|
|
||||||
|
"@types/node@*":
|
||||||
|
version "14.14.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f"
|
||||||
|
integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==
|
||||||
|
|
||||||
|
"@types/qs@*":
|
||||||
|
version "6.9.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b"
|
||||||
|
integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==
|
||||||
|
|
||||||
|
"@types/range-parser@*":
|
||||||
|
version "1.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
|
||||||
|
integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
|
||||||
|
|
||||||
|
"@types/serve-static@*":
|
||||||
|
version "1.13.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.6.tgz#866b1b8dec41c36e28c7be40ac725b88be43c5c1"
|
||||||
|
integrity sha512-nuRJmv7jW7VmCVTn+IgYDkkbbDGyIINOeu/G0d74X3lm6E5KfMeQPJhxIt1ayQeQB3cSxvYs1RA/wipYoFB4EA==
|
||||||
|
dependencies:
|
||||||
|
"@types/mime" "*"
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
typescript@^4.0.5:
|
||||||
|
version "4.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389"
|
||||||
|
integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==
|
|
@ -1,9 +1,9 @@
|
||||||
import * as fs from "fs-extra"
|
import * as fs from "fs-extra"
|
||||||
import * as http from "http"
|
import * as http from "http"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import { SettingsProvider, UpdateSettings } from "../src/node/settings"
|
import { SettingsProvider, UpdateSettings } from "../../src/node/settings"
|
||||||
import { LatestResponse, UpdateProvider } from "../src/node/update"
|
import { LatestResponse, UpdateProvider } from "../../src/node/update"
|
||||||
import { tmpdir } from "../src/node/util"
|
import { tmpdir } from "../../src/node/util"
|
||||||
|
|
||||||
describe.skip("update", () => {
|
describe.skip("update", () => {
|
||||||
let version = "1.0.0"
|
let version = "1.0.0"
|
|
@ -10,11 +10,11 @@ import {
|
||||||
split,
|
split,
|
||||||
trimSlashes,
|
trimSlashes,
|
||||||
normalize,
|
normalize,
|
||||||
} from "../src/common/util"
|
} from "../../src/common/util"
|
||||||
import { Cookie as CookieEnum } from "../src/node/routes/login"
|
import { Cookie as CookieEnum } from "../../src/node/routes/login"
|
||||||
import { hash } from "../src/node/util"
|
import { hash } from "../../src/node/util"
|
||||||
import { PASSWORD } from "./constants"
|
import { PASSWORD } from "../utils/constants"
|
||||||
import { checkForCookie, createCookieIfDoesntExist, loggerModule, Cookie } from "./helpers"
|
import { checkForCookie, createCookieIfDoesntExist, loggerModule, Cookie } from "../utils/helpers"
|
||||||
|
|
||||||
const dom = new JSDOM()
|
const dom = new JSDOM()
|
||||||
global.document = dom.window.document
|
global.document = dom.window.document
|
||||||
|
@ -22,7 +22,7 @@ global.document = dom.window.document
|
||||||
type LocationLike = Pick<Location, "pathname" | "origin">
|
type LocationLike = Pick<Location, "pathname" | "origin">
|
||||||
|
|
||||||
// jest.mock is hoisted above the imports so we must use `require` here.
|
// jest.mock is hoisted above the imports so we must use `require` here.
|
||||||
jest.mock("@coder/logger", () => require("./helpers").loggerModule)
|
jest.mock("@coder/logger", () => require("../utils/helpers").loggerModule)
|
||||||
|
|
||||||
describe("util", () => {
|
describe("util", () => {
|
||||||
describe("normalize", () => {
|
describe("normalize", () => {
|
|
@ -1,35 +0,0 @@
|
||||||
import * as util from "util"
|
|
||||||
import * as wtfnode from "wtfnode"
|
|
||||||
|
|
||||||
// Jest seems to hijack console.log in a way that makes the output difficult to
|
|
||||||
// read. So we'll write directly to process.stderr instead.
|
|
||||||
const write = (...args: [any, ...any]) => {
|
|
||||||
if (args.length > 0) {
|
|
||||||
process.stderr.write(util.format(...args) + "\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wtfnode.setLogger("info", write)
|
|
||||||
wtfnode.setLogger("warn", write)
|
|
||||||
wtfnode.setLogger("error", write)
|
|
||||||
|
|
||||||
let active = false
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start logging open handles periodically. This can be used to see what is
|
|
||||||
* hanging open if anything.
|
|
||||||
*/
|
|
||||||
export function setup(): void {
|
|
||||||
if (active) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
active = true
|
|
||||||
|
|
||||||
const interval = 5000
|
|
||||||
const wtfnodeDump = () => {
|
|
||||||
wtfnode.dump()
|
|
||||||
const t = setTimeout(wtfnodeDump, interval)
|
|
||||||
t.unref()
|
|
||||||
}
|
|
||||||
const t = setTimeout(wtfnodeDump, interval)
|
|
||||||
t.unref()
|
|
||||||
}
|
|
Loading…
Reference in New Issue