setAccessTokensToServers,
uploadVideo,
wait,
- root, viewVideo
+ root, viewVideo, immutableAssign
} from '../../utils'
import { waitJobs } from '../../utils/server/jobs'
import * as magnetUtil from 'magnet-uri'
import { readdir } from 'fs-extra'
import { join } from 'path'
import { VideoRedundancyStrategy } from '../../../../shared/models/redundancy'
+import { getStats } from '../../utils/server/stats'
+import { ServerStats } from '../../../../shared/models/server/server-stats.model'
const expect = chai.expect
}
}
-async function runServers (strategy: VideoRedundancyStrategy) {
+async function runServers (strategy: VideoRedundancyStrategy, additionalParams: any = {}) {
const config = {
redundancy: {
videos: [
- {
+ immutableAssign({
strategy: strategy,
size: '100KB'
- }
+ }, additionalParams)
]
}
}
await waitJobs(servers)
}
-async function check1WebSeed () {
+async function check1WebSeed (strategy: VideoRedundancyStrategy) {
const webseeds = [
'http://localhost:9002/static/webseed/' + video1Server2UUID
]
for (const server of servers) {
- const res = await getVideo(server.url, video1Server2UUID)
+ {
+ const res = await getVideo(server.url, video1Server2UUID)
- const video: VideoDetails = res.body
- video.files.forEach(f => checkMagnetWebseeds(f, webseeds))
+ const video: VideoDetails = res.body
+ video.files.forEach(f => checkMagnetWebseeds(f, webseeds))
+ }
+
+ {
+ const res = await getStats(server.url)
+ const data: ServerStats = res.body
+
+ expect(data.videosRedundancy).to.have.lengthOf(1)
+
+ const stat = data.videosRedundancy[0]
+ expect(stat.strategy).to.equal(strategy)
+ expect(stat.totalSize).to.equal(102400)
+ expect(stat.totalUsed).to.equal(0)
+ expect(stat.totalVideoFiles).to.equal(0)
+ expect(stat.totalVideos).to.equal(0)
+ }
}
}
expect(server2.following.hostRedundancyAllowed).to.be.true
}
-async function check2Webseeds () {
+async function check2Webseeds (strategy: VideoRedundancyStrategy) {
await waitJobs(servers)
await wait(15000)
await waitJobs(servers)
]
for (const server of servers) {
- const res = await getVideo(server.url, video1Server2UUID)
+ {
+ const res = await getVideo(server.url, video1Server2UUID)
- const video: VideoDetails = res.body
+ const video: VideoDetails = res.body
- for (const file of video.files) {
- checkMagnetWebseeds(file, webseeds)
+ for (const file of video.files) {
+ checkMagnetWebseeds(file, webseeds)
+ }
}
}
for (const resolution of [ 240, 360, 480, 720 ]) {
expect(files.find(f => f === `${video1Server2UUID}-${resolution}.mp4`)).to.not.be.undefined
}
+
+ {
+ const res = await getStats(servers[0].url)
+ const data: ServerStats = res.body
+
+ expect(data.videosRedundancy).to.have.lengthOf(1)
+ const stat = data.videosRedundancy[0]
+
+ expect(stat.strategy).to.equal(strategy)
+ expect(stat.totalSize).to.equal(102400)
+ expect(stat.totalUsed).to.be.at.least(1).and.below(102401)
+ expect(stat.totalVideoFiles).to.equal(4)
+ expect(stat.totalVideos).to.equal(1)
+ }
}
async function cleanServers () {
describe('Test videos redundancy', function () {
describe('With most-views strategy', function () {
+ const strategy = 'most-views'
before(function () {
this.timeout(120000)
- return runServers('most-views')
+ return runServers(strategy)
})
it('Should have 1 webseed on the first video', function () {
- return check1WebSeed()
+ return check1WebSeed(strategy)
})
- it('Should enable redundancy on server 1', async function () {
+ it('Should enable redundancy on server 1', function () {
return enableRedundancy()
})
- it('Should have 2 webseed on the first video', async function () {
+ it('Should have 2 webseed on the first video', function () {
this.timeout(40000)
- return check2Webseeds()
+ return check2Webseeds(strategy)
})
after(function () {
})
describe('With trending strategy', function () {
+ const strategy = 'trending'
before(function () {
this.timeout(120000)
- return runServers('trending')
+ return runServers(strategy)
})
it('Should have 1 webseed on the first video', function () {
- return check1WebSeed()
+ return check1WebSeed(strategy)
})
- it('Should enable redundancy on server 1', async function () {
+ it('Should enable redundancy on server 1', function () {
return enableRedundancy()
})
- it('Should have 2 webseed on the first video', async function () {
+ it('Should have 2 webseed on the first video', function () {
+ this.timeout(40000)
+
+ return check2Webseeds(strategy)
+ })
+
+ after(function () {
+ return cleanServers()
+ })
+ })
+
+ describe('With recently added strategy', function () {
+ const strategy = 'recently-added'
+
+ before(function () {
+ this.timeout(120000)
+
+ return runServers(strategy, { minViews: 3 })
+ })
+
+ it('Should have 1 webseed on the first video', function () {
+ return check1WebSeed(strategy)
+ })
+
+ it('Should enable redundancy on server 1', function () {
+ return enableRedundancy()
+ })
+
+ it('Should still have 1 webseed on the first video', async function () {
+ this.timeout(40000)
+
+ await waitJobs(servers)
+ await wait(15000)
+ await waitJobs(servers)
+
+ return check1WebSeed(strategy)
+ })
+
+ it('Should view 2 times the first video', async function () {
+ this.timeout(40000)
+
+ await viewVideo(servers[ 0 ].url, video1Server2UUID)
+ await viewVideo(servers[ 2 ].url, video1Server2UUID)
+
+ await wait(10000)
+ await waitJobs(servers)
+ })
+
+ it('Should have 2 webseed on the first video', function () {
this.timeout(40000)
- return check2Webseeds()
+ return check2Webseeds(strategy)
})
after(function () {