peertube runner tests in parallel

pull/5817/head
Chocobozzz 2023-05-19 13:33:27 +02:00
parent 30453cb5ba
commit 6403a6bd01
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
8 changed files with 31 additions and 28 deletions

View File

@ -112,7 +112,7 @@ export class ConfigManager {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
isTestInstance () { isTestInstance () {
return this.id === 'test' return typeof this.id === 'string' && this.id.match(/^test-\d$/)
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -114,7 +114,8 @@ elif [ "$1" = "external-plugins" ]; then
externalPluginsFiles=$(findTestFiles ./dist/server/tests/external-plugins) externalPluginsFiles=$(findTestFiles ./dist/server/tests/external-plugins)
peertubeRunnerFiles=$(findTestFiles ./dist/server/tests/peertube-runner) peertubeRunnerFiles=$(findTestFiles ./dist/server/tests/peertube-runner)
runTest "$1" 1 $externalPluginsFiles $peertubeRunnerFiles runTest "$1" 1 $externalPluginsFiles
MOCHA_PARALLEL=true runTest "$1" $((2*$speedFactor)) $peertubeRunnerFiles
elif [ "$1" = "lint" ]; then elif [ "$1" = "lint" ]; then
npm run eslint -- --ext .ts "./server/**/*.ts" "shared/**/*.ts" "scripts/**/*.ts" npm run eslint -- --ext .ts "./server/**/*.ts" "shared/**/*.ts" "scripts/**/*.ts"
npm run swagger-cli -- validate support/doc/api/openapi.yaml npm run swagger-cli -- validate support/doc/api/openapi.yaml

View File

@ -213,7 +213,7 @@ describe('Test a single server', function () {
}) })
it('Should upload 6 videos', async function () { it('Should upload 6 videos', async function () {
this.timeout(50000) this.timeout(120000)
const videos = new Set([ const videos = new Set([
'video_short.mp4', 'video_short.ogv', 'video_short.webm', 'video_short.mp4', 'video_short.ogv', 'video_short.webm',

View File

@ -18,7 +18,7 @@ describe('Test peertube-runner program client CLI', function () {
await server.config.enableRemoteTranscoding() await server.config.enableRemoteTranscoding()
peertubeRunner = new PeerTubeRunnerProcess() peertubeRunner = new PeerTubeRunnerProcess(server)
await peertubeRunner.runServer() await peertubeRunner.runServer()
}) })
@ -32,7 +32,6 @@ describe('Test peertube-runner program client CLI', function () {
const registrationToken = await server.runnerRegistrationTokens.getFirstRegistrationToken() const registrationToken = await server.runnerRegistrationTokens.getFirstRegistrationToken()
await peertubeRunner.registerPeerTubeInstance({ await peertubeRunner.registerPeerTubeInstance({
server,
registrationToken, registrationToken,
runnerName: 'my super runner', runnerName: 'my super runner',
runnerDescription: 'super description' runnerDescription: 'super description'
@ -54,7 +53,7 @@ describe('Test peertube-runner program client CLI', function () {
}) })
it('Should unregister the PeerTube instance', async function () { it('Should unregister the PeerTube instance', async function () {
await peertubeRunner.unregisterPeerTubeInstance({ server }) await peertubeRunner.unregisterPeerTubeInstance()
}) })
it('Should not have PeerTube instance listed', async function () { it('Should not have PeerTube instance listed', async function () {

View File

@ -1,5 +1,5 @@
import { expect } from 'chai'
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import { expect } from 'chai'
import { import {
checkPeerTubeRunnerCacheIsEmpty, checkPeerTubeRunnerCacheIsEmpty,
expectStartWith, expectStartWith,
@ -144,9 +144,9 @@ describe('Test Live transcoding in peertube-runner program', function () {
const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken() const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken()
peertubeRunner = new PeerTubeRunnerProcess() peertubeRunner = new PeerTubeRunnerProcess(servers[0])
await peertubeRunner.runServer() await peertubeRunner.runServer()
await peertubeRunner.registerPeerTubeInstance({ server: servers[0], registrationToken, runnerName: 'runner' }) await peertubeRunner.registerPeerTubeInstance({ registrationToken, runnerName: 'runner' })
}) })
describe('With lives on local filesystem storage', function () { describe('With lives on local filesystem storage', function () {
@ -184,7 +184,7 @@ describe('Test Live transcoding in peertube-runner program', function () {
after(async function () { after(async function () {
if (peertubeRunner) { if (peertubeRunner) {
await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) await peertubeRunner.unregisterPeerTubeInstance()
peertubeRunner.kill() peertubeRunner.kill()
} }

View File

@ -74,9 +74,9 @@ describe('Test studio transcoding in peertube-runner program', function () {
const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken() const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken()
peertubeRunner = new PeerTubeRunnerProcess() peertubeRunner = new PeerTubeRunnerProcess(servers[0])
await peertubeRunner.runServer() await peertubeRunner.runServer()
await peertubeRunner.registerPeerTubeInstance({ server: servers[0], registrationToken, runnerName: 'runner' }) await peertubeRunner.registerPeerTubeInstance({ registrationToken, runnerName: 'runner' })
}) })
describe('With videos on local filesystem storage', function () { describe('With videos on local filesystem storage', function () {
@ -109,7 +109,7 @@ describe('Test studio transcoding in peertube-runner program', function () {
after(async function () { after(async function () {
if (peertubeRunner) { if (peertubeRunner) {
await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) await peertubeRunner.unregisterPeerTubeInstance()
peertubeRunner.kill() peertubeRunner.kill()
} }

View File

@ -249,9 +249,9 @@ describe('Test VOD transcoding in peertube-runner program', function () {
const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken() const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken()
peertubeRunner = new PeerTubeRunnerProcess() peertubeRunner = new PeerTubeRunnerProcess(servers[0])
await peertubeRunner.runServer() await peertubeRunner.runServer()
await peertubeRunner.registerPeerTubeInstance({ server: servers[0], registrationToken, runnerName: 'runner' }) await peertubeRunner.registerPeerTubeInstance({ registrationToken, runnerName: 'runner' })
}) })
describe('With videos on local filesystem storage', function () { describe('With videos on local filesystem storage', function () {
@ -335,7 +335,7 @@ describe('Test VOD transcoding in peertube-runner program', function () {
after(async function () { after(async function () {
if (peertubeRunner) { if (peertubeRunner) {
await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) await peertubeRunner.unregisterPeerTubeInstance()
peertubeRunner.kill() peertubeRunner.kill()
} }

View File

@ -7,13 +7,17 @@ import { PeerTubeServer } from '@shared/server-commands'
export class PeerTubeRunnerProcess { export class PeerTubeRunnerProcess {
private app?: ChildProcess private app?: ChildProcess
constructor (private readonly server: PeerTubeServer) {
}
runServer (options: { runServer (options: {
hideLogs?: boolean // default true hideLogs?: boolean // default true
} = {}) { } = {}) {
const { hideLogs = true } = options const { hideLogs = true } = options
return new Promise<void>((res, rej) => { return new Promise<void>((res, rej) => {
const args = [ 'server', '--verbose', '--id', 'test' ] const args = [ 'server', '--verbose', ...this.buildIdArg() ]
const forkOptions = { const forkOptions = {
detached: false, detached: false,
@ -34,19 +38,18 @@ export class PeerTubeRunnerProcess {
} }
registerPeerTubeInstance (options: { registerPeerTubeInstance (options: {
server: PeerTubeServer
registrationToken: string registrationToken: string
runnerName: string runnerName: string
runnerDescription?: string runnerDescription?: string
}) { }) {
const { server, registrationToken, runnerName, runnerDescription } = options const { registrationToken, runnerName, runnerDescription } = options
const args = [ const args = [
'register', 'register',
'--url', server.url, '--url', this.server.url,
'--registration-token', registrationToken, '--registration-token', registrationToken,
'--runner-name', runnerName, '--runner-name', runnerName,
'--id', 'test' ...this.buildIdArg()
] ]
if (runnerDescription) { if (runnerDescription) {
@ -57,17 +60,13 @@ export class PeerTubeRunnerProcess {
return execa.node(this.getRunnerPath(), args) return execa.node(this.getRunnerPath(), args)
} }
unregisterPeerTubeInstance (options: { unregisterPeerTubeInstance () {
server: PeerTubeServer const args = [ 'unregister', '--url', this.server.url, ...this.buildIdArg() ]
}) {
const { server } = options
const args = [ 'unregister', '--url', server.url, '--id', 'test' ]
return execa.node(this.getRunnerPath(), args) return execa.node(this.getRunnerPath(), args)
} }
async listRegisteredPeerTubeInstances () { async listRegisteredPeerTubeInstances () {
const args = [ 'list-registered', '--id', 'test' ] const args = [ 'list-registered', ...this.buildIdArg() ]
const { stdout } = await execa.node(this.getRunnerPath(), args) const { stdout } = await execa.node(this.getRunnerPath(), args)
return stdout return stdout
@ -84,4 +83,8 @@ export class PeerTubeRunnerProcess {
private getRunnerPath () { private getRunnerPath () {
return join(root(), 'packages', 'peertube-runner', 'dist', 'peertube-runner.js') return join(root(), 'packages', 'peertube-runner', 'dist', 'peertube-runner.js')
} }
private buildIdArg () {
return [ '--id', 'test-' + this.server.internalServerNumber ]
}
} }