From d1bfbdeb203b0e4f37e9468861c690171156ee29 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 22 Oct 2021 14:31:38 +0200 Subject: [PATCH] Random listen for mocked servers --- server/tests/api/object-storage/videos.ts | 2 +- .../mock-servers/mock-instances-index.ts | 42 +++++++++--------- .../mock-joinpeertube-versions.ts | 35 ++++++++------- .../mock-servers/mock-object-storage.ts | 44 +++++++++---------- .../mock-servers/mock-plugin-blocklist.ts | 20 ++++----- shared/extra-utils/mock-servers/mock-proxy.ts | 7 +-- shared/extra-utils/mock-servers/utils.ts | 16 +++++++ 7 files changed, 87 insertions(+), 79 deletions(-) diff --git a/server/tests/api/object-storage/videos.ts b/server/tests/api/object-storage/videos.ts index e1ba47d00..35a5f19ed 100644 --- a/server/tests/api/object-storage/videos.ts +++ b/server/tests/api/object-storage/videos.ts @@ -182,7 +182,7 @@ function runTestSuite (options: { }) it('Should upload a video and move it to the object storage without transcoding', async function () { - this.timeout(20000) + this.timeout(40000) const { uuid } = await servers[0].videos.quickUpload({ name: 'video 1' }) uuidsToDelete.push(uuid) diff --git a/shared/extra-utils/mock-servers/mock-instances-index.ts b/shared/extra-utils/mock-servers/mock-instances-index.ts index 43c2e9f6e..92b12d6f3 100644 --- a/shared/extra-utils/mock-servers/mock-instances-index.ts +++ b/shared/extra-utils/mock-servers/mock-instances-index.ts @@ -1,41 +1,39 @@ import express from 'express' import { Server } from 'http' -import { randomInt } from '@shared/core-utils' -import { terminateServer } from './utils' +import { getPort, randomListen, terminateServer } from './utils' export class MockInstancesIndex { private server: Server private readonly indexInstances: { host: string, createdAt: string }[] = [] - initialize () { - return new Promise(res => { - const app = express() + async initialize () { + const app = express() - app.use('/', (req: express.Request, res: express.Response, next: express.NextFunction) => { - if (process.env.DEBUG) console.log('Receiving request on mocked server %s.', req.url) + app.use('/', (req: express.Request, res: express.Response, next: express.NextFunction) => { + if (process.env.DEBUG) console.log('Receiving request on mocked server %s.', req.url) - return next() - }) - - app.get('/api/v1/instances/hosts', (req: express.Request, res: express.Response) => { - const since = req.query.since + return next() + }) - const filtered = this.indexInstances.filter(i => { - if (!since) return true + app.get('/api/v1/instances/hosts', (req: express.Request, res: express.Response) => { + const since = req.query.since - return i.createdAt > since - }) + const filtered = this.indexInstances.filter(i => { + if (!since) return true - return res.json({ - total: filtered.length, - data: filtered - }) + return i.createdAt > since }) - const port = 42000 + randomInt(1, 1000) - this.server = app.listen(port, () => res(port)) + return res.json({ + total: filtered.length, + data: filtered + }) }) + + this.server = await randomListen(app) + + return getPort(this.server) } addInstance (host: string) { diff --git a/shared/extra-utils/mock-servers/mock-joinpeertube-versions.ts b/shared/extra-utils/mock-servers/mock-joinpeertube-versions.ts index 79be31f61..e7906ea56 100644 --- a/shared/extra-utils/mock-servers/mock-joinpeertube-versions.ts +++ b/shared/extra-utils/mock-servers/mock-joinpeertube-versions.ts @@ -1,30 +1,31 @@ import express from 'express' -import { randomInt } from '@shared/core-utils' +import { Server } from 'http' +import { getPort, randomListen } from './utils' export class MockJoinPeerTubeVersions { + private server: Server private latestVersion: string - initialize () { - return new Promise(res => { - const app = express() + async initialize () { + const app = express() - app.use('/', (req: express.Request, res: express.Response, next: express.NextFunction) => { - if (process.env.DEBUG) console.log('Receiving request on mocked server %s.', req.url) + app.use('/', (req: express.Request, res: express.Response, next: express.NextFunction) => { + if (process.env.DEBUG) console.log('Receiving request on mocked server %s.', req.url) - return next() - }) + return next() + }) - app.get('/versions.json', (req: express.Request, res: express.Response) => { - return res.json({ - peertube: { - latestVersion: this.latestVersion - } - }) + app.get('/versions.json', (req: express.Request, res: express.Response) => { + return res.json({ + peertube: { + latestVersion: this.latestVersion + } }) - - const port = 43000 + randomInt(1, 1000) - app.listen(port, () => res(port)) }) + + this.server = await randomListen(app) + + return getPort(this.server) } setLatestVersion (latestVersion: string) { diff --git a/shared/extra-utils/mock-servers/mock-object-storage.ts b/shared/extra-utils/mock-servers/mock-object-storage.ts index 144f2819d..d135c2631 100644 --- a/shared/extra-utils/mock-servers/mock-object-storage.ts +++ b/shared/extra-utils/mock-servers/mock-object-storage.ts @@ -2,39 +2,37 @@ import express from 'express' import got, { RequestError } from 'got' import { Server } from 'http' import { pipeline } from 'stream' -import { randomInt } from '@shared/core-utils' import { ObjectStorageCommand } from '../server' -import { terminateServer } from './utils' +import { getPort, randomListen, terminateServer } from './utils' export class MockObjectStorage { private server: Server - initialize () { - return new Promise(res => { - const app = express() + async initialize () { + const app = express() - app.get('/:bucketName/:path(*)', (req: express.Request, res: express.Response, next: express.NextFunction) => { - const url = `http://${req.params.bucketName}.${ObjectStorageCommand.getEndpointHost()}/${req.params.path}` + app.get('/:bucketName/:path(*)', (req: express.Request, res: express.Response, next: express.NextFunction) => { + const url = `http://${req.params.bucketName}.${ObjectStorageCommand.getEndpointHost()}/${req.params.path}` - if (process.env.DEBUG) { - console.log('Receiving request on mocked server %s.', req.url) - console.log('Proxifying request to %s', url) - } - - return pipeline( - got.stream(url, { throwHttpErrors: false }), - res, - (err: RequestError) => { - if (!err) return + if (process.env.DEBUG) { + console.log('Receiving request on mocked server %s.', req.url) + console.log('Proxifying request to %s', url) + } - console.error('Pipeline failed.', err) - } - ) - }) + return pipeline( + got.stream(url, { throwHttpErrors: false }), + res, + (err: RequestError) => { + if (!err) return - const port = 44000 + randomInt(1, 1000) - this.server = app.listen(port, () => res(port)) + console.error('Pipeline failed.', err) + } + ) }) + + this.server = await randomListen(app) + + return getPort(this.server) } terminate () { diff --git a/shared/extra-utils/mock-servers/mock-plugin-blocklist.ts b/shared/extra-utils/mock-servers/mock-plugin-blocklist.ts index 344d4bdbb..f8a271cba 100644 --- a/shared/extra-utils/mock-servers/mock-plugin-blocklist.ts +++ b/shared/extra-utils/mock-servers/mock-plugin-blocklist.ts @@ -1,7 +1,6 @@ import express, { Request, Response } from 'express' import { Server } from 'http' -import { randomInt } from '@shared/core-utils' -import { terminateServer } from './utils' +import { getPort, randomListen, terminateServer } from './utils' type BlocklistResponse = { data: { @@ -15,17 +14,16 @@ export class MockBlocklist { private body: BlocklistResponse private server: Server - initialize () { - return new Promise(res => { - const app = express() + async initialize () { + const app = express() - app.get('/blocklist', (req: Request, res: Response) => { - return res.json(this.body) - }) - - const port = 45000 + randomInt(1, 1000) - this.server = app.listen(port, () => res(port)) + app.get('/blocklist', (req: Request, res: Response) => { + return res.json(this.body) }) + + this.server = await randomListen(app) + + return getPort(this.server) } replace (body: BlocklistResponse) { diff --git a/shared/extra-utils/mock-servers/mock-proxy.ts b/shared/extra-utils/mock-servers/mock-proxy.ts index 8583250f3..75ac79055 100644 --- a/shared/extra-utils/mock-servers/mock-proxy.ts +++ b/shared/extra-utils/mock-servers/mock-proxy.ts @@ -1,18 +1,15 @@ import { createServer, Server } from 'http' import proxy from 'proxy' -import { randomInt } from '@shared/core-utils' -import { terminateServer } from './utils' +import { getPort, terminateServer } from './utils' class MockProxy { private server: Server initialize () { return new Promise(res => { - const port = 46000 + randomInt(1, 1000) - this.server = proxy(createServer()) - this.server.listen(port, () => res(port)) + this.server.listen(0, () => res(getPort(this.server))) }) } diff --git a/shared/extra-utils/mock-servers/utils.ts b/shared/extra-utils/mock-servers/utils.ts index 64d94c868..235642439 100644 --- a/shared/extra-utils/mock-servers/utils.ts +++ b/shared/extra-utils/mock-servers/utils.ts @@ -1,4 +1,18 @@ +import { Express } from 'express' import { Server } from 'http' +import { AddressInfo } from 'net' + +function randomListen (app: Express) { + return new Promise(res => { + const server = app.listen(0, () => res(server)) + }) +} + +function getPort (server: Server) { + const address = server.address() as AddressInfo + + return address.port +} function terminateServer (server: Server) { if (!server) return Promise.resolve() @@ -13,5 +27,7 @@ function terminateServer (server: Server) { } export { + randomListen, + getPort, terminateServer } -- 2.41.0