X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Flive%2Flive-constraints.ts;h=cab76f425908febeb147c2c1aa88bfabd052df95;hb=9295c68b74fe1f1e2e9f72009205d7f0379844c5;hp=290d325d40d4e57ff3c953532b285d5540f18547;hpb=7926c5f9b3ffcabb1ffb0dcfa5e48b8e0b88fbc0;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/live/live-constraints.ts b/server/tests/api/live/live-constraints.ts index 290d325d4..cab76f425 100644 --- a/server/tests/api/live/live-constraints.ts +++ b/server/tests/api/live/live-constraints.ts @@ -2,46 +2,51 @@ import 'mocha' import * as chai from 'chai' -import { VideoDetails, VideoPrivacy } from '@shared/models' +import { wait } from '@shared/core-utils' +import { LiveVideoError, VideoPrivacy } from '@shared/models' import { - checkLiveCleanup, cleanupTests, ConfigCommand, + createMultipleServers, doubleFollow, - flushAndRunMultipleServers, - getVideo, - ServerInfo, + PeerTubeServer, setAccessTokensToServers, setDefaultVideoChannel, - wait, - waitJobs -} from '../../../../shared/extra-utils' + waitJobs, + waitUntilLiveReplacedByReplayOnAllServers, + waitUntilLiveWaitingOnAllServers +} from '@shared/server-commands' +import { checkLiveCleanup } from '../../shared' const expect = chai.expect describe('Test live constraints', function () { - let servers: ServerInfo[] = [] + let servers: PeerTubeServer[] = [] let userId: number let userAccessToken: string let userChannelId: number - async function createLiveWrapper (saveReplay: boolean) { + async function createLiveWrapper (options: { + replay: boolean + permanent: boolean + }) { + const { replay, permanent } = options + const liveAttributes = { name: 'user live', channelId: userChannelId, privacy: VideoPrivacy.PUBLIC, - saveReplay + saveReplay: replay, + permanentLive: permanent } - const { uuid } = await servers[0].liveCommand.create({ token: userAccessToken, fields: liveAttributes }) + const { uuid } = await servers[0].live.create({ token: userAccessToken, fields: liveAttributes }) return uuid } async function checkSaveReplay (videoId: string, resolutions = [ 720 ]) { for (const server of servers) { - const res = await getVideo(server.url, videoId) - - const video: VideoDetails = res.body + const video = await server.videos.get({ id: videoId }) expect(video.isLive).to.be.false expect(video.duration).to.be.greaterThan(0) } @@ -49,14 +54,8 @@ describe('Test live constraints', function () { await checkLiveCleanup(servers[0], videoId, resolutions) } - async function waitUntilLivePublishedOnAllServers (videoId: string) { - for (const server of servers) { - await server.liveCommand.waitUntilPublished({ videoId }) - } - } - function updateQuota (options: { total: number, daily: number }) { - return servers[0].usersCommand.update({ + return servers[0].users.update({ userId, videoQuota: options.total, videoQuotaDaily: options.daily @@ -66,13 +65,13 @@ describe('Test live constraints', function () { before(async function () { this.timeout(120000) - servers = await flushAndRunMultipleServers(2) + servers = await createMultipleServers(2) // Get the access tokens await setAccessTokensToServers(servers) await setDefaultVideoChannel(servers) - await servers[0].configCommand.updateCustomSubConfig({ + await servers[0].config.updateCustomSubConfig({ newConfig: { live: { enabled: true, @@ -85,7 +84,7 @@ describe('Test live constraints', function () { }) { - const res = await servers[0].usersCommand.generate('user1') + const res = await servers[0].users.generate('user1') userId = res.userId userChannelId = res.userChannelId userAccessToken = res.token @@ -100,23 +99,42 @@ describe('Test live constraints', function () { it('Should not have size limit if save replay is disabled', async function () { this.timeout(60000) - const userVideoLiveoId = await createLiveWrapper(false) - await servers[0].liveCommand.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: false }) + const userVideoLiveoId = await createLiveWrapper({ replay: false, permanent: false }) + await servers[0].live.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: false }) }) - it('Should have size limit depending on user global quota if save replay is enabled', async function () { + it('Should have size limit depending on user global quota if save replay is enabled on non permanent live', async function () { this.timeout(60000) // Wait for user quota memoize cache invalidation await wait(5000) - const userVideoLiveoId = await createLiveWrapper(true) - await servers[0].liveCommand.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) + const userVideoLiveoId = await createLiveWrapper({ replay: true, permanent: false }) + await servers[0].live.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) - await waitUntilLivePublishedOnAllServers(userVideoLiveoId) + await waitUntilLiveReplacedByReplayOnAllServers(servers, userVideoLiveoId) await waitJobs(servers) await checkSaveReplay(userVideoLiveoId) + + const session = await servers[0].live.getReplaySession({ videoId: userVideoLiveoId }) + expect(session.error).to.equal(LiveVideoError.QUOTA_EXCEEDED) + }) + + it('Should have size limit depending on user global quota if save replay is enabled on a permanent live', async function () { + this.timeout(60000) + + // Wait for user quota memoize cache invalidation + await wait(5000) + + const userVideoLiveoId = await createLiveWrapper({ replay: true, permanent: true }) + await servers[0].live.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) + + await waitJobs(servers) + await waitUntilLiveWaitingOnAllServers(servers, userVideoLiveoId) + + const session = await servers[0].live.findLatestSession({ videoId: userVideoLiveoId }) + expect(session.error).to.equal(LiveVideoError.QUOTA_EXCEEDED) }) it('Should have size limit depending on user daily quota if save replay is enabled', async function () { @@ -127,13 +145,16 @@ describe('Test live constraints', function () { await updateQuota({ total: -1, daily: 1 }) - const userVideoLiveoId = await createLiveWrapper(true) - await servers[0].liveCommand.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) + const userVideoLiveoId = await createLiveWrapper({ replay: true, permanent: false }) + await servers[0].live.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) - await waitUntilLivePublishedOnAllServers(userVideoLiveoId) + await waitUntilLiveReplacedByReplayOnAllServers(servers, userVideoLiveoId) await waitJobs(servers) await checkSaveReplay(userVideoLiveoId) + + const session = await servers[0].live.getReplaySession({ videoId: userVideoLiveoId }) + expect(session.error).to.equal(LiveVideoError.QUOTA_EXCEEDED) }) it('Should succeed without quota limit', async function () { @@ -144,14 +165,14 @@ describe('Test live constraints', function () { await updateQuota({ total: 10 * 1000 * 1000, daily: -1 }) - const userVideoLiveoId = await createLiveWrapper(true) - await servers[0].liveCommand.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: false }) + const userVideoLiveoId = await createLiveWrapper({ replay: true, permanent: false }) + await servers[0].live.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: false }) }) it('Should have max duration limit', async function () { this.timeout(60000) - await servers[0].configCommand.updateCustomSubConfig({ + await servers[0].config.updateCustomSubConfig({ newConfig: { live: { enabled: true, @@ -165,13 +186,16 @@ describe('Test live constraints', function () { } }) - const userVideoLiveoId = await createLiveWrapper(true) - await servers[0].liveCommand.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) + const userVideoLiveoId = await createLiveWrapper({ replay: true, permanent: false }) + await servers[0].live.runAndTestStreamError({ token: userAccessToken, videoId: userVideoLiveoId, shouldHaveError: true }) - await waitUntilLivePublishedOnAllServers(userVideoLiveoId) + await waitUntilLiveReplacedByReplayOnAllServers(servers, userVideoLiveoId) await waitJobs(servers) - await checkSaveReplay(userVideoLiveoId, [ 720, 480, 360, 240 ]) + await checkSaveReplay(userVideoLiveoId, [ 720, 480, 360, 240, 144 ]) + + const session = await servers[0].live.getReplaySession({ videoId: userVideoLiveoId }) + expect(session.error).to.equal(LiveVideoError.DURATION_EXCEEDED) }) after(async function () {