From 41137192096590b171563bc3161ede6f5c1d15db Mon Sep 17 00:00:00 2001 From: John Livingston Date: Thu, 8 Apr 2021 17:19:12 +0200 Subject: Tests that show the bug. --- server/tests/plugins/index.ts | 1 + server/tests/plugins/plugin-unloading.ts | 89 ++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 server/tests/plugins/plugin-unloading.ts (limited to 'server/tests/plugins') diff --git a/server/tests/plugins/index.ts b/server/tests/plugins/index.ts index fd7116efd..4534120fd 100644 --- a/server/tests/plugins/index.ts +++ b/server/tests/plugins/index.ts @@ -7,5 +7,6 @@ import './plugin-helpers' import './plugin-router' import './plugin-storage' import './plugin-transcoding' +import './plugin-unloading' import './translations' import './video-constants' diff --git a/server/tests/plugins/plugin-unloading.ts b/server/tests/plugins/plugin-unloading.ts new file mode 100644 index 000000000..74ca82e2f --- /dev/null +++ b/server/tests/plugins/plugin-unloading.ts @@ -0,0 +1,89 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import 'mocha' +import { + cleanupTests, + flushAndRunServer, + getPluginTestPath, + makeGetRequest, + installPlugin, + uninstallPlugin, + ServerInfo, + setAccessTokensToServers +} from '../../../shared/extra-utils' +import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes' +import { expect } from 'chai' + +describe('Test plugins module unloading', function () { + let server: ServerInfo = null + const requestPath = '/plugins/test-unloading/router/get' + let value: string = null + + before(async function () { + this.timeout(30000) + + server = await flushAndRunServer(1) + await setAccessTokensToServers([ server ]) + + await installPlugin({ + url: server.url, + accessToken: server.accessToken, + path: getPluginTestPath('-unloading') + }) + }) + + it('Should return a numeric value', async function () { + const res = await makeGetRequest({ + url: server.url, + path: requestPath, + statusCodeExpected: HttpStatusCode.OK_200 + }) + + expect(res.body.message).to.match(/^\d+$/) + value = res.body.message + }) + + it('Should return the same value the second time', async function () { + const res = await makeGetRequest({ + url: server.url, + path: requestPath, + statusCodeExpected: HttpStatusCode.OK_200 + }) + + expect(res.body.message).to.be.equal(value) + }) + + it('Should uninstall the plugin and free the route', async function () { + await uninstallPlugin({ + url: server.url, + accessToken: server.accessToken, + npmName: 'peertube-plugin-test-unloading' + }) + + await makeGetRequest({ + url: server.url, + path: requestPath, + statusCodeExpected: HttpStatusCode.NOT_FOUND_404 + }) + }) + + it('Should return a different numeric value', async function () { + await installPlugin({ + url: server.url, + accessToken: server.accessToken, + path: getPluginTestPath('-unloading') + }) + const res = await makeGetRequest({ + url: server.url, + path: requestPath, + statusCodeExpected: HttpStatusCode.OK_200 + }) + + expect(res.body.message).to.match(/^\d+$/) + expect(res.body.message).to.be.not.equal(value) + }) + + after(async function () { + await cleanupTests([ server ]) + }) +}) -- cgit v1.2.3