diff options
author | Chocobozzz <me@florianbigard.com> | 2023-05-04 15:29:34 +0200 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2023-05-09 08:57:34 +0200 |
commit | 5e47f6ab984a7d00782e4c7030afffa1ba480add (patch) | |
tree | 1ce586b591a8d71acbc301eba29b9a5e6490439e /server/tests/peertube-runner | |
parent | 6a4905602636afd6650c9e6f4d0fcc2105d91100 (diff) | |
download | PeerTube-5e47f6ab984a7d00782e4c7030afffa1ba480add.tar.gz PeerTube-5e47f6ab984a7d00782e4c7030afffa1ba480add.tar.zst PeerTube-5e47f6ab984a7d00782e4c7030afffa1ba480add.zip |
Support studio transcoding in peertube runner
Diffstat (limited to 'server/tests/peertube-runner')
-rw-r--r-- | server/tests/peertube-runner/index.ts | 1 | ||||
-rw-r--r-- | server/tests/peertube-runner/live-transcoding.ts | 15 | ||||
-rw-r--r-- | server/tests/peertube-runner/studio-transcoding.ts | 116 | ||||
-rw-r--r-- | server/tests/peertube-runner/vod-transcoding.ts | 14 |
4 files changed, 144 insertions, 2 deletions
diff --git a/server/tests/peertube-runner/index.ts b/server/tests/peertube-runner/index.ts index 6258d6eb2..470316417 100644 --- a/server/tests/peertube-runner/index.ts +++ b/server/tests/peertube-runner/index.ts | |||
@@ -1,3 +1,4 @@ | |||
1 | export * from './client-cli' | 1 | export * from './client-cli' |
2 | export * from './live-transcoding' | 2 | export * from './live-transcoding' |
3 | export * from './studio-transcoding' | ||
3 | export * from './vod-transcoding' | 4 | export * from './vod-transcoding' |
diff --git a/server/tests/peertube-runner/live-transcoding.ts b/server/tests/peertube-runner/live-transcoding.ts index f58e920ba..1e94eabcd 100644 --- a/server/tests/peertube-runner/live-transcoding.ts +++ b/server/tests/peertube-runner/live-transcoding.ts | |||
@@ -1,6 +1,12 @@ | |||
1 | import { expect } from 'chai' | 1 | import { expect } from 'chai' |
2 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 2 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
3 | import { expectStartWith, PeerTubeRunnerProcess, SQLCommand, testLiveVideoResolutions } from '@server/tests/shared' | 3 | import { |
4 | checkPeerTubeRunnerCacheIsEmpty, | ||
5 | expectStartWith, | ||
6 | PeerTubeRunnerProcess, | ||
7 | SQLCommand, | ||
8 | testLiveVideoResolutions | ||
9 | } from '@server/tests/shared' | ||
4 | import { areMockObjectStorageTestsDisabled, wait } from '@shared/core-utils' | 10 | import { areMockObjectStorageTestsDisabled, wait } from '@shared/core-utils' |
5 | import { HttpStatusCode, VideoPrivacy } from '@shared/models' | 11 | import { HttpStatusCode, VideoPrivacy } from '@shared/models' |
6 | import { | 12 | import { |
@@ -169,6 +175,13 @@ describe('Test Live transcoding in peertube-runner program', function () { | |||
169 | runSuite({ objectStorage: true }) | 175 | runSuite({ objectStorage: true }) |
170 | }) | 176 | }) |
171 | 177 | ||
178 | describe('Check cleanup', function () { | ||
179 | |||
180 | it('Should have an empty cache directory', async function () { | ||
181 | await checkPeerTubeRunnerCacheIsEmpty() | ||
182 | }) | ||
183 | }) | ||
184 | |||
172 | after(async function () { | 185 | after(async function () { |
173 | await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) | 186 | await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) |
174 | peertubeRunner.kill() | 187 | peertubeRunner.kill() |
diff --git a/server/tests/peertube-runner/studio-transcoding.ts b/server/tests/peertube-runner/studio-transcoding.ts new file mode 100644 index 000000000..cca905e2f --- /dev/null +++ b/server/tests/peertube-runner/studio-transcoding.ts | |||
@@ -0,0 +1,116 @@ | |||
1 | |||
2 | import { expect } from 'chai' | ||
3 | import { checkPeerTubeRunnerCacheIsEmpty, checkVideoDuration, expectStartWith, PeerTubeRunnerProcess } from '@server/tests/shared' | ||
4 | import { areMockObjectStorageTestsDisabled, getAllFiles, wait } from '@shared/core-utils' | ||
5 | import { | ||
6 | cleanupTests, | ||
7 | createMultipleServers, | ||
8 | doubleFollow, | ||
9 | ObjectStorageCommand, | ||
10 | PeerTubeServer, | ||
11 | setAccessTokensToServers, | ||
12 | setDefaultVideoChannel, | ||
13 | VideoStudioCommand, | ||
14 | waitJobs | ||
15 | } from '@shared/server-commands' | ||
16 | |||
17 | describe('Test studio transcoding in peertube-runner program', function () { | ||
18 | let servers: PeerTubeServer[] = [] | ||
19 | let peertubeRunner: PeerTubeRunnerProcess | ||
20 | |||
21 | function runSuite (options: { | ||
22 | objectStorage: boolean | ||
23 | }) { | ||
24 | const { objectStorage } = options | ||
25 | |||
26 | it('Should run a complex studio transcoding', async function () { | ||
27 | this.timeout(120000) | ||
28 | |||
29 | const { uuid } = await servers[0].videos.quickUpload({ name: 'mp4', fixture: 'video_short.mp4' }) | ||
30 | await waitJobs(servers) | ||
31 | |||
32 | const video = await servers[0].videos.get({ id: uuid }) | ||
33 | const oldFileUrls = getAllFiles(video).map(f => f.fileUrl) | ||
34 | |||
35 | await servers[0].videoStudio.createEditionTasks({ videoId: uuid, tasks: VideoStudioCommand.getComplexTask() }) | ||
36 | await waitJobs(servers, { runnerJobs: true }) | ||
37 | |||
38 | for (const server of servers) { | ||
39 | const video = await server.videos.get({ id: uuid }) | ||
40 | const files = getAllFiles(video) | ||
41 | |||
42 | for (const f of files) { | ||
43 | expect(oldFileUrls).to.not.include(f.fileUrl) | ||
44 | } | ||
45 | |||
46 | if (objectStorage) { | ||
47 | for (const webtorrentFile of video.files) { | ||
48 | expectStartWith(webtorrentFile.fileUrl, ObjectStorageCommand.getMockWebTorrentBaseUrl()) | ||
49 | } | ||
50 | |||
51 | for (const hlsFile of video.streamingPlaylists[0].files) { | ||
52 | expectStartWith(hlsFile.fileUrl, ObjectStorageCommand.getMockPlaylistBaseUrl()) | ||
53 | } | ||
54 | } | ||
55 | |||
56 | await checkVideoDuration(server, uuid, 9) | ||
57 | } | ||
58 | }) | ||
59 | } | ||
60 | |||
61 | before(async function () { | ||
62 | this.timeout(120_000) | ||
63 | |||
64 | servers = await createMultipleServers(2) | ||
65 | |||
66 | await setAccessTokensToServers(servers) | ||
67 | await setDefaultVideoChannel(servers) | ||
68 | |||
69 | await doubleFollow(servers[0], servers[1]) | ||
70 | |||
71 | await servers[0].config.enableTranscoding(true, true) | ||
72 | await servers[0].config.enableStudio() | ||
73 | await servers[0].config.enableRemoteStudio() | ||
74 | |||
75 | const registrationToken = await servers[0].runnerRegistrationTokens.getFirstRegistrationToken() | ||
76 | |||
77 | peertubeRunner = new PeerTubeRunnerProcess() | ||
78 | await peertubeRunner.runServer({ hideLogs: false }) | ||
79 | await peertubeRunner.registerPeerTubeInstance({ server: servers[0], registrationToken, runnerName: 'runner' }) | ||
80 | }) | ||
81 | |||
82 | describe('With videos on local filesystem storage', function () { | ||
83 | runSuite({ objectStorage: false }) | ||
84 | }) | ||
85 | |||
86 | describe('With videos on object storage', function () { | ||
87 | if (areMockObjectStorageTestsDisabled()) return | ||
88 | |||
89 | before(async function () { | ||
90 | await ObjectStorageCommand.prepareDefaultMockBuckets() | ||
91 | |||
92 | await servers[0].kill() | ||
93 | |||
94 | await servers[0].run(ObjectStorageCommand.getDefaultMockConfig()) | ||
95 | |||
96 | // Wait for peertube runner socket reconnection | ||
97 | await wait(1500) | ||
98 | }) | ||
99 | |||
100 | runSuite({ objectStorage: true }) | ||
101 | }) | ||
102 | |||
103 | describe('Check cleanup', function () { | ||
104 | |||
105 | it('Should have an empty cache directory', async function () { | ||
106 | await checkPeerTubeRunnerCacheIsEmpty() | ||
107 | }) | ||
108 | }) | ||
109 | |||
110 | after(async function () { | ||
111 | await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) | ||
112 | peertubeRunner.kill() | ||
113 | |||
114 | await cleanupTests(servers) | ||
115 | }) | ||
116 | }) | ||
diff --git a/server/tests/peertube-runner/vod-transcoding.ts b/server/tests/peertube-runner/vod-transcoding.ts index bdf798379..3a9abba93 100644 --- a/server/tests/peertube-runner/vod-transcoding.ts +++ b/server/tests/peertube-runner/vod-transcoding.ts | |||
@@ -1,6 +1,11 @@ | |||
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ | 1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | import { expect } from 'chai' | 2 | import { expect } from 'chai' |
3 | import { completeCheckHlsPlaylist, completeWebVideoFilesCheck, PeerTubeRunnerProcess } from '@server/tests/shared' | 3 | import { |
4 | checkPeerTubeRunnerCacheIsEmpty, | ||
5 | completeCheckHlsPlaylist, | ||
6 | completeWebVideoFilesCheck, | ||
7 | PeerTubeRunnerProcess | ||
8 | } from '@server/tests/shared' | ||
4 | import { areMockObjectStorageTestsDisabled, getAllFiles, wait } from '@shared/core-utils' | 9 | import { areMockObjectStorageTestsDisabled, getAllFiles, wait } from '@shared/core-utils' |
5 | import { VideoPrivacy } from '@shared/models' | 10 | import { VideoPrivacy } from '@shared/models' |
6 | import { | 11 | import { |
@@ -321,6 +326,13 @@ describe('Test VOD transcoding in peertube-runner program', function () { | |||
321 | }) | 326 | }) |
322 | }) | 327 | }) |
323 | 328 | ||
329 | describe('Check cleanup', function () { | ||
330 | |||
331 | it('Should have an empty cache directory', async function () { | ||
332 | await checkPeerTubeRunnerCacheIsEmpty() | ||
333 | }) | ||
334 | }) | ||
335 | |||
324 | after(async function () { | 336 | after(async function () { |
325 | await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) | 337 | await peertubeRunner.unregisterPeerTubeInstance({ server: servers[0] }) |
326 | peertubeRunner.kill() | 338 | peertubeRunner.kill() |