]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/live/live-views.ts
shared/ typescript types dir server-commands
[github/Chocobozzz/PeerTube.git] / server / tests / api / live / live-views.ts
CommitLineData
8ebf2a5d
C
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2
3import 'mocha'
4import * as chai from 'chai'
5import { FfmpegCommand } from 'fluent-ffmpeg'
d23dd9fb 6import { VideoPrivacy } from '@shared/models'
8ebf2a5d
C
7import {
8 cleanupTests,
254d3579 9 createMultipleServers,
4c7e60bc 10 doubleFollow,
254d3579 11 PeerTubeServer,
8ebf2a5d
C
12 setAccessTokensToServers,
13 setDefaultVideoChannel,
14 stopFfmpeg,
8ebf2a5d
C
15 wait,
16 waitJobs,
17 waitUntilLivePublishedOnAllServers
bf54587a 18} from '../../../../shared/server-commands'
8ebf2a5d
C
19
20const expect = chai.expect
21
51353d9a 22describe('Live views', function () {
254d3579 23 let servers: PeerTubeServer[] = []
8ebf2a5d
C
24
25 before(async function () {
26 this.timeout(120000)
27
254d3579 28 servers = await createMultipleServers(2)
8ebf2a5d
C
29
30 // Get the access tokens
31 await setAccessTokensToServers(servers)
32 await setDefaultVideoChannel(servers)
33
89d241a7 34 await servers[0].config.updateCustomSubConfig({
65e6e260
C
35 newConfig: {
36 live: {
37 enabled: true,
38 allowReplay: true,
39 transcoding: {
40 enabled: false
41 }
8ebf2a5d
C
42 }
43 }
44 })
45
46 // Server 1 and server 2 follow each other
47 await doubleFollow(servers[0], servers[1])
48 })
49
51353d9a
C
50 let liveVideoId: string
51 let command: FfmpegCommand
8ebf2a5d 52
51353d9a
C
53 async function countViewers (expectedViewers: number) {
54 for (const server of servers) {
55 const video = await server.videos.get({ id: liveVideoId })
56 expect(video.viewers).to.equal(expectedViewers)
8ebf2a5d 57 }
51353d9a 58 }
8ebf2a5d 59
51353d9a
C
60 async function countViews (expectedViews: number) {
61 for (const server of servers) {
62 const video = await server.videos.get({ id: liveVideoId })
63 expect(video.views).to.equal(expectedViews)
64 }
65 }
8ebf2a5d 66
51353d9a
C
67 before(async function () {
68 this.timeout(30000)
8ebf2a5d 69
51353d9a
C
70 const liveAttributes = {
71 name: 'live video',
72 channelId: servers[0].store.channel.id,
73 privacy: VideoPrivacy.PUBLIC
74 }
8ebf2a5d 75
51353d9a
C
76 const live = await servers[0].live.create({ fields: liveAttributes })
77 liveVideoId = live.uuid
8ebf2a5d 78
51353d9a
C
79 command = await servers[0].live.sendRTMPStreamInVideo({ videoId: liveVideoId })
80 await waitUntilLivePublishedOnAllServers(servers, liveVideoId)
81 await waitJobs(servers)
82 })
8ebf2a5d 83
51353d9a
C
84 it('Should display no views and viewers for a live', async function () {
85 await countViews(0)
86 await countViewers(0)
87 })
8ebf2a5d 88
51353d9a
C
89 it('Should view a live twice and display 1 view/viewer', async function () {
90 this.timeout(30000)
8ebf2a5d 91
51353d9a
C
92 await servers[0].videos.view({ id: liveVideoId })
93 await servers[0].videos.view({ id: liveVideoId })
8ebf2a5d 94
51353d9a
C
95 await waitJobs(servers)
96 await countViewers(1)
8ebf2a5d 97
51353d9a
C
98 await wait(7000)
99 await countViews(1)
100 })
8ebf2a5d 101
51353d9a
C
102 it('Should wait and display 0 viewers while still have 1 view', async function () {
103 this.timeout(30000)
8ebf2a5d 104
51353d9a
C
105 await wait(12000)
106 await waitJobs(servers)
8ebf2a5d 107
51353d9a
C
108 await countViews(1)
109 await countViewers(0)
110 })
8ebf2a5d 111
51353d9a
C
112 it('Should view a live on a remote and on local and display 2 viewers and 3 views', async function () {
113 this.timeout(30000)
8ebf2a5d 114
51353d9a
C
115 await servers[0].videos.view({ id: liveVideoId })
116 await servers[1].videos.view({ id: liveVideoId })
117 await servers[1].videos.view({ id: liveVideoId })
118 await waitJobs(servers)
8ebf2a5d 119
51353d9a 120 await countViewers(2)
8ebf2a5d 121
51353d9a
C
122 await wait(7000)
123 await waitJobs(servers)
8ebf2a5d 124
51353d9a 125 await countViews(3)
8ebf2a5d
C
126 })
127
128 after(async function () {
51353d9a 129 await stopFfmpeg(command)
8ebf2a5d
C
130 await cleanupTests(servers)
131 })
132})