aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/tests
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2022-02-01 14:19:44 +0100
committerChocobozzz <me@florianbigard.com>2022-02-01 14:19:44 +0100
commita2caee9f5162232234de2e8aae6957cc7f38c853 (patch)
treef6ca87b03ed80ca4b6625a7b2b31706cd4f831ad /server/tests
parent0f11ec8dd32b50897c18588db948e96cf0fc2c70 (diff)
downloadPeerTube-a2caee9f5162232234de2e8aae6957cc7f38c853.tar.gz
PeerTube-a2caee9f5162232234de2e8aae6957cc7f38c853.tar.zst
PeerTube-a2caee9f5162232234de2e8aae6957cc7f38c853.zip
Fix HLS re transcoding with object storage enabled
Diffstat (limited to 'server/tests')
-rw-r--r--server/tests/api/videos/video-create-transcoding.ts85
-rw-r--r--server/tests/cli/create-transcoding-job.ts13
2 files changed, 90 insertions, 8 deletions
diff --git a/server/tests/api/videos/video-create-transcoding.ts b/server/tests/api/videos/video-create-transcoding.ts
index dcdbd9c6e..445866a16 100644
--- a/server/tests/api/videos/video-create-transcoding.ts
+++ b/server/tests/api/videos/video-create-transcoding.ts
@@ -2,11 +2,12 @@
2 2
3import 'mocha' 3import 'mocha'
4import * as chai from 'chai' 4import * as chai from 'chai'
5import { expectStartWith } from '@server/tests/shared' 5import { checkResolutionsInMasterPlaylist, expectStartWith } from '@server/tests/shared'
6import { areObjectStorageTestsDisabled } from '@shared/core-utils' 6import { areObjectStorageTestsDisabled } from '@shared/core-utils'
7import { HttpStatusCode, VideoDetails } from '@shared/models' 7import { HttpStatusCode, VideoDetails } from '@shared/models'
8import { 8import {
9 cleanupTests, 9 cleanupTests,
10 ConfigCommand,
10 createMultipleServers, 11 createMultipleServers,
11 doubleFollow, 12 doubleFollow,
12 expectNoFailedTranscodingJob, 13 expectNoFailedTranscodingJob,
@@ -25,14 +26,19 @@ async function checkFilesInObjectStorage (video: VideoDetails) {
25 await makeRawRequest(file.fileUrl, HttpStatusCode.OK_200) 26 await makeRawRequest(file.fileUrl, HttpStatusCode.OK_200)
26 } 27 }
27 28
28 const streamingPlaylistFiles = video.streamingPlaylists.length === 0 29 if (video.streamingPlaylists.length === 0) return
29 ? []
30 : video.streamingPlaylists[0].files
31 30
32 for (const file of streamingPlaylistFiles) { 31 const hlsPlaylist = video.streamingPlaylists[0]
32 for (const file of hlsPlaylist.files) {
33 expectStartWith(file.fileUrl, ObjectStorageCommand.getPlaylistBaseUrl()) 33 expectStartWith(file.fileUrl, ObjectStorageCommand.getPlaylistBaseUrl())
34 await makeRawRequest(file.fileUrl, HttpStatusCode.OK_200) 34 await makeRawRequest(file.fileUrl, HttpStatusCode.OK_200)
35 } 35 }
36
37 expectStartWith(hlsPlaylist.playlistUrl, ObjectStorageCommand.getPlaylistBaseUrl())
38 await makeRawRequest(hlsPlaylist.playlistUrl, HttpStatusCode.OK_200)
39
40 expectStartWith(hlsPlaylist.segmentsSha256Url, ObjectStorageCommand.getPlaylistBaseUrl())
41 await makeRawRequest(hlsPlaylist.segmentsSha256Url, HttpStatusCode.OK_200)
36} 42}
37 43
38function runTests (objectStorage: boolean) { 44function runTests (objectStorage: boolean) {
@@ -150,6 +156,75 @@ function runTests (objectStorage: boolean) {
150 } 156 }
151 }) 157 })
152 158
159 it('Should correctly update HLS playlist on resolution change', async function () {
160 await servers[0].config.updateExistingSubConfig({
161 newConfig: {
162 transcoding: {
163 enabled: true,
164 resolutions: ConfigCommand.getCustomConfigResolutions(false),
165
166 webtorrent: {
167 enabled: true
168 },
169 hls: {
170 enabled: true
171 }
172 }
173 }
174 })
175
176 const { uuid } = await servers[0].videos.quickUpload({ name: 'quick' })
177
178 await waitJobs(servers)
179
180 for (const server of servers) {
181 const videoDetails = await server.videos.get({ id: uuid })
182
183 expect(videoDetails.files).to.have.lengthOf(1)
184 expect(videoDetails.streamingPlaylists).to.have.lengthOf(1)
185 expect(videoDetails.streamingPlaylists[0].files).to.have.lengthOf(1)
186
187 if (objectStorage) await checkFilesInObjectStorage(videoDetails)
188 }
189
190 await servers[0].config.updateExistingSubConfig({
191 newConfig: {
192 transcoding: {
193 enabled: true,
194 resolutions: ConfigCommand.getCustomConfigResolutions(true),
195
196 webtorrent: {
197 enabled: true
198 },
199 hls: {
200 enabled: true
201 }
202 }
203 }
204 })
205
206 await servers[0].videos.runTranscoding({ videoId: uuid, transcodingType: 'hls' })
207 await waitJobs(servers)
208
209 for (const server of servers) {
210 const videoDetails = await server.videos.get({ id: uuid })
211
212 expect(videoDetails.streamingPlaylists).to.have.lengthOf(1)
213 expect(videoDetails.streamingPlaylists[0].files).to.have.lengthOf(5)
214
215 if (objectStorage) {
216 await checkFilesInObjectStorage(videoDetails)
217
218 const hlsPlaylist = videoDetails.streamingPlaylists[0]
219 const resolutions = hlsPlaylist.files.map(f => f.resolution.id)
220 await checkResolutionsInMasterPlaylist({ server: servers[0], playlistUrl: hlsPlaylist.playlistUrl, resolutions })
221
222 const shaBody = await servers[0].streamingPlaylists.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url })
223 expect(Object.keys(shaBody)).to.have.lengthOf(5)
224 }
225 }
226 })
227
153 it('Should not have updated published at attributes', async function () { 228 it('Should not have updated published at attributes', async function () {
154 const video = await servers[0].videos.get({ id: videoUUID }) 229 const video = await servers[0].videos.get({ id: videoUUID })
155 230
diff --git a/server/tests/cli/create-transcoding-job.ts b/server/tests/cli/create-transcoding-job.ts
index c85130fef..b90e9bde9 100644
--- a/server/tests/cli/create-transcoding-job.ts
+++ b/server/tests/cli/create-transcoding-job.ts
@@ -14,7 +14,7 @@ import {
14 setAccessTokensToServers, 14 setAccessTokensToServers,
15 waitJobs 15 waitJobs
16} from '@shared/server-commands' 16} from '@shared/server-commands'
17import { expectStartWith } from '../shared' 17import { checkResolutionsInMasterPlaylist, expectStartWith } from '../shared'
18 18
19const expect = chai.expect 19const expect = chai.expect
20 20
@@ -163,11 +163,18 @@ function runTests (objectStorage: boolean) {
163 163
164 expect(videoDetails.streamingPlaylists).to.have.lengthOf(1) 164 expect(videoDetails.streamingPlaylists).to.have.lengthOf(1)
165 165
166 const files = videoDetails.streamingPlaylists[0].files 166 const hlsPlaylist = videoDetails.streamingPlaylists[0]
167
168 const files = hlsPlaylist.files
167 expect(files).to.have.lengthOf(1) 169 expect(files).to.have.lengthOf(1)
168 expect(files[0].resolution.id).to.equal(480) 170 expect(files[0].resolution.id).to.equal(480)
169 171
170 if (objectStorage) await checkFilesInObjectStorage(files, 'playlist') 172 if (objectStorage) {
173 await checkFilesInObjectStorage(files, 'playlist')
174
175 const resolutions = files.map(f => f.resolution.id)
176 await checkResolutionsInMasterPlaylist({ server, playlistUrl: hlsPlaylist.playlistUrl, resolutions })
177 }
171 } 178 }
172 }) 179 })
173 180