X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Fserver%2Fredundancy.ts;h=8053d049120f7b373a537839eae6de76b2cc6f37;hb=44b9c0ba31c4a97e3d874f33226ad935c3a90dd5;hp=a773e3de405c927fdab6e4e16fcf9f2af098ab5c;hpb=e5565833f62b97f62ea75eba5b479963ae78b873;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/server/redundancy.ts b/server/tests/api/server/redundancy.ts index a773e3de4..8053d0491 100644 --- a/server/tests/api/server/redundancy.ts +++ b/server/tests/api/server/redundancy.ts @@ -9,22 +9,24 @@ import { getFollowingListPaginationAndSort, getVideo, immutableAssign, - killallServers, + killallServers, makeGetRequest, root, ServerInfo, - setAccessTokensToServers, + setAccessTokensToServers, unfollow, uploadVideo, viewVideo, - wait -} from '../../utils' -import { waitJobs } from '../../utils/server/jobs' + wait, + waitUntilLog, + checkVideoFilesWereRemoved, removeVideo +} from '../../../../shared/utils' +import { waitJobs } from '../../../../shared/utils/server/jobs' import * as magnetUtil from 'magnet-uri' -import { updateRedundancy } from '../../utils/server/redundancy' +import { updateRedundancy } from '../../../../shared/utils/server/redundancy' import { ActorFollow } from '../../../../shared/models/actors' import { readdir } from 'fs-extra' import { join } from 'path' import { VideoRedundancyStrategy } from '../../../../shared/models/redundancy' -import { getStats } from '../../utils/server/stats' +import { getStats } from '../../../../shared/utils/server/stats' import { ServerStats } from '../../../../shared/models/server/server-stats.model' const expect = chai.expect @@ -39,6 +41,8 @@ function checkMagnetWebseeds (file: { magnetUri: string, resolution: { id: numbe const found = parsed.urlList.find(url => url === `${ws}-${file.resolution.id}.mp4`) expect(found, `Webseed ${ws} not found in ${file.magnetUri} on server ${server.url}`).to.not.be.undefined } + + expect(parsed.urlList).to.have.lengthOf(baseWebseeds.length) } async function runServers (strategy: VideoRedundancyStrategy, additionalParams: any = {}) { @@ -136,22 +140,32 @@ async function check2Webseeds (strategy: VideoRedundancyStrategy, videoUUID?: st ] for (const server of servers) { - { - const res = await getVideo(server.url, videoUUID) + const res = await getVideo(server.url, videoUUID) - const video: VideoDetails = res.body + const video: VideoDetails = res.body - for (const file of video.files) { - checkMagnetWebseeds(file, webseeds, server) + for (const file of video.files) { + checkMagnetWebseeds(file, webseeds, server) + + // Only servers 1 and 2 have the video + if (server.serverNumber !== 3) { + await makeGetRequest({ + url: server.url, + statusCodeExpected: 200, + path: '/static/webseed/' + `${videoUUID}-${file.resolution.id}.mp4`, + contentType: null + }) } } } - const files = await readdir(join(root(), 'test1', 'videos')) - expect(files).to.have.lengthOf(4) + for (const directory of [ 'test1', 'test2' ]) { + const files = await readdir(join(root(), directory, 'videos')) + expect(files).to.have.length.at.least(4) - for (const resolution of [ 240, 360, 480, 720 ]) { - expect(files.find(f => f === `${videoUUID}-${resolution}.mp4`)).to.not.be.undefined + for (const resolution of [ 240, 360, 480, 720 ]) { + expect(files.find(f => f === `${videoUUID}-${resolution}.mp4`)).to.not.be.undefined + } } } @@ -170,6 +184,21 @@ async function enableRedundancyOnServer1 () { expect(server2.following.hostRedundancyAllowed).to.be.true } +async function disableRedundancyOnServer1 () { + await updateRedundancy(servers[ 0 ].url, servers[ 0 ].accessToken, servers[ 1 ].host, false) + + const res = await getFollowingListPaginationAndSort(servers[ 0 ].url, 0, 5, '-createdAt') + const follows: ActorFollow[] = res.body.data + const server2 = follows.find(f => f.following.host === 'localhost:9002') + const server3 = follows.find(f => f.following.host === 'localhost:9003') + + expect(server3).to.not.be.undefined + expect(server3.following.hostRedundancyAllowed).to.be.false + + expect(server2).to.not.be.undefined + expect(server2.following.hostRedundancyAllowed).to.be.false +} + async function cleanServers () { killallServers(servers) } @@ -198,13 +227,26 @@ describe('Test videos redundancy', function () { this.timeout(40000) await waitJobs(servers) - await wait(15000) + await waitUntilLog(servers[0], 'Duplicated ', 4) await waitJobs(servers) await check2Webseeds(strategy) await checkStatsWith2Webseed(strategy) }) + it('Should undo redundancy on server 1 and remove duplicated videos', async function () { + this.timeout(40000) + + await disableRedundancyOnServer1() + + await waitJobs(servers) + await wait(5000) + + await check1WebSeed(strategy) + + await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ 'videos' ]) + }) + after(function () { return cleanServers() }) @@ -232,13 +274,26 @@ describe('Test videos redundancy', function () { this.timeout(40000) await waitJobs(servers) - await wait(15000) + await waitUntilLog(servers[0], 'Duplicated ', 4) await waitJobs(servers) await check2Webseeds(strategy) await checkStatsWith2Webseed(strategy) }) + it('Should unfollow on server 1 and remove duplicated videos', async function () { + this.timeout(40000) + + await unfollow(servers[0].url, servers[0].accessToken, servers[1]) + + await waitJobs(servers) + await wait(5000) + + await check1WebSeed(strategy) + + await checkVideoFilesWereRemoved(video1Server2UUID, servers[0].serverNumber, [ 'videos' ]) + }) + after(function () { return cleanServers() }) @@ -287,13 +342,25 @@ describe('Test videos redundancy', function () { this.timeout(40000) await waitJobs(servers) - await wait(15000) + await waitUntilLog(servers[0], 'Duplicated ', 4) await waitJobs(servers) await check2Webseeds(strategy) await checkStatsWith2Webseed(strategy) }) + it('Should remove the video and the redundancy files', async function () { + this.timeout(20000) + + await removeVideo(servers[1].url, servers[1].accessToken, video1Server2UUID) + + await waitJobs(servers) + + for (const server of servers) { + await checkVideoFilesWereRemoved(video1Server2UUID, server.serverNumber) + } + }) + after(function () { return cleanServers() }) @@ -352,7 +419,7 @@ describe('Test videos redundancy', function () { killallServers([ servers[0] ]) - await wait(10000) + await wait(15000) await checkNotContains([ servers[1], servers[2] ], 'http%3A%2F%2Flocalhost%3A9001') }) @@ -374,7 +441,7 @@ describe('Test videos redundancy', function () { await enableRedundancyOnServer1() await waitJobs(servers) - await wait(5000) + await waitUntilLog(servers[0], 'Duplicated ', 4) await waitJobs(servers) await check2Webseeds(strategy) @@ -385,15 +452,24 @@ describe('Test videos redundancy', function () { }) it('Should cache video 2 webseed on the first video', async function () { - this.timeout(40000) - this.retries(3) + this.timeout(120000) await waitJobs(servers) - await wait(7000) + let checked = false + + while (checked === false) { + await wait(1000) - await check1WebSeed(strategy, video1Server2UUID) - await check2Webseeds(strategy, video2Server2UUID) + try { + await check1WebSeed(strategy, video1Server2UUID) + await check2Webseeds(strategy, video2Server2UUID) + + checked = true + } catch { + checked = false + } + } }) after(function () {