]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/transcoding/hls.ts
Remove low timeouts
[github/Chocobozzz/PeerTube.git] / server / tests / api / transcoding / hls.ts
1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2
3 import { join } from 'path'
4 import { checkDirectoryIsEmpty, checkTmpIsEmpty, completeCheckHlsPlaylist } from '@server/tests/shared'
5 import { areMockObjectStorageTestsDisabled } from '@shared/core-utils'
6 import { HttpStatusCode } from '@shared/models'
7 import {
8 cleanupTests,
9 createMultipleServers,
10 doubleFollow,
11 ObjectStorageCommand,
12 PeerTubeServer,
13 setAccessTokensToServers,
14 waitJobs
15 } from '@shared/server-commands'
16 import { DEFAULT_AUDIO_RESOLUTION } from '../../../initializers/constants'
17
18 describe('Test HLS videos', function () {
19 let servers: PeerTubeServer[] = []
20
21 function runTestSuite (hlsOnly: boolean, objectStorageBaseUrl?: string) {
22 const videoUUIDs: string[] = []
23
24 it('Should upload a video and transcode it to HLS', async function () {
25 this.timeout(120000)
26
27 const { uuid } = await servers[0].videos.upload({ attributes: { name: 'video 1', fixture: 'video_short.webm' } })
28 videoUUIDs.push(uuid)
29
30 await waitJobs(servers)
31
32 await completeCheckHlsPlaylist({ servers, videoUUID: uuid, hlsOnly, objectStorageBaseUrl })
33 })
34
35 it('Should upload an audio file and transcode it to HLS', async function () {
36 this.timeout(120000)
37
38 const { uuid } = await servers[0].videos.upload({ attributes: { name: 'video audio', fixture: 'sample.ogg' } })
39 videoUUIDs.push(uuid)
40
41 await waitJobs(servers)
42
43 await completeCheckHlsPlaylist({
44 servers,
45 videoUUID: uuid,
46 hlsOnly,
47 resolutions: [ DEFAULT_AUDIO_RESOLUTION, 360, 240 ],
48 objectStorageBaseUrl
49 })
50 })
51
52 it('Should update the video', async function () {
53 this.timeout(30000)
54
55 await servers[0].videos.update({ id: videoUUIDs[0], attributes: { name: 'video 1 updated' } })
56
57 await waitJobs(servers)
58
59 await completeCheckHlsPlaylist({ servers, videoUUID: videoUUIDs[0], hlsOnly, objectStorageBaseUrl })
60 })
61
62 it('Should delete videos', async function () {
63 for (const uuid of videoUUIDs) {
64 await servers[0].videos.remove({ id: uuid })
65 }
66
67 await waitJobs(servers)
68
69 for (const server of servers) {
70 for (const uuid of videoUUIDs) {
71 await server.videos.get({ id: uuid, expectedStatus: HttpStatusCode.NOT_FOUND_404 })
72 }
73 }
74 })
75
76 it('Should have the playlists/segment deleted from the disk', async function () {
77 for (const server of servers) {
78 await checkDirectoryIsEmpty(server, 'videos', [ 'private' ])
79 await checkDirectoryIsEmpty(server, join('videos', 'private'))
80
81 await checkDirectoryIsEmpty(server, join('streaming-playlists', 'hls'), [ 'private' ])
82 await checkDirectoryIsEmpty(server, join('streaming-playlists', 'hls', 'private'))
83 }
84 })
85
86 it('Should have an empty tmp directory', async function () {
87 for (const server of servers) {
88 await checkTmpIsEmpty(server)
89 }
90 })
91 }
92
93 before(async function () {
94 this.timeout(120000)
95
96 const configOverride = {
97 transcoding: {
98 enabled: true,
99 allow_audio_files: true,
100 hls: {
101 enabled: true
102 }
103 }
104 }
105 servers = await createMultipleServers(2, configOverride)
106
107 // Get the access tokens
108 await setAccessTokensToServers(servers)
109
110 // Server 1 and server 2 follow each other
111 await doubleFollow(servers[0], servers[1])
112 })
113
114 describe('With WebTorrent & HLS enabled', function () {
115 runTestSuite(false)
116 })
117
118 describe('With only HLS enabled', function () {
119
120 before(async function () {
121 await servers[0].config.updateCustomSubConfig({
122 newConfig: {
123 transcoding: {
124 enabled: true,
125 allowAudioFiles: true,
126 resolutions: {
127 '144p': false,
128 '240p': true,
129 '360p': true,
130 '480p': true,
131 '720p': true,
132 '1080p': true,
133 '1440p': true,
134 '2160p': true
135 },
136 hls: {
137 enabled: true
138 },
139 webtorrent: {
140 enabled: false
141 }
142 }
143 }
144 })
145 })
146
147 runTestSuite(true)
148 })
149
150 describe('With object storage enabled', function () {
151 if (areMockObjectStorageTestsDisabled()) return
152
153 before(async function () {
154 this.timeout(120000)
155
156 const configOverride = ObjectStorageCommand.getDefaultMockConfig()
157 await ObjectStorageCommand.prepareDefaultMockBuckets()
158
159 await servers[0].kill()
160 await servers[0].run(configOverride)
161 })
162
163 runTestSuite(true, ObjectStorageCommand.getMockPlaylistBaseUrl())
164 })
165
166 after(async function () {
167 await cleanupTests(servers)
168 })
169 })