]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Random listen for mocked servers
authorChocobozzz <me@florianbigard.com>
Fri, 22 Oct 2021 12:31:38 +0000 (14:31 +0200)
committerChocobozzz <me@florianbigard.com>
Fri, 22 Oct 2021 12:31:38 +0000 (14:31 +0200)
server/tests/api/object-storage/videos.ts
shared/extra-utils/mock-servers/mock-instances-index.ts
shared/extra-utils/mock-servers/mock-joinpeertube-versions.ts
shared/extra-utils/mock-servers/mock-object-storage.ts
shared/extra-utils/mock-servers/mock-plugin-blocklist.ts
shared/extra-utils/mock-servers/mock-proxy.ts
shared/extra-utils/mock-servers/utils.ts

index e1ba47d00b3036438c45717a61905f930d9b2a19..35a5f19eda1a773cf4250a83532f6ae6ac174936 100644 (file)
@@ -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)
index 43c2e9f6ec6466a9d6e7f47b278d444ad8aa5517..92b12d6f3d591fcecbaffddb3c63b64e8d3dcb37 100644 (file)
@@ -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<number>(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) {
index 79be31f61576dd22d143e0956082ca2214a609eb..e7906ea56f9a4ebbaa8f2debe50d46a93170b27e 100644 (file)
@@ -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<number>(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) {
index 144f2819dc0e945140e90934753e27e0504cc233..d135c2631fe63b59932d9e8ed69145c99534700b 100644 (file)
@@ -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<number>(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 () {
index 344d4bdbb7d7dca5d7d20949cd792b1189b1e355..f8a271cba1a0ed7d6211e21e3dc41b772fd5585a 100644 (file)
@@ -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<number>(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) {
index 8583250f391860d92fde61c7f87e68a173b78f66..75ac790551a274348481646c3d7b43daba38a19c 100644 (file)
@@ -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<number>(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)))
     })
   }
 
index 64d94c8688a14642575ae68fa8075947cb1e7d9b..2356424392f3fdf729456bb20cb55aa610673587 100644 (file)
@@ -1,4 +1,18 @@
+import { Express } from 'express'
 import { Server } from 'http'
+import { AddressInfo } from 'net'
+
+function randomListen (app: Express) {
+  return new Promise<Server>(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
 }