/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import 'mocha'
-import * as chai from 'chai'
+import { expect } from 'chai'
import { wait } from '@shared/core-utils'
-import { HttpStatusCode, LiveVideoCreate, VideoPrivacy } from '@shared/models'
+import { LiveVideoCreate, VideoPrivacy } from '@shared/models'
import {
cleanupTests,
createSingleServer,
- makeRawRequest,
PeerTubeServer,
setAccessTokensToServers,
setDefaultVideoChannel,
waitJobs
} from '@shared/server-commands'
-const expect = chai.expect
-
describe('Fast restream in live', function () {
let server: PeerTubeServer
privacy: VideoPrivacy.PUBLIC,
name: 'my super live',
saveReplay: options.replay,
+ replaySettings: options.replay ? { privacy: VideoPrivacy.PUBLIC } : undefined,
permanentLive: options.permanent
}
// Streaming session #1
let ffmpegCommand = await server.live.sendRTMPStreamInVideo(rtmpOptions)
await server.live.waitUntilPublished({ videoId: liveVideoUUID })
+
+ const video = await server.videos.get({ id: liveVideoUUID })
+ const session1PlaylistId = video.streamingPlaylists[0].id
+
await stopFfmpeg(ffmpegCommand)
await server.live.waitUntilWaiting({ videoId: liveVideoUUID })
// Streaming session #2
ffmpegCommand = await server.live.sendRTMPStreamInVideo(rtmpOptions)
- await server.live.waitUntilSegmentGeneration({ videoUUID: liveVideoUUID, segment: 0, playlistNumber: 0, totalSessions: 2 })
+
+ let hasNewPlaylist = false
+ do {
+ const video = await server.videos.get({ id: liveVideoUUID })
+ hasNewPlaylist = video.streamingPlaylists.length === 1 && video.streamingPlaylists[0].id !== session1PlaylistId
+
+ await wait(100)
+ } while (!hasNewPlaylist)
+
+ await server.live.waitUntilSegmentGeneration({
+ server,
+ videoUUID: liveVideoUUID,
+ segment: 1,
+ playlistNumber: 0,
+ objectStorage: false
+ })
return { ffmpegCommand, liveVideoUUID }
}
const video = await server.videos.get({ id: liveId })
expect(video.streamingPlaylists).to.have.lengthOf(1)
- await server.live.getSegment({ videoUUID: liveId, segment: 0, playlistNumber: 0 })
- await makeRawRequest(video.streamingPlaylists[0].playlistUrl, HttpStatusCode.OK_200)
- await makeRawRequest(video.streamingPlaylists[0].segmentsSha256Url, HttpStatusCode.OK_200)
+ try {
+ await server.live.getSegmentFile({ videoUUID: liveId, segment: 0, playlistNumber: 0 })
+ await server.streamingPlaylists.get({ url: video.streamingPlaylists[0].playlistUrl })
+ await server.streamingPlaylists.getSegmentSha256({ url: video.streamingPlaylists[0].segmentsSha256Url })
+ } catch (err) {
+ // FIXME: try to debug error in CI "Unexpected end of JSON input"
+ console.error(err)
+ throw err
+ }
await wait(100)
}
async function runTest (replay: boolean) {
const { ffmpegCommand, liveVideoUUID } = await fastRestreamWrapper({ replay })
+ // TODO: remove, we try to debug a test timeout failure here
+ console.log('Ensuring last live works')
+
await ensureLastLiveWorks(liveVideoUUID)
await stopFfmpeg(ffmpegCommand)
await server.config.enableLive({ allowReplay: true, transcoding: true, resolutions: 'min' })
})
- it('Should correctly fast reastream in a permanent live with and without save replay', async function () {
- this.timeout(240000)
+ it('Should correctly fast restream in a permanent live with and without save replay', async function () {
+ this.timeout(480000)
// A test can take a long time, so prefer to run them in parallel
await Promise.all([