]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/live/live-rtmps.ts
Move typescript utils in its own directory
[github/Chocobozzz/PeerTube.git] / server / tests / api / live / live-rtmps.ts
CommitLineData
df1db951
C
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2
3import 'mocha'
4import * as chai from 'chai'
5import { VideoPrivacy } from '@shared/models'
6import {
7 buildAbsoluteFixturePath,
8 cleanupTests,
9 createSingleServer,
10 PeerTubeServer,
11 sendRTMPStream,
12 setAccessTokensToServers,
13 setDefaultVideoChannel,
14 stopFfmpeg,
15 testFfmpegStreamError,
16 waitUntilLivePublishedOnAllServers
17} from '../../../../shared/extra-utils'
18
19const expect = chai.expect
20
21describe('Test live RTMPS', function () {
22 let server: PeerTubeServer
23 let rtmpUrl: string
24 let rtmpsUrl: string
25
26 async function createLiveWrapper () {
27 const liveAttributes = {
28 name: 'live',
29 channelId: server.store.channel.id,
30 privacy: VideoPrivacy.PUBLIC,
31 saveReplay: false
32 }
33
34 const { uuid } = await server.live.create({ fields: liveAttributes })
35
36 const live = await server.live.get({ videoId: uuid })
37 const video = await server.videos.get({ id: uuid })
38
39 return Object.assign(video, live)
40 }
41
42 before(async function () {
43 this.timeout(120000)
44
45 server = await createSingleServer(1)
46
47 // Get the access tokens
48 await setAccessTokensToServers([ server ])
49 await setDefaultVideoChannel([ server ])
50
51 await server.config.updateCustomSubConfig({
52 newConfig: {
53 live: {
54 enabled: true,
55 allowReplay: true,
56 transcoding: {
57 enabled: false
58 }
59 }
60 }
61 })
62
63 rtmpUrl = 'rtmp://' + server.hostname + ':' + server.rtmpPort + '/live'
64 rtmpsUrl = 'rtmps://' + server.hostname + ':' + server.rtmpsPort + '/live'
65 })
66
67 it('Should enable RTMPS endpoint only', async function () {
68 this.timeout(240000)
69
70 await server.kill()
71 await server.run({
72 live: {
73 rtmp: {
74 enabled: false
75 },
76 rtmps: {
77 enabled: true,
78 port: server.rtmpsPort,
79 key_file: buildAbsoluteFixturePath('rtmps.key'),
80 cert_file: buildAbsoluteFixturePath('rtmps.cert')
81 }
82 }
83 })
84
85 {
86 const liveVideo = await createLiveWrapper()
87
88 expect(liveVideo.rtmpUrl).to.not.exist
89 expect(liveVideo.rtmpsUrl).to.equal(rtmpsUrl)
90
91 const command = sendRTMPStream({ rtmpBaseUrl: rtmpUrl, streamKey: liveVideo.streamKey })
92 await testFfmpegStreamError(command, true)
93 }
94
95 {
96 const liveVideo = await createLiveWrapper()
97
98 const command = sendRTMPStream({ rtmpBaseUrl: rtmpsUrl, streamKey: liveVideo.streamKey })
99 await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid)
100 await stopFfmpeg(command)
101 }
102 })
103
104 it('Should enable both RTMP and RTMPS', async function () {
105 this.timeout(240000)
106
107 await server.kill()
108 await server.run({
109 live: {
110 rtmp: {
111 enabled: true,
112 port: server.rtmpPort
113 },
114 rtmps: {
115 enabled: true,
116 port: server.rtmpsPort,
117 key_file: buildAbsoluteFixturePath('rtmps.key'),
118 cert_file: buildAbsoluteFixturePath('rtmps.cert')
119 }
120 }
121 })
122
123 {
124 const liveVideo = await createLiveWrapper()
125
126 expect(liveVideo.rtmpUrl).to.equal(rtmpUrl)
127 expect(liveVideo.rtmpsUrl).to.equal(rtmpsUrl)
128
129 const command = sendRTMPStream({ rtmpBaseUrl: rtmpUrl, streamKey: liveVideo.streamKey })
130 await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid)
131 await stopFfmpeg(command)
132 }
133
134 {
135 const liveVideo = await createLiveWrapper()
136
137 const command = sendRTMPStream({ rtmpBaseUrl: rtmpsUrl, streamKey: liveVideo.streamKey })
138 await waitUntilLivePublishedOnAllServers([ server ], liveVideo.uuid)
139 await stopFfmpeg(command)
140 }
141 })
142
143 after(async function () {
144 await cleanupTests([ server ])
145 })
146})