Try to have more robust live tests
This commit is contained in:
parent
9d1e41e8bb
commit
5170f492b9
5 changed files with 67 additions and 25 deletions
|
@ -226,7 +226,7 @@ function runTests (objectStorage: boolean) {
|
||||||
const resolutions = hlsPlaylist.files.map(f => f.resolution.id)
|
const resolutions = hlsPlaylist.files.map(f => f.resolution.id)
|
||||||
await checkResolutionsInMasterPlaylist({ server: servers[0], playlistUrl: hlsPlaylist.playlistUrl, resolutions })
|
await checkResolutionsInMasterPlaylist({ server: servers[0], playlistUrl: hlsPlaylist.playlistUrl, resolutions })
|
||||||
|
|
||||||
const shaBody = await servers[0].streamingPlaylists.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url })
|
const shaBody = await servers[0].streamingPlaylists.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url, withRetry: true })
|
||||||
expect(Object.keys(shaBody)).to.have.lengthOf(5)
|
expect(Object.keys(shaBody)).to.have.lengthOf(5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,8 @@ async function testLiveVideoResolutions (options: {
|
||||||
baseUrlSegment: baseUrl,
|
baseUrlSegment: baseUrl,
|
||||||
videoUUID: video.uuid,
|
videoUUID: video.uuid,
|
||||||
segmentName,
|
segmentName,
|
||||||
hlsPlaylist
|
hlsPlaylist,
|
||||||
|
withRetry: objectStorage // With object storage, the request may fail because of inconsistent data in S3
|
||||||
})
|
})
|
||||||
|
|
||||||
if (originServer.internalServerNumber === server.internalServerNumber) {
|
if (originServer.internalServerNumber === server.internalServerNumber) {
|
||||||
|
|
|
@ -51,12 +51,13 @@ async function checkLiveSegmentHash (options: {
|
||||||
videoUUID: string
|
videoUUID: string
|
||||||
segmentName: string
|
segmentName: string
|
||||||
hlsPlaylist: VideoStreamingPlaylist
|
hlsPlaylist: VideoStreamingPlaylist
|
||||||
|
withRetry?: boolean
|
||||||
}) {
|
}) {
|
||||||
const { server, baseUrlSegment, videoUUID, segmentName, hlsPlaylist } = options
|
const { server, baseUrlSegment, videoUUID, segmentName, hlsPlaylist, withRetry = false } = options
|
||||||
const command = server.streamingPlaylists
|
const command = server.streamingPlaylists
|
||||||
|
|
||||||
const segmentBody = await command.getFragmentedSegment({ url: `${baseUrlSegment}/${videoUUID}/${segmentName}` })
|
const segmentBody = await command.getFragmentedSegment({ url: `${baseUrlSegment}/${videoUUID}/${segmentName}`, withRetry })
|
||||||
const shaBody = await command.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url })
|
const shaBody = await command.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url, withRetry })
|
||||||
|
|
||||||
expect(sha256(segmentBody)).to.equal(shaBody[segmentName])
|
expect(sha256(segmentBody)).to.equal(shaBody[segmentName])
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,7 +224,7 @@ export class LiveCommand extends AbstractCommand {
|
||||||
const video = await server.videos.get({ id: videoUUID })
|
const video = await server.videos.get({ id: videoUUID })
|
||||||
const hlsPlaylist = video.streamingPlaylists[0]
|
const hlsPlaylist = video.streamingPlaylists[0]
|
||||||
|
|
||||||
const shaBody = await server.streamingPlaylists.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url })
|
const shaBody = await server.streamingPlaylists.getSegmentSha256({ url: hlsPlaylist.segmentsSha256Url, withRetry: objectStorage })
|
||||||
|
|
||||||
if (!shaBody[segmentName]) {
|
if (!shaBody[segmentName]) {
|
||||||
throw new Error('Segment SHA does not exist')
|
throw new Error('Segment SHA does not exist')
|
||||||
|
|
|
@ -44,31 +44,71 @@ export class StreamingPlaylistsCommand extends AbstractCommand {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getFragmentedSegment (options: OverrideCommandOptions & {
|
async getFragmentedSegment (options: OverrideCommandOptions & {
|
||||||
url: string
|
url: string
|
||||||
range?: string
|
range?: string
|
||||||
}) {
|
|
||||||
return unwrapBody<Buffer>(this.getRawRequest({
|
|
||||||
...options,
|
|
||||||
|
|
||||||
url: options.url,
|
withRetry?: boolean // default false
|
||||||
range: options.range,
|
currentRetry?: number
|
||||||
implicitToken: false,
|
}) {
|
||||||
responseType: 'application/octet-stream',
|
const { withRetry, currentRetry = 1 } = options
|
||||||
defaultExpectedStatus: HttpStatusCode.OK_200
|
|
||||||
}))
|
try {
|
||||||
|
const result = await unwrapBody<Buffer>(this.getRawRequest({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
url: options.url,
|
||||||
|
range: options.range,
|
||||||
|
implicitToken: false,
|
||||||
|
responseType: 'application/octet-stream',
|
||||||
|
defaultExpectedStatus: HttpStatusCode.OK_200
|
||||||
|
}))
|
||||||
|
|
||||||
|
return result
|
||||||
|
} catch (err) {
|
||||||
|
if (!withRetry || currentRetry > 5) throw err
|
||||||
|
|
||||||
|
await wait(100)
|
||||||
|
|
||||||
|
return this.getFragmentedSegment({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
withRetry,
|
||||||
|
currentRetry: currentRetry + 1
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getSegmentSha256 (options: OverrideCommandOptions & {
|
async getSegmentSha256 (options: OverrideCommandOptions & {
|
||||||
url: string
|
url: string
|
||||||
}) {
|
|
||||||
return unwrapBodyOrDecodeToJSON<{ [ id: string ]: string }>(this.getRawRequest({
|
|
||||||
...options,
|
|
||||||
|
|
||||||
url: options.url,
|
withRetry?: boolean // default false
|
||||||
contentType: 'application/json',
|
currentRetry?: number
|
||||||
implicitToken: false,
|
}) {
|
||||||
defaultExpectedStatus: HttpStatusCode.OK_200
|
const { withRetry, currentRetry = 1 } = options
|
||||||
}))
|
|
||||||
|
try {
|
||||||
|
const result = await unwrapBodyOrDecodeToJSON<{ [ id: string ]: string }>(this.getRawRequest({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
url: options.url,
|
||||||
|
contentType: 'application/json',
|
||||||
|
implicitToken: false,
|
||||||
|
defaultExpectedStatus: HttpStatusCode.OK_200
|
||||||
|
}))
|
||||||
|
|
||||||
|
return result
|
||||||
|
} catch (err) {
|
||||||
|
if (!withRetry || currentRetry > 5) throw err
|
||||||
|
|
||||||
|
await wait(100)
|
||||||
|
|
||||||
|
return this.getSegmentSha256({
|
||||||
|
...options,
|
||||||
|
|
||||||
|
withRetry,
|
||||||
|
currentRetry: currentRetry + 1
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue