X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Fserver%2Fhandle-down.ts;h=2cf6e15adcd9290fda9bc4cc837841f10b0641ad;hb=134cf2bce96a8c5aefd55154e884964975d8cf23;hp=19010dbc17dc3bdbe5f034056cbb42c64380fdc8;hpb=7c3b79768bd174b22154e8d2df0b1211e01ee56a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/server/handle-down.ts b/server/tests/api/server/handle-down.ts index 19010dbc1..2cf6e15ad 100644 --- a/server/tests/api/server/handle-down.ts +++ b/server/tests/api/server/handle-down.ts @@ -1,4 +1,4 @@ -/* tslint:disable:no-unused-expression */ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ import * as chai from 'chai' import 'mocha' @@ -8,6 +8,7 @@ import { VideoCommentThreadTree } from '../../../../shared/models/videos/video-c import { cleanupTests, + closeAllSequelize, completeVideoCheck, flushAndRunMultipleServers, getVideo, @@ -17,9 +18,11 @@ import { reRunServer, ServerInfo, setAccessTokensToServers, + setActorFollowScores, unfollow, updateVideo, uploadVideo, + uploadVideoAndGetId, wait } from '../../../../shared/extra-utils' import { follow, getFollowersListPaginationAndSort } from '../../../../shared/extra-utils/server/follows' @@ -43,6 +46,8 @@ describe('Test handle downs', function () { let missedVideo2: Video let unlistedVideo: Video + const videoIdsServer1: number[] = [] + const videoAttributes = { name: 'my super name for server 1', category: 5, @@ -60,54 +65,56 @@ describe('Test handle downs', function () { privacy: VideoPrivacy.UNLISTED }) - const checkAttributes = { - name: 'my super name for server 1', - category: 5, - licence: 4, - language: 'ja', - nsfw: true, - description: 'my super description for server 1', - support: 'my super support text for server 1', - account: { - name: 'root', - host: 'localhost:9001' - }, - isLocal: false, - duration: 10, - tags: [ 'tag1p1', 'tag2p1' ], - privacy: VideoPrivacy.PUBLIC, - commentsEnabled: true, - downloadEnabled: true, - channel: { - name: 'root_channel', - displayName: 'Main root channel', - description: '', - isLocal: false - }, - fixture: 'video_short1.webm', - files: [ - { - resolution: 720, - size: 572456 - } - ] - } - - const unlistedCheckAttributes = immutableAssign(checkAttributes, { - privacy: VideoPrivacy.UNLISTED - }) + let checkAttributes: any + let unlistedCheckAttributes: any before(async function () { this.timeout(30000) servers = await flushAndRunMultipleServers(3) + checkAttributes = { + name: 'my super name for server 1', + category: 5, + licence: 4, + language: 'ja', + nsfw: true, + description: 'my super description for server 1', + support: 'my super support text for server 1', + account: { + name: 'root', + host: 'localhost:' + servers[0].port + }, + isLocal: false, + duration: 10, + tags: [ 'tag1p1', 'tag2p1' ], + privacy: VideoPrivacy.PUBLIC, + commentsEnabled: true, + downloadEnabled: true, + channel: { + name: 'root_channel', + displayName: 'Main root channel', + description: '', + isLocal: false + }, + fixture: 'video_short1.webm', + files: [ + { + resolution: 720, + size: 572456 + } + ] + } + unlistedCheckAttributes = immutableAssign(checkAttributes, { + privacy: VideoPrivacy.UNLISTED + }) + // Get the access tokens await setAccessTokensToServers(servers) }) it('Should remove followers that are often down', async function () { - this.timeout(60000) + this.timeout(240000) // Server 2 and 3 follow server 1 await follow(servers[1].url, [ servers[0].url ], servers[1].accessToken) @@ -132,7 +139,7 @@ describe('Test handle downs', function () { // Remove server 2 follower for (let i = 0; i < 10; i++) { - await uploadVideo(servers[ 0 ].url, servers[ 0 ].accessToken, videoAttributes) + await uploadVideo(servers[0].url, servers[0].accessToken, videoAttributes) } await waitJobs(servers[0]) @@ -140,14 +147,14 @@ describe('Test handle downs', function () { // Kill server 3 killallServers([ servers[2] ]) - const resLastVideo1 = await uploadVideo(servers[ 0 ].url, servers[ 0 ].accessToken, videoAttributes) + const resLastVideo1 = await uploadVideo(servers[0].url, servers[0].accessToken, videoAttributes) missedVideo1 = resLastVideo1.body.video - const resLastVideo2 = await uploadVideo(servers[ 0 ].url, servers[ 0 ].accessToken, videoAttributes) + const resLastVideo2 = await uploadVideo(servers[0].url, servers[0].accessToken, videoAttributes) missedVideo2 = resLastVideo2.body.video // Unlisted video - let resVideo = await uploadVideo(servers[ 0 ].url, servers[ 0 ].accessToken, unlistedVideoAttributes) + const resVideo = await uploadVideo(servers[0].url, servers[0].accessToken, unlistedVideoAttributes) unlistedVideo = resVideo.body.video // Add comments to video 2 @@ -169,17 +176,24 @@ describe('Test handle downs', function () { await wait(11000) // Only server 3 is still a follower of server 1 - const res = await getFollowersListPaginationAndSort(servers[0].url, 0, 2, 'createdAt') + const res = await getFollowersListPaginationAndSort({ url: servers[0].url, start: 0, count: 2, sort: 'createdAt' }) expect(res.body.data).to.be.an('array') expect(res.body.data).to.have.lengthOf(1) - expect(res.body.data[0].follower.host).to.equal('localhost:9003') + expect(res.body.data[0].follower.host).to.equal('localhost:' + servers[2].port) }) it('Should not have pending/processing jobs anymore', async function () { const states: JobState[] = [ 'waiting', 'active' ] for (const state of states) { - const res = await getJobsListPaginationAndSort(servers[ 0 ].url, servers[ 0 ].accessToken, state,0, 50, '-createdAt') + const res = await getJobsListPaginationAndSort({ + url: servers[0].url, + accessToken: servers[0].accessToken, + state: state, + start: 0, + count: 50, + sort: '-createdAt' + }) expect(res.body.data).to.have.length(0) } }) @@ -197,7 +211,7 @@ describe('Test handle downs', function () { await waitJobs(servers) - const res = await getFollowersListPaginationAndSort(servers[0].url, 0, 2, 'createdAt') + const res = await getFollowersListPaginationAndSort({ url: servers[0].url, start: 0, count: 2, sort: 'createdAt' }) expect(res.body.data).to.be.an('array') expect(res.body.data).to.have.lengthOf(2) }) @@ -209,8 +223,8 @@ describe('Test handle downs', function () { expect(res1.body.data).to.be.an('array') expect(res1.body.data).to.have.lengthOf(11) - await updateVideo(servers[0].url, servers[0].accessToken, missedVideo1.uuid, { }) - await updateVideo(servers[0].url, servers[0].accessToken, unlistedVideo.uuid, { }) + await updateVideo(servers[0].url, servers[0].accessToken, missedVideo1.uuid, {}) + await updateVideo(servers[0].url, servers[0].accessToken, unlistedVideo.uuid, {}) await waitJobs(servers) @@ -297,7 +311,54 @@ describe('Test handle downs', function () { } }) + it('Should upload many videos on server 1', async function () { + this.timeout(120000) + + for (let i = 0; i < 10; i++) { + const uuid = (await uploadVideoAndGetId({ server: servers[0], videoName: 'video ' + i })).uuid + videoIdsServer1.push(uuid) + } + + await waitJobs(servers) + + for (const id of videoIdsServer1) { + await getVideo(servers[1].url, id) + } + + await waitJobs(servers) + await setActorFollowScores(servers[1].internalServerNumber, 20) + + // Wait video expiration + await wait(11000) + + // Refresh video -> score + 10 = 30 + await getVideo(servers[1].url, videoIdsServer1[0]) + + await waitJobs(servers) + }) + + it('Should remove followings that are down', async function () { + this.timeout(120000) + + killallServers([ servers[0] ]) + + // Wait video expiration + await wait(11000) + + for (let i = 0; i < 3; i++) { + await getVideo(servers[1].url, videoIdsServer1[i]) + await wait(1000) + await waitJobs([ servers[1] ]) + } + + for (const id of videoIdsServer1) { + await getVideo(servers[1].url, id, 403) + } + }) + after(async function () { + await closeAllSequelize([ servers[1] ]) + await cleanupTests(servers) }) })