1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
4 import * as chai from 'chai'
5 import { User, VideoDetails, VideoPrivacy } from '@shared/models'
12 flushAndRunMultipleServers,
15 runAndTestFfmpegStreamError,
17 setAccessTokensToServers,
18 setDefaultVideoChannel,
19 updateCustomSubConfig,
24 waitUntilLivePublished
25 } from '../../../../shared/extra-utils'
27 const expect = chai.expect
29 describe('Test live constraints', function () {
30 let servers: ServerInfo[] = []
32 let userAccessToken: string
33 let userChannelId: number
35 async function createLiveWrapper (saveReplay: boolean) {
36 const liveAttributes = {
38 channelId: userChannelId,
39 privacy: VideoPrivacy.PUBLIC,
43 const res = await createLive(servers[0].url, userAccessToken, liveAttributes)
44 return res.body.video.uuid as string
47 async function checkSaveReplay (videoId: string, resolutions = [ 720 ]) {
48 for (const server of servers) {
49 const res = await getVideo(server.url, videoId)
51 const video: VideoDetails = res.body
52 expect(video.isLive).to.be.false
53 expect(video.duration).to.be.greaterThan(0)
56 await checkLiveCleanup(servers[0], videoId, resolutions)
59 async function waitUntilLivePublishedOnAllServers (videoId: string) {
60 for (const server of servers) {
61 await waitUntilLivePublished(server.url, server.accessToken, videoId)
65 before(async function () {
68 servers = await flushAndRunMultipleServers(2)
70 // Get the access tokens
71 await setAccessTokensToServers(servers)
72 await setDefaultVideoChannel(servers)
74 await updateCustomSubConfig(servers[0].url, servers[0].accessToken, {
85 const user = { username: 'user1', password: 'superpassword' }
86 const res = await createUser({
88 accessToken: servers[0].accessToken,
89 username: user.username,
90 password: user.password
92 userId = res.body.user.id
94 userAccessToken = await userLogin(servers[0], user)
96 const resMe = await getMyUserInformation(servers[0].url, userAccessToken)
97 userChannelId = (resMe.body as User).videoChannels[0].id
102 accessToken: servers[0].accessToken,
108 // Server 1 and server 2 follow each other
109 await doubleFollow(servers[0], servers[1])
112 it('Should not have size limit if save replay is disabled', async function () {
115 const userVideoLiveoId = await createLiveWrapper(false)
116 await runAndTestFfmpegStreamError(servers[0].url, userAccessToken, userVideoLiveoId, false)
119 it('Should have size limit depending on user global quota if save replay is enabled', async function () {
122 // Wait for user quota memoize cache invalidation
125 const userVideoLiveoId = await createLiveWrapper(true)
126 await runAndTestFfmpegStreamError(servers[0].url, userAccessToken, userVideoLiveoId, true)
128 await waitUntilLivePublishedOnAllServers(userVideoLiveoId)
129 await waitJobs(servers)
131 await checkSaveReplay(userVideoLiveoId)
134 it('Should have size limit depending on user daily quota if save replay is enabled', async function () {
137 // Wait for user quota memoize cache invalidation
143 accessToken: servers[0].accessToken,
148 const userVideoLiveoId = await createLiveWrapper(true)
149 await runAndTestFfmpegStreamError(servers[0].url, userAccessToken, userVideoLiveoId, true)
151 await waitUntilLivePublishedOnAllServers(userVideoLiveoId)
152 await waitJobs(servers)
154 await checkSaveReplay(userVideoLiveoId)
157 it('Should succeed without quota limit', async function () {
160 // Wait for user quota memoize cache invalidation
166 accessToken: servers[0].accessToken,
167 videoQuota: 10 * 1000 * 1000,
171 const userVideoLiveoId = await createLiveWrapper(true)
172 await runAndTestFfmpegStreamError(servers[0].url, userAccessToken, userVideoLiveoId, false)
175 it('Should have max duration limit', async function () {
178 await updateCustomSubConfig(servers[0].url, servers[0].accessToken, {
198 const userVideoLiveoId = await createLiveWrapper(true)
199 await runAndTestFfmpegStreamError(servers[0].url, userAccessToken, userVideoLiveoId, true)
201 await waitUntilLivePublishedOnAllServers(userVideoLiveoId)
202 await waitJobs(servers)
204 await checkSaveReplay(userVideoLiveoId, [ 720, 480, 360, 240 ])
207 after(async function () {
208 await cleanupTests(servers)