From 18b98a30e3c3aa78b06a5eb7f9a94145c4fc42f5 Mon Sep 17 00:00:00 2001 From: Paul Melnikow <github@paulmelnikow.com> Date: Wed, 16 Jan 2019 16:30:18 -0500 Subject: [PATCH] Reorganize server and service test runner (#2781) Ref #2698 --- {lib => core/server}/analytics.js | 0 .../server}/in-process-server-test-helpers.js | 0 {lib => core/server}/log.js | 0 {lib => core/server}/log.spec.js | 0 {lib/sys => core/server}/monitor.js | 4 +-- .../sys => core/server}/prometheus-metrics.js | 0 .../server}/prometheus-metrics.spec.js | 0 {lib/sys => core/server}/rate-limit.js | 0 {lib/sys => core/server}/secret-is-valid.js | 2 +- {lib => core/server}/server.js | 27 ++++++++++--------- {lib => core/server}/server.spec.js | 4 +-- {lib => core}/service-test-runner/cli.js | 2 +- .../service-test-runner/infer-pull-request.js | 0 .../infer-pull-request.spec.js | 0 .../pull-request-services-cli.js | 0 {lib => core}/service-test-runner/runner.js | 0 .../service-test-runner/services-for-title.js | 0 .../services-for-title.spec.js | 0 lib/redis-token-persistence.js | 2 +- lib/request-handler.js | 10 +++---- lib/request-handler.spec.js | 2 +- lib/result-sender.js | 2 +- lib/token-persistence.js | 2 +- package.json | 8 +++--- server.js | 2 +- services/base-static.js | 2 +- services/github/auth/acceptor.js | 4 +-- services/github/auth/admin.js | 2 +- services/github/github-constellation.js | 2 +- services/maintenance/maintenance.service.js | 2 +- .../packagist-php-version.service.js | 2 +- .../php-eye/php-eye-php-version.service.js | 2 +- services/travis/travis-php-version.service.js | 2 +- 33 files changed, 44 insertions(+), 41 deletions(-) rename {lib => core/server}/analytics.js (100%) rename {lib => core/server}/in-process-server-test-helpers.js (100%) rename {lib => core/server}/log.js (100%) rename {lib => core/server}/log.spec.js (100%) rename {lib/sys => core/server}/monitor.js (96%) rename {lib/sys => core/server}/prometheus-metrics.js (100%) rename {lib/sys => core/server}/prometheus-metrics.spec.js (100%) rename {lib/sys => core/server}/rate-limit.js (100%) rename {lib/sys => core/server}/secret-is-valid.js (87%) rename {lib => core/server}/server.js (90%) rename {lib => core/server}/server.spec.js (97%) rename {lib => core}/service-test-runner/cli.js (98%) rename {lib => core}/service-test-runner/infer-pull-request.js (100%) rename {lib => core}/service-test-runner/infer-pull-request.spec.js (100%) rename {lib => core}/service-test-runner/pull-request-services-cli.js (100%) rename {lib => core}/service-test-runner/runner.js (100%) rename {lib => core}/service-test-runner/services-for-title.js (100%) rename {lib => core}/service-test-runner/services-for-title.spec.js (100%) diff --git a/lib/analytics.js b/core/server/analytics.js similarity index 100% rename from lib/analytics.js rename to core/server/analytics.js diff --git a/lib/in-process-server-test-helpers.js b/core/server/in-process-server-test-helpers.js similarity index 100% rename from lib/in-process-server-test-helpers.js rename to core/server/in-process-server-test-helpers.js diff --git a/lib/log.js b/core/server/log.js similarity index 100% rename from lib/log.js rename to core/server/log.js diff --git a/lib/log.spec.js b/core/server/log.spec.js similarity index 100% rename from lib/log.spec.js rename to core/server/log.spec.js diff --git a/lib/sys/monitor.js b/core/server/monitor.js similarity index 96% rename from lib/sys/monitor.js rename to core/server/monitor.js index 28d767198a..28afc023f0 100644 --- a/lib/sys/monitor.js +++ b/core/server/monitor.js @@ -1,9 +1,9 @@ 'use strict' +const serverSecrets = require('../../lib/server-secrets') const secretIsValid = require('./secret-is-valid') -const serverSecrets = require('../server-secrets') const RateLimit = require('./rate-limit') -const log = require('../log') +const log = require('./log') function secretInvalid(req, res) { if (!secretIsValid(req.password)) { diff --git a/lib/sys/prometheus-metrics.js b/core/server/prometheus-metrics.js similarity index 100% rename from lib/sys/prometheus-metrics.js rename to core/server/prometheus-metrics.js diff --git a/lib/sys/prometheus-metrics.spec.js b/core/server/prometheus-metrics.spec.js similarity index 100% rename from lib/sys/prometheus-metrics.spec.js rename to core/server/prometheus-metrics.spec.js diff --git a/lib/sys/rate-limit.js b/core/server/rate-limit.js similarity index 100% rename from lib/sys/rate-limit.js rename to core/server/rate-limit.js diff --git a/lib/sys/secret-is-valid.js b/core/server/secret-is-valid.js similarity index 87% rename from lib/sys/secret-is-valid.js rename to core/server/secret-is-valid.js index e4c4eec41f..49cdc27dcd 100644 --- a/lib/sys/secret-is-valid.js +++ b/core/server/secret-is-valid.js @@ -1,6 +1,6 @@ 'use strict' -const serverSecrets = require('../server-secrets') +const serverSecrets = require('../../lib/server-secrets') function secretIsValid(secret = '') { return ( diff --git a/lib/server.js b/core/server/server.js similarity index 90% rename from lib/server.js rename to core/server/server.js index a37836243d..8e0a4b8914 100644 --- a/lib/server.js +++ b/core/server/server.js @@ -5,19 +5,22 @@ const path = require('path') const url = require('url') const Joi = require('joi') const Camp = require('camp') -const makeBadge = require('../gh-badges/lib/make-badge') -const GithubConstellation = require('../services/github/github-constellation') -const { loadServiceClasses } = require('../services') +const makeBadge = require('../../gh-badges/lib/make-badge') +const GithubConstellation = require('../../services/github/github-constellation') +const { loadServiceClasses } = require('../../services') +const { makeBadgeData } = require('../../lib/badge-data') +const { staticBadgeUrl } = require('../../lib/make-badge-url') +const suggest = require('../../lib/suggest') +const { makeSend } = require('../../lib/result-sender') +const { + handleRequest, + clearRequestCache, +} = require('../../lib/request-handler') +const { clearRegularUpdateCache } = require('../../lib/regular-update') const analytics = require('./analytics') -const { makeBadgeData } = require('./badge-data') const log = require('./log') -const { staticBadgeUrl } = require('./make-badge-url') -const suggest = require('./suggest') -const sysMonitor = require('./sys/monitor') -const PrometheusMetrics = require('./sys/prometheus-metrics') -const { makeSend } = require('./result-sender') -const { handleRequest, clearRequestCache } = require('./request-handler') -const { clearRegularUpdateCache } = require('./regular-update') +const sysMonitor = require('./monitor') +const PrometheusMetrics = require('./prometheus-metrics') const optionalUrl = Joi.string().uri({ scheme: ['http', 'https'] }) const requiredUrl = optionalUrl.required() @@ -235,7 +238,7 @@ module.exports = class Server { log(`Server is starting up: ${this.baseUrl}`) const camp = (this.camp = Camp.start({ - documentRoot: path.join(__dirname, '..', 'public'), + documentRoot: path.join(__dirname, '..', '..', 'public'), port, hostname, secure, diff --git a/lib/server.spec.js b/core/server/server.spec.js similarity index 97% rename from lib/server.spec.js rename to core/server/server.spec.js index 8dc0d18acc..95da4cee5a 100644 --- a/lib/server.spec.js +++ b/core/server/server.spec.js @@ -9,7 +9,7 @@ const isSvg = require('is-svg') const path = require('path') const sinon = require('sinon') const portfinder = require('portfinder') -const svg2img = require('../gh-badges/lib/svg-to-img') +const svg2img = require('../../gh-badges/lib/svg-to-img') const { createTestServer } = require('./in-process-server-test-helpers') describe('The server', function() { @@ -105,7 +105,7 @@ describe('The server', function() { context('with svg2img error', function() { const expectedError = fs.readFileSync( - path.resolve(__dirname, '..', 'public', '500.html') + path.resolve(__dirname, '..', '..', 'public', '500.html') ) let toBufferStub diff --git a/lib/service-test-runner/cli.js b/core/service-test-runner/cli.js similarity index 98% rename from lib/service-test-runner/cli.js rename to core/service-test-runner/cli.js index 266bdeb513..0825ec87c3 100644 --- a/lib/service-test-runner/cli.js +++ b/core/service-test-runner/cli.js @@ -55,7 +55,7 @@ const minimist = require('minimist') const envFlag = require('node-env-flag') const readAllStdinSync = require('read-all-stdin-sync') const Runner = require('./runner') -const { createTestServer } = require('../../lib/in-process-server-test-helpers') +const { createTestServer } = require('../server/in-process-server-test-helpers') require('../../lib/unhandled-rejection.spec') diff --git a/lib/service-test-runner/infer-pull-request.js b/core/service-test-runner/infer-pull-request.js similarity index 100% rename from lib/service-test-runner/infer-pull-request.js rename to core/service-test-runner/infer-pull-request.js diff --git a/lib/service-test-runner/infer-pull-request.spec.js b/core/service-test-runner/infer-pull-request.spec.js similarity index 100% rename from lib/service-test-runner/infer-pull-request.spec.js rename to core/service-test-runner/infer-pull-request.spec.js diff --git a/lib/service-test-runner/pull-request-services-cli.js b/core/service-test-runner/pull-request-services-cli.js similarity index 100% rename from lib/service-test-runner/pull-request-services-cli.js rename to core/service-test-runner/pull-request-services-cli.js diff --git a/lib/service-test-runner/runner.js b/core/service-test-runner/runner.js similarity index 100% rename from lib/service-test-runner/runner.js rename to core/service-test-runner/runner.js diff --git a/lib/service-test-runner/services-for-title.js b/core/service-test-runner/services-for-title.js similarity index 100% rename from lib/service-test-runner/services-for-title.js rename to core/service-test-runner/services-for-title.js diff --git a/lib/service-test-runner/services-for-title.spec.js b/core/service-test-runner/services-for-title.spec.js similarity index 100% rename from lib/service-test-runner/services-for-title.spec.js rename to core/service-test-runner/services-for-title.spec.js diff --git a/lib/redis-token-persistence.js b/lib/redis-token-persistence.js index ba82ab0277..56666c5b95 100644 --- a/lib/redis-token-persistence.js +++ b/lib/redis-token-persistence.js @@ -2,7 +2,7 @@ const redis = require('redis') const { promisify } = require('util') -const log = require('./log') +const log = require('../core/server/log') const TokenPersistence = require('./token-persistence') class RedisTokenPersistence extends TokenPersistence { diff --git a/lib/request-handler.js b/lib/request-handler.js index 49b61801c1..c49c8c6366 100644 --- a/lib/request-handler.js +++ b/lib/request-handler.js @@ -3,19 +3,19 @@ // eslint-disable-next-line node/no-deprecated-api const domain = require('domain') const request = require('request') -const { makeBadgeData: getBadgeData } = require('./badge-data') -const log = require('./log') +const queryString = require('query-string') +const log = require('../core/server/log') +const analytics = require('../core/server/analytics') const LruCache = require('../gh-badges/lib/lru-cache') const makeBadge = require('../gh-badges/lib/make-badge') -const analytics = require('./analytics') -const { makeSend } = require('./result-sender') -const queryString = require('query-string') const { Inaccessible, InvalidResponse, ShieldsRuntimeError, } = require('../services/errors') const { setCacheHeaders } = require('../services/cache-headers') +const { makeBadgeData: getBadgeData } = require('./badge-data') +const { makeSend } = require('./result-sender') // We avoid calling the vendor's server for computation of the information in a // number of badges. diff --git a/lib/request-handler.spec.js b/lib/request-handler.spec.js index 4957c64cd0..3ca26550f2 100644 --- a/lib/request-handler.spec.js +++ b/lib/request-handler.spec.js @@ -4,8 +4,8 @@ const { expect } = require('chai') const fetch = require('node-fetch') const nock = require('nock') const portfinder = require('portfinder') -const analytics = require('./analytics') const Camp = require('camp') +const analytics = require('../core/server/analytics') const { makeBadgeData: getBadgeData } = require('./badge-data') const { handleRequest, diff --git a/lib/result-sender.js b/lib/result-sender.js index 36e09859ba..9730cb0230 100644 --- a/lib/result-sender.js +++ b/lib/result-sender.js @@ -1,7 +1,7 @@ 'use strict' const stream = require('stream') -const log = require('./log') +const log = require('../core/server/log') const svg2img = require('../gh-badges/lib/svg-to-img') function streamFromString(str) { diff --git a/lib/token-persistence.js b/lib/token-persistence.js index 1ad2256566..cfcea2c5b9 100644 --- a/lib/token-persistence.js +++ b/lib/token-persistence.js @@ -1,6 +1,6 @@ 'use strict' -const log = require('./log') +const log = require('../core/server/log') // This is currently bound to the legacy github auth code. That will be // replaced with a dependency-injected token provider. diff --git a/package.json b/package.json index 90dc07566b..5c40df6146 100644 --- a/package.json +++ b/package.json @@ -80,14 +80,14 @@ "test:js:frontend": "echo \"Deprecated; run `npm run test:frontend` instead.\" && npm run test:frontend", "test:js:package": "echo \"Deprecated; run `npm run test:package` instead.\" && npm run test:package", "test:frontend": "cross-env BABEL_ENV=test mocha --opts mocha.opts --require @babel/polyfill --require @babel/register --require mocha-yaml-loader \"frontend/**/*.spec.js\"", - "test:server": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts \"lib/**/*.spec.js\" \"services/**/*.spec.js\"", + "test:server": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts \"core/**/*.spec.js\" \"lib/**/*.spec.js\" \"services/**/*.spec.js\"", "test:package": "mocha --opts mocha.opts \"gh-badges/**/*.spec.js\"", "test:entrypoint": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts entrypoint.spec.js", "test:integration": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts \"lib/**/*.integration.js\" \"services/**/*.integration.js\"", - "test:services": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts --delay lib/service-test-runner/cli.js", + "test:services": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts --delay core/service-test-runner/cli.js", "test:services:trace": "cross-env NODE_CONFIG_ENV=test TRACE_SERVICES=true npm run test:services -- $*", - "test:services:pr:prepare": "node lib/service-test-runner/pull-request-services-cli.js > pull-request-services.log", - "test:services:pr:run": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts --delay lib/service-test-runner/cli.js --stdin < pull-request-services.log", + "test:services:pr:prepare": "node core/service-test-runner/pull-request-services-cli.js > pull-request-services.log", + "test:services:pr:run": "cross-env NODE_CONFIG_ENV=test mocha --opts mocha.opts --delay core/service-test-runner/cli.js --stdin < pull-request-services.log", "test:services:pr": "run-s --silent test:services:pr:prepare test:services:pr:run", "pretest": "run-s --silent defs features", "test": "run-s --silent --continue-on-error lint test:frontend test:package test:server test:entrypoint prettier-check", diff --git a/server.js b/server.js index ea51631ab9..1b77c7e644 100644 --- a/server.js +++ b/server.js @@ -20,7 +20,7 @@ if (process.argv[3]) { console.log('Configuration:') console.dir(config.public, { depth: null }) -const Server = require('./lib/server') +const Server = require('./core/server/server') const server = (module.exports = new Server(config)) ;(async () => { diff --git a/services/base-static.js b/services/base-static.js index 6d146ce21e..638d420bdd 100644 --- a/services/base-static.js +++ b/services/base-static.js @@ -2,7 +2,7 @@ const makeBadge = require('../gh-badges/lib/make-badge') const { makeSend } = require('../lib/result-sender') -const analytics = require('../lib/analytics') +const analytics = require('../core/server/analytics') const BaseService = require('./base') const { serverHasBeenUpSinceResourceCached, diff --git a/services/github/auth/acceptor.js b/services/github/auth/acceptor.js index 95b4d36574..a5588c7cde 100644 --- a/services/github/auth/acceptor.js +++ b/services/github/auth/acceptor.js @@ -2,9 +2,9 @@ const queryString = require('query-string') const request = require('request') -const log = require('../../../lib/log') +const log = require('../../../core/server/log') +const secretIsValid = require('../../../core/server/secret-is-valid') const serverSecrets = require('../../../lib/server-secrets') -const secretIsValid = require('../../../lib/sys/secret-is-valid') function sendTokenToAllServers(token) { const { diff --git a/services/github/auth/admin.js b/services/github/auth/admin.js index 081abe7055..8993a1c659 100644 --- a/services/github/auth/admin.js +++ b/services/github/auth/admin.js @@ -1,6 +1,6 @@ 'use strict' -const secretIsValid = require('../../../lib/sys/secret-is-valid') +const secretIsValid = require('../../../core/server/secret-is-valid') function setRoutes(apiProvider, server) { // Allow the admin to obtain the tokens for operational and debugging diff --git a/services/github/github-constellation.js b/services/github/github-constellation.js index 3674cf793b..1b5e460dd9 100644 --- a/services/github/github-constellation.js +++ b/services/github/github-constellation.js @@ -2,7 +2,7 @@ const path = require('path') const serverSecrets = require('../../lib/server-secrets') -const log = require('../../lib/log') +const log = require('../../core/server/log') const RedisTokenPersistence = require('../../lib/redis-token-persistence') const FsTokenPersistence = require('../../lib/fs-token-persistence') const GithubApiProvider = require('./github-api-provider') diff --git a/services/maintenance/maintenance.service.js b/services/maintenance/maintenance.service.js index 60147dc2d9..cf6ca3ceac 100644 --- a/services/maintenance/maintenance.service.js +++ b/services/maintenance/maintenance.service.js @@ -2,7 +2,7 @@ const LegacyService = require('../legacy-service') const { makeBadgeData: getBadgeData } = require('../../lib/badge-data') -const log = require('../../lib/log') +const log = require('../../core/server/log') // This legacy service should be rewritten to use e.g. BaseJsonService. // diff --git a/services/packagist/packagist-php-version.service.js b/services/packagist/packagist-php-version.service.js index a70b76d4eb..5206187e2d 100644 --- a/services/packagist/packagist-php-version.service.js +++ b/services/packagist/packagist-php-version.service.js @@ -2,7 +2,7 @@ const LegacyService = require('../legacy-service') const { makeBadgeData: getBadgeData } = require('../../lib/badge-data') -const log = require('../../lib/log') +const log = require('../../core/server/log') // This legacy service should be rewritten to use e.g. BaseJsonService. // diff --git a/services/php-eye/php-eye-php-version.service.js b/services/php-eye/php-eye-php-version.service.js index a00672a298..089d241894 100644 --- a/services/php-eye/php-eye-php-version.service.js +++ b/services/php-eye/php-eye-php-version.service.js @@ -6,7 +6,7 @@ const { versionReduction: phpVersionReduction, getPhpReleases, } = require('../../lib/php-version') -const log = require('../../lib/log') +const log = require('../../core/server/log') // This legacy service should be rewritten to use e.g. BaseJsonService. // diff --git a/services/travis/travis-php-version.service.js b/services/travis/travis-php-version.service.js index 6ca312d93c..fa0cdc2c9f 100644 --- a/services/travis/travis-php-version.service.js +++ b/services/travis/travis-php-version.service.js @@ -2,7 +2,7 @@ const LegacyService = require('../legacy-service') const { makeBadgeData: getBadgeData } = require('../../lib/badge-data') -const log = require('../../lib/log') +const log = require('../../core/server/log') const { minorVersion: phpMinorVersion, versionReduction: phpVersionReduction, -- GitLab