From d102de1b38f2877463529c3b27bd35ffef4fd8bf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 21 Apr 2023 15:00:01 +0200 Subject: Add runner server tests --- shared/server-commands/server/config-command.ts | 34 ++++++++++++++++++++++--- shared/server-commands/server/jobs.ts | 26 ++++++++++++++----- shared/server-commands/server/server.ts | 20 ++++++++++----- shared/server-commands/server/servers.ts | 2 +- 4 files changed, 65 insertions(+), 17 deletions(-) (limited to 'shared/server-commands/server') diff --git a/shared/server-commands/server/config-command.ts b/shared/server-commands/server/config-command.ts index 303fcab88..9a6e413f2 100644 --- a/shared/server-commands/server/config-command.ts +++ b/shared/server-commands/server/config-command.ts @@ -5,8 +5,9 @@ import { AbstractCommand, OverrideCommandOptions } from '../shared/abstract-comm export class ConfigCommand extends AbstractCommand { - static getCustomConfigResolutions (enabled: boolean) { + static getCustomConfigResolutions (enabled: boolean, with0p = false) { return { + '0p': enabled && with0p, '144p': enabled, '240p': enabled, '360p': enabled, @@ -129,7 +130,8 @@ export class ConfigCommand extends AbstractCommand { }) } - enableTranscoding (webtorrent = true, hls = true) { + // TODO: convert args to object + enableTranscoding (webtorrent = true, hls = true, with0p = false) { return this.updateExistingSubConfig({ newConfig: { transcoding: { @@ -138,7 +140,7 @@ export class ConfigCommand extends AbstractCommand { allowAudioFiles: true, allowAdditionalExtensions: true, - resolutions: ConfigCommand.getCustomConfigResolutions(true), + resolutions: ConfigCommand.getCustomConfigResolutions(true, with0p), webtorrent: { enabled: webtorrent @@ -151,6 +153,7 @@ export class ConfigCommand extends AbstractCommand { }) } + // TODO: convert args to object enableMinimumTranscoding (webtorrent = true, hls = true) { return this.updateExistingSubConfig({ newConfig: { @@ -173,6 +176,25 @@ export class ConfigCommand extends AbstractCommand { }) } + enableRemoteTranscoding () { + return this.updateExistingSubConfig({ + newConfig: { + transcoding: { + remoteRunners: { + enabled: true + } + }, + live: { + transcoding: { + remoteRunners: { + enabled: true + } + } + } + } + }) + } + // --------------------------------------------------------------------------- enableStudio () { @@ -363,6 +385,9 @@ export class ConfigCommand extends AbstractCommand { }, transcoding: { enabled: true, + remoteRunners: { + enabled: false + }, allowAdditionalExtensions: true, allowAudioFiles: true, threads: 1, @@ -398,6 +423,9 @@ export class ConfigCommand extends AbstractCommand { maxUserLives: 50, transcoding: { enabled: true, + remoteRunners: { + enabled: false + }, threads: 4, profile: 'default', resolutions: { diff --git a/shared/server-commands/server/jobs.ts b/shared/server-commands/server/jobs.ts index e1d6cdff4..ff3098063 100644 --- a/shared/server-commands/server/jobs.ts +++ b/shared/server-commands/server/jobs.ts @@ -1,16 +1,17 @@ import { expect } from 'chai' import { wait } from '@shared/core-utils' -import { JobState, JobType } from '../../models' +import { JobState, JobType, RunnerJobState } from '../../models' import { PeerTubeServer } from './server' async function waitJobs ( serversArg: PeerTubeServer[] | PeerTubeServer, options: { skipDelayed?: boolean // default false + runnerJobs?: boolean // default false } = {} ) { - const { skipDelayed = false } = options + const { skipDelayed = false, runnerJobs = false } = options const pendingJobWait = process.env.NODE_PENDING_JOB_WAIT ? parseInt(process.env.NODE_PENDING_JOB_WAIT, 10) @@ -33,7 +34,8 @@ async function waitJobs ( // Check if each server has pending request for (const server of servers) { for (const state of states) { - const p = server.jobs.list({ + + const jobPromise = server.jobs.list({ state, start: 0, count: 10, @@ -46,17 +48,29 @@ async function waitJobs ( } }) - tasks.push(p) + tasks.push(jobPromise) } - const p = server.debug.getDebug() + const debugPromise = server.debug.getDebug() .then(obj => { if (obj.activityPubMessagesWaiting !== 0) { pendingRequests = true } }) + tasks.push(debugPromise) + + if (runnerJobs) { + const runnerJobsPromise = server.runnerJobs.list({ count: 100 }) + .then(({ data }) => { + for (const job of data) { + if (job.state.id !== RunnerJobState.COMPLETED) { + pendingRequests = true + } + } + }) + tasks.push(runnerJobsPromise) + } - tasks.push(p) } return tasks diff --git a/shared/server-commands/server/server.ts b/shared/server-commands/server/server.ts index d7e751581..f68b81367 100644 --- a/shared/server-commands/server/server.ts +++ b/shared/server-commands/server/server.ts @@ -8,9 +8,9 @@ import { CLICommand } from '../cli' import { CustomPagesCommand } from '../custom-pages' import { FeedCommand } from '../feeds' import { LogsCommand } from '../logs' -import { SQLCommand } from '../miscs' import { AbusesCommand } from '../moderation' import { OverviewsCommand } from '../overviews' +import { RunnerJobsCommand, RunnerRegistrationTokensCommand, RunnersCommand } from '../runners' import { SearchCommand } from '../search' import { SocketIOCommand } from '../socket' import { @@ -136,7 +136,6 @@ export class PeerTubeServer { streamingPlaylists?: StreamingPlaylistsCommand channels?: ChannelsCommand comments?: CommentsCommand - sql?: SQLCommand notifications?: NotificationsCommand servers?: ServersCommand login?: LoginCommand @@ -150,6 +149,10 @@ export class PeerTubeServer { videoToken?: VideoTokenCommand registrations?: RegistrationsCommand + runners?: RunnersCommand + runnerRegistrationTokens?: RunnerRegistrationTokensCommand + runnerJobs?: RunnerJobsCommand + constructor (options: { serverNumber: number } | { url: string }) { if ((options as any).url) { this.setUrl((options as any).url) @@ -311,14 +314,14 @@ export class PeerTubeServer { }) } - async kill () { - if (!this.app) return - - await this.sql.cleanup() + kill () { + if (!this.app) return Promise.resolve() process.kill(-this.app.pid) this.app = null + + return Promise.resolve() } private randomServer () { @@ -420,7 +423,6 @@ export class PeerTubeServer { this.streamingPlaylists = new StreamingPlaylistsCommand(this) this.channels = new ChannelsCommand(this) this.comments = new CommentsCommand(this) - this.sql = new SQLCommand(this) this.notifications = new NotificationsCommand(this) this.servers = new ServersCommand(this) this.login = new LoginCommand(this) @@ -433,5 +435,9 @@ export class PeerTubeServer { this.twoFactor = new TwoFactorCommand(this) this.videoToken = new VideoTokenCommand(this) this.registrations = new RegistrationsCommand(this) + + this.runners = new RunnersCommand(this) + this.runnerRegistrationTokens = new RunnerRegistrationTokensCommand(this) + this.runnerJobs = new RunnerJobsCommand(this) } } diff --git a/shared/server-commands/server/servers.ts b/shared/server-commands/server/servers.ts index b2b61adb3..fe9da9e63 100644 --- a/shared/server-commands/server/servers.ts +++ b/shared/server-commands/server/servers.ts @@ -20,7 +20,7 @@ function createMultipleServers (totalServers: number, configOverride?: object, o return Promise.all(serverPromises) } -async function killallServers (servers: PeerTubeServer[]) { +function killallServers (servers: PeerTubeServer[]) { return Promise.all(servers.map(s => s.kill())) } -- cgit v1.2.3