X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fplugins%2Fplugin-helpers.ts;h=038e3f0d6cdd87a11d3e7ec9447bf91477e97adc;hb=60b880acdfa85eab5c9ec09ba1283f82ae58ec85;hp=509aba13dc8fed538d4d4487314d1e1c0688a890;hpb=d23dd9fbfc4d26026352c10f81d2795ceaf2908a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/plugins/plugin-helpers.ts b/server/tests/plugins/plugin-helpers.ts index 509aba13d..038e3f0d6 100644 --- a/server/tests/plugins/plugin-helpers.ts +++ b/server/tests/plugins/plugin-helpers.ts @@ -1,22 +1,23 @@ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ -import 'mocha' import { expect } from 'chai' -import { HttpStatusCode } from '@shared/core-utils' +import { pathExists } from 'fs-extra' +import { HttpStatusCode, ThumbnailType } from '@shared/models' import { - checkVideoFilesWereRemoved, cleanupTests, + createMultipleServers, doubleFollow, - flushAndRunMultipleServers, makeGetRequest, makePostBodyRequest, + makeRawRequest, + PeerTubeServer, PluginsCommand, - ServerInfo, setAccessTokensToServers, waitJobs -} from '@shared/extra-utils' +} from '@shared/server-commands' +import { checkVideoFilesWereRemoved } from '../shared' -function postCommand (server: ServerInfo, command: string, bodyArg?: object) { +function postCommand (server: PeerTubeServer, command: string, bodyArg?: object) { const body = { command } if (bodyArg) Object.assign(body, bodyArg) @@ -24,50 +25,50 @@ function postCommand (server: ServerInfo, command: string, bodyArg?: object) { url: server.url, path: '/plugins/test-four/router/commander', fields: body, - statusCodeExpected: HttpStatusCode.NO_CONTENT_204 + expectedStatus: HttpStatusCode.NO_CONTENT_204 }) } describe('Test plugin helpers', function () { - let servers: ServerInfo[] + let servers: PeerTubeServer[] before(async function () { this.timeout(60000) - servers = await flushAndRunMultipleServers(2) + servers = await createMultipleServers(2) await setAccessTokensToServers(servers) await doubleFollow(servers[0], servers[1]) - await servers[0].pluginsCommand.install({ path: PluginsCommand.getPluginTestPath('-four') }) + await servers[0].plugins.install({ path: PluginsCommand.getPluginTestPath('-four') }) }) describe('Logger', function () { it('Should have logged things', async function () { - await servers[0].serversCommand.waitUntilLog('localhost:' + servers[0].port + ' peertube-plugin-test-four', 1, false) - await servers[0].serversCommand.waitUntilLog('Hello world from plugin four', 1) + await servers[0].servers.waitUntilLog(servers[0].host + ' peertube-plugin-test-four', 1, false) + await servers[0].servers.waitUntilLog('Hello world from plugin four', 1) }) }) describe('Database', function () { it('Should have made a query', async function () { - await servers[0].serversCommand.waitUntilLog(`root email is admin${servers[0].internalServerNumber}@example.com`) + await servers[0].servers.waitUntilLog(`root email is admin${servers[0].internalServerNumber}@example.com`) }) }) describe('Config', function () { it('Should have the correct webserver url', async function () { - await servers[0].serversCommand.waitUntilLog(`server url is http://localhost:${servers[0].port}`) + await servers[0].servers.waitUntilLog(`server url is ${servers[0].url}`) }) it('Should have the correct config', async function () { const res = await makeGetRequest({ url: servers[0].url, path: '/plugins/test-four/router/server-config', - statusCodeExpected: HttpStatusCode.OK_200 + expectedStatus: HttpStatusCode.OK_200 }) expect(res.body.serverConfig).to.exist @@ -78,7 +79,34 @@ describe('Test plugin helpers', function () { describe('Server', function () { it('Should get the server actor', async function () { - await servers[0].serversCommand.waitUntilLog('server actor name is peertube') + await servers[0].servers.waitUntilLog('server actor name is peertube') + }) + }) + + describe('Socket', function () { + + it('Should sendNotification without any exceptions', async () => { + const user = await servers[0].users.create({ username: 'notis_redding', password: 'secret1234?' }) + await makePostBodyRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/send-notification', + fields: { + userId: user.id + }, + expectedStatus: HttpStatusCode.CREATED_201 + }) + }) + + it('Should sendVideoLiveNewState without any exceptions', async () => { + const res = await servers[0].videos.quickUpload({ name: 'video server 1' }) + + await makePostBodyRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/send-video-live-new-state/' + res.uuid, + expectedStatus: HttpStatusCode.CREATED_201 + }) + + await servers[0].videos.remove({ id: res.uuid }) }) }) @@ -88,7 +116,7 @@ describe('Test plugin helpers', function () { const res = await makeGetRequest({ url: servers[0].url, path: '/plugins/test-four/router/static-route', - statusCodeExpected: HttpStatusCode.OK_200 + expectedStatus: HttpStatusCode.OK_200 }) expect(res.body.staticRoute).to.equal('/plugins/test-four/0.0.1/static/') @@ -100,7 +128,7 @@ describe('Test plugin helpers', function () { const res = await makeGetRequest({ url: servers[0].url, path: baseRouter + 'router-route', - statusCodeExpected: HttpStatusCode.OK_200 + expectedStatus: HttpStatusCode.OK_200 }) expect(res.body.routerRoute).to.equal(baseRouter) @@ -108,12 +136,13 @@ describe('Test plugin helpers', function () { }) describe('User', function () { + let rootId: number it('Should not get a user if not authenticated', async function () { await makeGetRequest({ url: servers[0].url, path: '/plugins/test-four/router/user', - statusCodeExpected: HttpStatusCode.NOT_FOUND_404 + expectedStatus: HttpStatusCode.NOT_FOUND_404 }) }) @@ -122,7 +151,7 @@ describe('Test plugin helpers', function () { url: servers[0].url, token: servers[0].accessToken, path: '/plugins/test-four/router/user', - statusCodeExpected: HttpStatusCode.OK_200 + expectedStatus: HttpStatusCode.OK_200 }) expect(res.body.username).to.equal('root') @@ -130,6 +159,28 @@ describe('Test plugin helpers', function () { expect(res.body.isAdmin).to.be.true expect(res.body.isModerator).to.be.false expect(res.body.isUser).to.be.false + + rootId = res.body.id + }) + + it('Should load a user by id', async function () { + { + const res = await makeGetRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/user/' + rootId, + expectedStatus: HttpStatusCode.OK_200 + }) + + expect(res.body.username).to.equal('root') + } + + { + await makeGetRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/user/42', + expectedStatus: HttpStatusCode.NOT_FOUND_404 + }) + } }) }) @@ -140,52 +191,52 @@ describe('Test plugin helpers', function () { this.timeout(60000) { - const res = await await servers[0].videosCommand.quickUpload({ name: 'video server 1' }) + const res = await servers[0].videos.quickUpload({ name: 'video server 1' }) videoUUIDServer1 = res.uuid } { - await await servers[1].videosCommand.quickUpload({ name: 'video server 2' }) + await servers[1].videos.quickUpload({ name: 'video server 2' }) } await waitJobs(servers) - const { data } = await servers[0].videosCommand.list() + const { data } = await servers[0].videos.list() expect(data).to.have.lengthOf(2) }) it('Should mute server 2', async function () { this.timeout(10000) - await postCommand(servers[0], 'blockServer', { hostToBlock: `localhost:${servers[1].port}` }) + await postCommand(servers[0], 'blockServer', { hostToBlock: servers[1].host }) - const { data } = await servers[0].videosCommand.list() + const { data } = await servers[0].videos.list() expect(data).to.have.lengthOf(1) expect(data[0].name).to.equal('video server 1') }) it('Should unmute server 2', async function () { - await postCommand(servers[0], 'unblockServer', { hostToUnblock: `localhost:${servers[1].port}` }) + await postCommand(servers[0], 'unblockServer', { hostToUnblock: servers[1].host }) - const { data } = await servers[0].videosCommand.list() + const { data } = await servers[0].videos.list() expect(data).to.have.lengthOf(2) }) it('Should mute account of server 2', async function () { - await postCommand(servers[0], 'blockAccount', { handleToBlock: `root@localhost:${servers[1].port}` }) + await postCommand(servers[0], 'blockAccount', { handleToBlock: `root@${servers[1].host}` }) - const { data } = await servers[0].videosCommand.list() + const { data } = await servers[0].videos.list() expect(data).to.have.lengthOf(1) expect(data[0].name).to.equal('video server 1') }) it('Should unmute account of server 2', async function () { - await postCommand(servers[0], 'unblockAccount', { handleToUnblock: `root@localhost:${servers[1].port}` }) + await postCommand(servers[0], 'unblockAccount', { handleToUnblock: `root@${servers[1].host}` }) - const { data } = await servers[0].videosCommand.list() + const { data } = await servers[0].videos.list() expect(data).to.have.lengthOf(2) }) @@ -198,7 +249,7 @@ describe('Test plugin helpers', function () { await waitJobs(servers) for (const server of servers) { - const { data } = await server.videosCommand.list() + const { data } = await server.videos.list() expect(data).to.have.lengthOf(1) expect(data[0].name).to.equal('video server 2') @@ -213,7 +264,7 @@ describe('Test plugin helpers', function () { await waitJobs(servers) for (const server of servers) { - const { data } = await server.videosCommand.list() + const { data } = await server.videos.list() expect(data).to.have.lengthOf(2) } @@ -222,35 +273,100 @@ describe('Test plugin helpers', function () { describe('Videos', function () { let videoUUID: string + let videoPath: string before(async () => { - const res = await await servers[0].videosCommand.quickUpload({ name: 'video1' }) + this.timeout(240000) + + await servers[0].config.enableTranscoding() + + const res = await servers[0].videos.quickUpload({ name: 'video1' }) videoUUID = res.uuid + + await waitJobs(servers) + }) + + it('Should get video files', async function () { + const { body } = await makeGetRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/video-files/' + videoUUID, + expectedStatus: HttpStatusCode.OK_200 + }) + + // Video files check + { + expect(body.webtorrent.videoFiles).to.be.an('array') + expect(body.hls.videoFiles).to.be.an('array') + + for (const resolution of [ 144, 240, 360, 480, 720 ]) { + for (const files of [ body.webtorrent.videoFiles, body.hls.videoFiles ]) { + const file = files.find(f => f.resolution === resolution) + expect(file).to.exist + + expect(file.size).to.be.a('number') + expect(file.fps).to.equal(25) + + expect(await pathExists(file.path)).to.be.true + await makeRawRequest({ url: file.url, expectedStatus: HttpStatusCode.OK_200 }) + } + } + + videoPath = body.webtorrent.videoFiles[0].path + } + + // Thumbnails check + { + expect(body.thumbnails).to.be.an('array') + + const miniature = body.thumbnails.find(t => t.type === ThumbnailType.MINIATURE) + expect(miniature).to.exist + expect(await pathExists(miniature.path)).to.be.true + await makeRawRequest({ url: miniature.url, expectedStatus: HttpStatusCode.OK_200 }) + + const preview = body.thumbnails.find(t => t.type === ThumbnailType.PREVIEW) + expect(preview).to.exist + expect(await pathExists(preview.path)).to.be.true + await makeRawRequest({ url: preview.url, expectedStatus: HttpStatusCode.OK_200 }) + } + }) + + it('Should probe a file', async function () { + const { body } = await makeGetRequest({ + url: servers[0].url, + path: '/plugins/test-four/router/ffprobe', + query: { + path: videoPath + }, + expectedStatus: HttpStatusCode.OK_200 + }) + + expect(body.streams).to.be.an('array') + expect(body.streams).to.have.lengthOf(2) }) it('Should remove a video after a view', async function () { this.timeout(40000) // Should not throw -> video exists - await servers[0].videosCommand.get({ id: videoUUID }) + const video = await servers[0].videos.get({ id: videoUUID }) // Should delete the video - await servers[0].videosCommand.view({ id: videoUUID }) + await servers[0].views.simulateView({ id: videoUUID }) - await servers[0].serversCommand.waitUntilLog('Video deleted by plugin four.') + await servers[0].servers.waitUntilLog('Video deleted by plugin four.') try { // Should throw because the video should have been deleted - await servers[0].videosCommand.get({ id: videoUUID }) + await servers[0].videos.get({ id: videoUUID }) throw new Error('Video exists') } catch (err) { if (err.message.includes('exists')) throw err } - await checkVideoFilesWereRemoved(videoUUID, servers[0]) + await checkVideoFilesWereRemoved({ server: servers[0], video }) }) it('Should have fetched the video by URL', async function () { - await servers[0].serversCommand.waitUntilLog(`video from DB uuid is ${videoUUID}`) + await servers[0].servers.waitUntilLog(`video from DB uuid is ${videoUUID}`) }) })