import { copy } from 'fs-extra'
import { join } from 'path'
import { parallelTests, randomInt, root } from '@shared/core-utils'
-import { Video, VideoChannel, VideoCreateResult, VideoDetails } from '@shared/models'
+import { Video, VideoChannel, VideoChannelSync, VideoCreateResult, VideoDetails } from '@shared/models'
import { BulkCommand } from '../bulk'
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 { AccountsCommand, BlocklistCommand, LoginCommand, NotificationsCommand, SubscriptionsCommand, UsersCommand } from '../users'
+import {
+ AccountsCommand,
+ BlocklistCommand,
+ LoginCommand,
+ NotificationsCommand,
+ RegistrationsCommand,
+ SubscriptionsCommand,
+ TwoFactorCommand,
+ UsersCommand
+} from '../users'
import {
BlacklistCommand,
CaptionsCommand,
ChangeOwnershipCommand,
ChannelsCommand,
+ ChannelSyncsCommand,
HistoryCommand,
ImportsCommand,
LiveCommand,
PlaylistsCommand,
ServicesCommand,
StreamingPlaylistsCommand,
- VideosCommand
+ VideosCommand,
+ VideoStudioCommand,
+ VideoTokenCommand,
+ ViewsCommand
} from '../videos'
import { CommentsCommand } from '../videos/comments-command'
+import { VideoStatsCommand } from '../videos/video-stats-command'
import { ConfigCommand } from './config-command'
import { ContactFormCommand } from './contact-form-command'
import { DebugCommand } from './debug-command'
import { FollowsCommand } from './follows-command'
import { JobsCommand } from './jobs-command'
+import { MetricsCommand } from './metrics-command'
import { ObjectStorageCommand } from './object-storage-command'
import { PluginsCommand } from './plugins-command'
import { RedundancyCommand } from './redundancy-command'
}
channel?: VideoChannel
+ videoChannelSync?: Partial<VideoChannelSync>
video?: Video
videoCreated?: VideoCreateResult
debug?: DebugCommand
follows?: FollowsCommand
jobs?: JobsCommand
+ metrics?: MetricsCommand
plugins?: PluginsCommand
redundancy?: RedundancyCommand
stats?: StatsCommand
playlists?: PlaylistsCommand
history?: HistoryCommand
imports?: ImportsCommand
+ channelSyncs?: ChannelSyncsCommand
streamingPlaylists?: StreamingPlaylistsCommand
channels?: ChannelsCommand
comments?: CommentsCommand
- sql?: SQLCommand
notifications?: NotificationsCommand
servers?: ServersCommand
login?: LoginCommand
users?: UsersCommand
objectStorage?: ObjectStorageCommand
+ videoStudio?: VideoStudioCommand
videos?: VideosCommand
+ videoStats?: VideoStatsCommand
+ views?: ViewsCommand
+ twoFactor?: TwoFactorCommand
+ videoToken?: VideoTokenCommand
+ registrations?: RegistrationsCommand
+
+ runners?: RunnersCommand
+ runnerRegistrationTokens?: RunnerRegistrationTokensCommand
+ runnerJobs?: RunnerJobsCommand
constructor (options: { serverNumber: number } | { url: string }) {
if ((options as any).url) {
this.rtmpsPort = this.parallel ? this.randomRTMP() : 1937
this.port = 9000 + this.internalServerNumber
- this.url = `http://localhost:${this.port}`
- this.host = `localhost:${this.port}`
- this.hostname = 'localhost'
+ this.url = `http://127.0.0.1:${this.port}`
+ this.host = `127.0.0.1:${this.port}`
+ this.hostname = '127.0.0.1'
}
setUrl (url: string) {
this.port = parseInt(parsed.port)
}
- async flushAndRun (configOverride?: Object, options: RunServerOptions = {}) {
+ getDirectoryPath (directoryName: string) {
+ const testDirectory = 'test' + this.internalServerNumber
+
+ return join(root(), testDirectory, directoryName)
+ }
+
+ async flushAndRun (configOverride?: object, options: RunServerOptions = {}) {
await ServersCommand.flushTests(this.internalServerNumber)
return this.run(configOverride, options)
const onPeerTubeExit = () => rej(new Error('Process exited:\n' + aggregatedLogs))
const onParentExit = () => {
- if (!this.app || !this.app.pid) return
+ if (!this.app?.pid) return
try {
process.kill(self.app.pid)
})
}
- 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 () {
suffix: '_test' + this.internalServerNumber
},
storage: {
- tmp: `test${this.internalServerNumber}/tmp/`,
- bin: `test${this.internalServerNumber}/bin/`,
- avatars: `test${this.internalServerNumber}/avatars/`,
- videos: `test${this.internalServerNumber}/videos/`,
- streaming_playlists: `test${this.internalServerNumber}/streaming-playlists/`,
- redundancy: `test${this.internalServerNumber}/redundancy/`,
- logs: `test${this.internalServerNumber}/logs/`,
- previews: `test${this.internalServerNumber}/previews/`,
- thumbnails: `test${this.internalServerNumber}/thumbnails/`,
- torrents: `test${this.internalServerNumber}/torrents/`,
- captions: `test${this.internalServerNumber}/captions/`,
- cache: `test${this.internalServerNumber}/cache/`,
- plugins: `test${this.internalServerNumber}/plugins/`
+ tmp: this.getDirectoryPath('tmp') + '/',
+ bin: this.getDirectoryPath('bin') + '/',
+ avatars: this.getDirectoryPath('avatars') + '/',
+ videos: this.getDirectoryPath('videos') + '/',
+ streaming_playlists: this.getDirectoryPath('streaming-playlists') + '/',
+ redundancy: this.getDirectoryPath('redundancy') + '/',
+ logs: this.getDirectoryPath('logs') + '/',
+ previews: this.getDirectoryPath('previews') + '/',
+ thumbnails: this.getDirectoryPath('thumbnails') + '/',
+ torrents: this.getDirectoryPath('torrents') + '/',
+ captions: this.getDirectoryPath('captions') + '/',
+ cache: this.getDirectoryPath('cache') + '/',
+ plugins: this.getDirectoryPath('plugins') + '/',
+ well_known: this.getDirectoryPath('well-known') + '/'
},
admin: {
email: `admin${this.internalServerNumber}@example.com`
this.debug = new DebugCommand(this)
this.follows = new FollowsCommand(this)
this.jobs = new JobsCommand(this)
+ this.metrics = new MetricsCommand(this)
this.plugins = new PluginsCommand(this)
this.redundancy = new RedundancyCommand(this)
this.stats = new StatsCommand(this)
this.playlists = new PlaylistsCommand(this)
this.history = new HistoryCommand(this)
this.imports = new ImportsCommand(this)
+ this.channelSyncs = new ChannelSyncsCommand(this)
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)
this.users = new UsersCommand(this)
this.videos = new VideosCommand(this)
this.objectStorage = new ObjectStorageCommand(this)
+ this.videoStudio = new VideoStudioCommand(this)
+ this.videoStats = new VideoStatsCommand(this)
+ this.views = new ViewsCommand(this)
+ 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)
}
}