aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared/extra-utils/server/servers.ts
diff options
context:
space:
mode:
Diffstat (limited to 'shared/extra-utils/server/servers.ts')
-rw-r--r--shared/extra-utils/server/servers.ts86
1 files changed, 76 insertions, 10 deletions
diff --git a/shared/extra-utils/server/servers.ts b/shared/extra-utils/server/servers.ts
index b0cb869f4..480d12330 100644
--- a/shared/extra-utils/server/servers.ts
+++ b/shared/extra-utils/server/servers.ts
@@ -12,6 +12,10 @@ interface ServerInfo {
12 app: ChildProcess, 12 app: ChildProcess,
13 url: string 13 url: string
14 host: string 14 host: string
15
16 port: number
17 parallel: boolean
18 internalServerNumber: number
15 serverNumber: number 19 serverNumber: number
16 20
17 client: { 21 client: {
@@ -76,12 +80,27 @@ function flushTests (serverNumber?: number) {
76 }) 80 })
77} 81}
78 82
79function flushAndRunServer (serverNumber: number, configOverride?: Object, args = []) { 83function randomServer () {
84 const low = 10
85 const high = 10000
86
87 return Math.floor(Math.random() * (high - low) + low)
88}
89
90function flushAndRunServer (serverNumber: number, configOverrideArg?: Object, args = []) {
91 const parallel = process.env.MOCHA_PARALLEL === 'true'
92
93 const internalServerNumber = parallel ? randomServer() : serverNumber
94 const port = 9000 + internalServerNumber
95
80 const server: ServerInfo = { 96 const server: ServerInfo = {
81 app: null, 97 app: null,
82 serverNumber: serverNumber, 98 port,
83 url: `http://localhost:${9000 + serverNumber}`, 99 internalServerNumber,
84 host: `localhost:${9000 + serverNumber}`, 100 parallel,
101 serverNumber: internalServerNumber,
102 url: `http://localhost:${port}`,
103 host: `localhost:${port}`,
85 client: { 104 client: {
86 id: null, 105 id: null,
87 secret: null 106 secret: null
@@ -96,7 +115,7 @@ function flushAndRunServer (serverNumber: number, configOverride?: Object, args
96 const serverRunString = { 115 const serverRunString = {
97 'Server listening': false 116 'Server listening': false
98 } 117 }
99 const key = 'Database peertube_test' + serverNumber + ' is ready' 118 const key = 'Database peertube_test' + internalServerNumber + ' is ready'
100 serverRunString[key] = false 119 serverRunString[key] = false
101 120
102 const regexps = { 121 const regexps = {
@@ -111,10 +130,44 @@ function flushAndRunServer (serverNumber: number, configOverride?: Object, args
111 env['NODE_ENV'] = 'test' 130 env['NODE_ENV'] = 'test'
112 env['NODE_APP_INSTANCE'] = serverNumber.toString() 131 env['NODE_APP_INSTANCE'] = serverNumber.toString()
113 132
114 if (configOverride !== undefined) { 133 let configOverride: any = {}
115 env['NODE_CONFIG'] = JSON.stringify(configOverride) 134
135 if (parallel) {
136 configOverride = {
137 listen: {
138 port: port
139 },
140 webserver: {
141 port: port
142 },
143 database: {
144 suffix: '_test' + internalServerNumber
145 },
146 storage: {
147 tmp: `test${internalServerNumber}/tmp/`,
148 avatars: `test${internalServerNumber}/avatars/`,
149 videos: `test${internalServerNumber}/videos/`,
150 streaming_playlists: `test${internalServerNumber}/streaming-playlists/`,
151 redundancy: `test${internalServerNumber}/redundancy/`,
152 logs: `test${internalServerNumber}/logs/`,
153 previews: `test${internalServerNumber}/previews/`,
154 thumbnails: `test${internalServerNumber}/thumbnails/`,
155 torrents: `test${internalServerNumber}/torrents/`,
156 captions: `test${internalServerNumber}/captions/`,
157 cache: `test${internalServerNumber}/cache/`
158 },
159 admin: {
160 email: `admin${internalServerNumber}@example.com`
161 }
162 }
163 }
164
165 if (configOverrideArg !== undefined) {
166 Object.assign(configOverride, configOverrideArg)
116 } 167 }
117 168
169 env['NODE_CONFIG'] = JSON.stringify(configOverride)
170
118 const options = { 171 const options = {
119 silent: true, 172 silent: true,
120 env: env, 173 env: env,
@@ -122,7 +175,7 @@ function flushAndRunServer (serverNumber: number, configOverride?: Object, args
122 } 175 }
123 176
124 return new Promise<ServerInfo>(res => { 177 return new Promise<ServerInfo>(res => {
125 flushTests(serverNumber) 178 flushTests(internalServerNumber)
126 .then(() => { 179 .then(() => {
127 180
128 server.app = fork(join(root(), 'dist', 'server.js'), args, options) 181 server.app = fork(join(root(), 'dist', 'server.js'), args, options)
@@ -155,8 +208,7 @@ function flushAndRunServer (serverNumber: number, configOverride?: Object, args
155 process.on('exit', () => { 208 process.on('exit', () => {
156 try { 209 try {
157 process.kill(server.app.pid) 210 process.kill(server.app.pid)
158 } catch { /* empty */ 211 } catch { /* empty */ }
159 }
160 }) 212 })
161 213
162 res(server) 214 res(server)
@@ -194,6 +246,19 @@ function killallServers (servers: ServerInfo[]) {
194 } 246 }
195} 247}
196 248
249function cleanupTests (servers: ServerInfo[]) {
250 killallServers(servers)
251
252 const p: Promise<any>[] = []
253 for (const server of servers) {
254 if (server.parallel) {
255 p.push(flushTests(server.internalServerNumber))
256 }
257 }
258
259 return Promise.all(p)
260}
261
197async function waitUntilLog (server: ServerInfo, str: string, count = 1) { 262async function waitUntilLog (server: ServerInfo, str: string, count = 1) {
198 const logfile = join(root(), 'test' + server.serverNumber, 'logs/peertube.log') 263 const logfile = join(root(), 'test' + server.serverNumber, 'logs/peertube.log')
199 264
@@ -213,6 +278,7 @@ export {
213 checkDirectoryIsEmpty, 278 checkDirectoryIsEmpty,
214 checkTmpIsEmpty, 279 checkTmpIsEmpty,
215 ServerInfo, 280 ServerInfo,
281 cleanupTests,
216 flushAndRunMultipleServers, 282 flushAndRunMultipleServers,
217 flushTests, 283 flushTests,
218 flushAndRunServer, 284 flushAndRunServer,