import * as chai from 'chai'
import { FfmpegCommand } from 'fluent-ffmpeg'
import { LiveVideoCreate, VideoDetails, VideoPrivacy, VideoState } from '@shared/models'
+import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
import {
addVideoToBlacklist,
checkLiveCleanup,
cleanupTests,
- createLive,
+ ConfigCommand,
doubleFollow,
flushAndRunMultipleServers,
getVideo,
getVideosList,
removeVideo,
- sendRTMPStreamInVideo,
ServerInfo,
setAccessTokensToServers,
setDefaultVideoChannel,
stopFfmpeg,
testFfmpegStreamError,
- updateCustomSubConfig,
updateVideo,
- waitJobs,
- waitUntilLivePublished
+ wait,
+ waitJobs
} from '../../../../shared/extra-utils'
-import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
const expect = chai.expect
saveReplay
}
- const res = await createLive(servers[0].url, servers[0].accessToken, attributes)
- return res.body.video.uuid
+ const { uuid } = await servers[0].liveCommand.create({ fields: attributes })
+ return uuid
}
async function checkVideosExist (videoId: string, existsInList: boolean, getStatus?: number) {
}
}
+ async function waitUntilLivePublishedOnAllServers (videoId: string) {
+ for (const server of servers) {
+ await server.liveCommand.waitUntilPublished({ videoId })
+ }
+ }
+
+ async function waitUntilLiveSavedOnAllServers (videoId: string) {
+ for (const server of servers) {
+ await server.liveCommand.waitUntilSaved({ videoId })
+ }
+ }
+
before(async function () {
this.timeout(120000)
// Server 1 and server 2 follow each other
await doubleFollow(servers[0], servers[1])
- await updateCustomSubConfig(servers[0].url, servers[0].accessToken, {
- live: {
- enabled: true,
- allowReplay: true,
- maxDuration: -1,
- transcoding: {
- enabled: false,
- resolutions: {
- '240p': true,
- '360p': true,
- '480p': true,
- '720p': true,
- '1080p': true,
- '1440p': true,
- '2160p': true
+ await servers[0].configCommand.updateCustomSubConfig({
+ newConfig: {
+ live: {
+ enabled: true,
+ allowReplay: true,
+ maxDuration: -1,
+ transcoding: {
+ enabled: false,
+ resolutions: ConfigCommand.getCustomConfigResolutions(true)
}
}
}
})
it('Should correctly have updated the live and federated it when streaming in the live', async function () {
- this.timeout(20000)
+ this.timeout(30000)
+
+ ffmpegCommand = await servers[0].liveCommand.sendRTMPStreamInVideo({ videoId: liveVideoUUID })
- ffmpegCommand = await sendRTMPStreamInVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
- await waitUntilLivePublished(servers[0].url, servers[0].accessToken, liveVideoUUID)
+ await waitUntilLivePublishedOnAllServers(liveVideoUUID)
await waitJobs(servers)
await stopFfmpeg(ffmpegCommand)
+ for (const server of servers) {
+ await server.liveCommand.waitUntilEnded({ videoId: liveVideoUUID })
+ }
await waitJobs(servers)
// Live still exist, but cannot be played anymore
await checkVideosExist(liveVideoUUID, false, HttpStatusCode.OK_200)
await checkVideoState(liveVideoUUID, VideoState.LIVE_ENDED)
- await waitJobs(servers)
-
// No resolutions saved since we did not save replay
await checkLiveCleanup(servers[0], liveVideoUUID, [])
})
liveVideoUUID = await createLiveWrapper(false)
- ffmpegCommand = await sendRTMPStreamInVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
- await waitUntilLivePublished(servers[0].url, servers[0].accessToken, liveVideoUUID)
+ ffmpegCommand = await servers[0].liveCommand.sendRTMPStreamInVideo({ videoId: liveVideoUUID })
+
+ await waitUntilLivePublishedOnAllServers(liveVideoUUID)
await waitJobs(servers)
await checkVideosExist(liveVideoUUID, true, HttpStatusCode.OK_200)
await getVideo(servers[0].url, liveVideoUUID, HttpStatusCode.UNAUTHORIZED_401)
await getVideo(servers[1].url, liveVideoUUID, HttpStatusCode.NOT_FOUND_404)
+ await wait(5000)
+ await waitJobs(servers)
await checkLiveCleanup(servers[0], liveVideoUUID, [])
})
liveVideoUUID = await createLiveWrapper(false)
- ffmpegCommand = await sendRTMPStreamInVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
- await waitUntilLivePublished(servers[0].url, servers[0].accessToken, liveVideoUUID)
+ ffmpegCommand = await servers[0].liveCommand.sendRTMPStreamInVideo({ videoId: liveVideoUUID })
+
+ await waitUntilLivePublishedOnAllServers(liveVideoUUID)
await waitJobs(servers)
await checkVideosExist(liveVideoUUID, true, HttpStatusCode.OK_200)
removeVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
])
+ await wait(5000)
await waitJobs(servers)
await checkVideosExist(liveVideoUUID, false, HttpStatusCode.NOT_FOUND_404)
it('Should correctly have updated the live and federated it when streaming in the live', async function () {
this.timeout(20000)
- ffmpegCommand = await sendRTMPStreamInVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
- await waitUntilLivePublished(servers[0].url, servers[0].accessToken, liveVideoUUID)
+ ffmpegCommand = await servers[0].liveCommand.sendRTMPStreamInVideo({ videoId: liveVideoUUID })
+ await waitUntilLivePublishedOnAllServers(liveVideoUUID)
await waitJobs(servers)
await stopFfmpeg(ffmpegCommand)
+ await waitUntilLiveSavedOnAllServers(liveVideoUUID)
await waitJobs(servers)
// Live has been transcoded
liveVideoUUID = await createLiveWrapper(true)
- ffmpegCommand = await sendRTMPStreamInVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
- await waitUntilLivePublished(servers[0].url, servers[0].accessToken, liveVideoUUID)
+ ffmpegCommand = await servers[0].liveCommand.sendRTMPStreamInVideo({ videoId: liveVideoUUID })
+ await waitUntilLivePublishedOnAllServers(liveVideoUUID)
await waitJobs(servers)
await checkVideosExist(liveVideoUUID, true, HttpStatusCode.OK_200)
await getVideo(servers[0].url, liveVideoUUID, HttpStatusCode.UNAUTHORIZED_401)
await getVideo(servers[1].url, liveVideoUUID, HttpStatusCode.NOT_FOUND_404)
+ await wait(5000)
+ await waitJobs(servers)
await checkLiveCleanup(servers[0], liveVideoUUID, [ 720 ])
})
liveVideoUUID = await createLiveWrapper(true)
- ffmpegCommand = await sendRTMPStreamInVideo(servers[0].url, servers[0].accessToken, liveVideoUUID)
- await waitUntilLivePublished(servers[0].url, servers[0].accessToken, liveVideoUUID)
+ ffmpegCommand = await servers[0].liveCommand.sendRTMPStreamInVideo({ videoId: liveVideoUUID })
+ await waitUntilLivePublishedOnAllServers(liveVideoUUID)
await waitJobs(servers)
await checkVideosExist(liveVideoUUID, true, HttpStatusCode.OK_200)
testFfmpegStreamError(ffmpegCommand, true)
])
+ await wait(5000)
await waitJobs(servers)
await checkVideosExist(liveVideoUUID, false, HttpStatusCode.NOT_FOUND_404)