Fix infohash with object storage
This commit is contained in:
parent
6f9719b568
commit
fb72d2e1c2
|
@ -4,6 +4,7 @@ import { join } from 'path'
|
||||||
import { logger } from '@server/helpers/logger'
|
import { logger } from '@server/helpers/logger'
|
||||||
import { updateTorrentUrls } from '@server/helpers/webtorrent'
|
import { updateTorrentUrls } from '@server/helpers/webtorrent'
|
||||||
import { CONFIG } from '@server/initializers/config'
|
import { CONFIG } from '@server/initializers/config'
|
||||||
|
import { P2P_MEDIA_LOADER_PEER_VERSION } from '@server/initializers/constants'
|
||||||
import { storeHLSFile, storeWebTorrentFile } from '@server/lib/object-storage'
|
import { storeHLSFile, storeWebTorrentFile } from '@server/lib/object-storage'
|
||||||
import { getHLSDirectory, getHlsResolutionPlaylistFilename } from '@server/lib/paths'
|
import { getHLSDirectory, getHlsResolutionPlaylistFilename } from '@server/lib/paths'
|
||||||
import { moveToNextState } from '@server/lib/video-state'
|
import { moveToNextState } from '@server/lib/video-state'
|
||||||
|
@ -84,6 +85,9 @@ async function doAfterLastJob (video: MVideoWithAllFiles, isNewVideo: boolean) {
|
||||||
|
|
||||||
playlist.storage = VideoStorage.OBJECT_STORAGE
|
playlist.storage = VideoStorage.OBJECT_STORAGE
|
||||||
|
|
||||||
|
playlist.assignP2PMediaLoaderInfoHashes(video, playlist.VideoFiles)
|
||||||
|
playlist.p2pMediaLoaderPeerVersion = P2P_MEDIA_LOADER_PEER_VERSION
|
||||||
|
|
||||||
await playlist.save()
|
await playlist.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import {
|
||||||
createMultipleServers,
|
createMultipleServers,
|
||||||
doubleFollow,
|
doubleFollow,
|
||||||
expectStartWith,
|
expectStartWith,
|
||||||
|
hlsInfohashExist,
|
||||||
makeRawRequest,
|
makeRawRequest,
|
||||||
ObjectStorageCommand,
|
ObjectStorageCommand,
|
||||||
PeerTubeServer,
|
PeerTubeServer,
|
||||||
|
@ -88,9 +89,15 @@ async function checkHlsPlaylist (options: {
|
||||||
|
|
||||||
const masterPlaylist = await server.streamingPlaylists.get({ url: hlsPlaylist.playlistUrl })
|
const masterPlaylist = await server.streamingPlaylists.get({ url: hlsPlaylist.playlistUrl })
|
||||||
|
|
||||||
|
let i = 0
|
||||||
for (const resolution of resolutions) {
|
for (const resolution of resolutions) {
|
||||||
expect(masterPlaylist).to.contain(`${resolution}.m3u8`)
|
expect(masterPlaylist).to.contain(`${resolution}.m3u8`)
|
||||||
expect(masterPlaylist).to.contain(`${resolution}.m3u8`)
|
expect(masterPlaylist).to.contain(`${resolution}.m3u8`)
|
||||||
|
|
||||||
|
const url = 'http://' + videoDetails.account.host
|
||||||
|
await hlsInfohashExist(url, hlsPlaylist.playlistUrl, i)
|
||||||
|
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,9 +29,12 @@ function makeRawRequest (url: string, expectedStatus?: HttpStatusCode, range?: s
|
||||||
|
|
||||||
function makeGetRequest (options: CommonRequestParams & {
|
function makeGetRequest (options: CommonRequestParams & {
|
||||||
query?: any
|
query?: any
|
||||||
|
rawQuery?: string
|
||||||
}) {
|
}) {
|
||||||
const req = request(options.url).get(options.path)
|
const req = request(options.url).get(options.path)
|
||||||
.query(options.query)
|
|
||||||
|
if (options.query) req.query(options.query)
|
||||||
|
if (options.rawQuery) req.query(options.rawQuery)
|
||||||
|
|
||||||
return buildRequest(req, { contentType: 'application/json', expectedStatus: HttpStatusCode.BAD_REQUEST_400, ...options })
|
return buildRequest(req, { contentType: 'application/json', expectedStatus: HttpStatusCode.BAD_REQUEST_400, ...options })
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,3 +14,4 @@ export * from './server'
|
||||||
export * from './servers-command'
|
export * from './servers-command'
|
||||||
export * from './servers'
|
export * from './servers'
|
||||||
export * from './stats-command'
|
export * from './stats-command'
|
||||||
|
export * from './tracker'
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { expect } from 'chai'
|
||||||
|
import { sha1 } from '@server/helpers/core-utils'
|
||||||
|
import { makeGetRequest } from '../requests'
|
||||||
|
|
||||||
|
async function hlsInfohashExist (serverUrl: string, masterPlaylistUrl: string, fileNumber: number) {
|
||||||
|
const path = '/tracker/announce'
|
||||||
|
|
||||||
|
const infohash = sha1(`2${masterPlaylistUrl}+V${fileNumber}`)
|
||||||
|
|
||||||
|
// From bittorrent-tracker
|
||||||
|
const infohashBinary = escape(Buffer.from(infohash, 'hex').toString('binary')).replace(/[@*/+]/g, function (char) {
|
||||||
|
return '%' + char.charCodeAt(0).toString(16).toUpperCase()
|
||||||
|
})
|
||||||
|
|
||||||
|
const res = await makeGetRequest({
|
||||||
|
url: serverUrl,
|
||||||
|
path,
|
||||||
|
rawQuery: `peer_id=-WW0105-NkvYO/egUAr4&info_hash=${infohashBinary}&port=42100`,
|
||||||
|
expectedStatus: 200
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(res.text).to.not.contain('failure')
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
hlsInfohashExist
|
||||||
|
}
|
Loading…
Reference in New Issue