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