]>
Commit | Line | Data |
---|---|---|
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 | }) |