From 3d470a530c4a48b2e4f4a9e7d4f223e14f32cea4 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 14 Jun 2021 16:52:22 +0200 Subject: [PATCH] Faster ci using compiled ts files --- scripts/ci.sh | 40 +++++++++---------- server/tests/api/activitypub/helpers.ts | 37 ++++++++--------- server/tests/api/activitypub/security.ts | 7 ++-- server/tests/api/check-params/live.ts | 12 +++--- server/tests/api/check-params/users.ts | 10 ++--- .../tests/api/check-params/video-captions.ts | 11 ++--- .../tests/api/check-params/video-channels.ts | 14 +++---- .../tests/api/check-params/video-imports.ts | 18 ++++----- server/tests/api/server/contact-form.ts | 4 ++ server/tests/api/videos/multiple-servers.ts | 6 +-- .../mastodon/bad-body-http-signature.json | 0 .../ap-json}/mastodon/bad-http-signature.json | 0 .../ap-json}/mastodon/bad-public-key.json | 0 .../mastodon/create-bad-signature.json | 0 .../ap-json}/mastodon/create.json | 0 .../ap-json}/mastodon/http-signature.json | 0 .../ap-json}/mastodon/public-key.json | 0 .../peertube/announce-without-context.json | 0 .../ap-json}/peertube/invalid-keys.json | 0 .../ap-json}/peertube/keys.json | 0 server/tests/plugins/filter-hooks.ts | 4 +- server/tests/register.ts | 3 ++ .../extra-utils/miscs/email-child-process.js | 27 ------------- shared/extra-utils/miscs/email.ts | 39 ++++++++---------- 24 files changed, 104 insertions(+), 128 deletions(-) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/bad-body-http-signature.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/bad-http-signature.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/bad-public-key.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/create-bad-signature.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/create.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/http-signature.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/mastodon/public-key.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/peertube/announce-without-context.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/peertube/invalid-keys.json (100%) rename server/tests/{api/activitypub/json => fixtures/ap-json}/peertube/keys.json (100%) create mode 100644 server/tests/register.ts delete mode 100644 shared/extra-utils/miscs/email-child-process.js diff --git a/scripts/ci.sh b/scripts/ci.sh index f4a200a00..7360a03ce 100755 --- a/scripts/ci.sh +++ b/scripts/ci.sh @@ -25,7 +25,7 @@ runTest () { joblog="$jobname-ci.log" parallel -j $jobs --retries $retries \ - "echo Trying {} >> $joblog; npm run mocha -- -c --timeout 30000 --exit --require ts-node/register --require tsconfig-paths/register --bail {}" \ + "echo Trying {} >> $joblog; npm run mocha -- -c --timeout 30000 --exit --require ./dist/server/tests/register.js --bail {}" \ ::: $files cat "$joblog" | uniq -c @@ -33,63 +33,63 @@ runTest () { } findTestFiles () { - find $1 -type f -name "*.ts" | grep -v "/index.ts" | xargs echo + find $1 -type f -name "*.js" | grep -v "/index.js" | xargs echo } if [ "$1" = "misc" ]; then npm run build - feedsFiles=$(findTestFiles server/tests/feeds) - helperFiles=$(findTestFiles server/tests/helpers) - pluginsFiles=$(findTestFiles server/tests/plugins) - miscFiles="server/tests/client.ts server/tests/misc-endpoints.ts" + feedsFiles=$(findTestFiles ./dist/server/tests/feeds) + helperFiles=$(findTestFiles ./dist/server/tests/helpers) + pluginsFiles=$(findTestFiles ./dist/server/tests/plugins) + miscFiles="./dist/server/tests/client.js ./dist/server/tests/misc-endpoints.js" - MOCHA_PARALLEL=true TS_NODE_FILES=true runTest "$1" 2 $feedsFiles $helperFiles $pluginsFiles $miscFiles + MOCHA_PARALLEL=true runTest "$1" 2 $feedsFiles $helperFiles $pluginsFiles $miscFiles elif [ "$1" = "cli" ]; then npm run build:server npm run setup:cli - cliFiles=$(findTestFiles server/tests/cli) + cliFiles=$(findTestFiles ./dist/server/tests/cli) runTest "$1" 1 $cliFiles elif [ "$1" = "api-1" ]; then npm run build:server - checkParamFiles=$(findTestFiles server/tests/api/check-params) - notificationsFiles=$(findTestFiles server/tests/api/notifications) - searchFiles=$(findTestFiles server/tests/api/search) + checkParamFiles=$(findTestFiles ./dist/server/tests/api/check-params) + notificationsFiles=$(findTestFiles ./dist/server/tests/api/notifications) + searchFiles=$(findTestFiles ./dist/server/tests/api/search) MOCHA_PARALLEL=true runTest "$1" 3 $notificationsFiles $searchFiles $checkParamFiles elif [ "$1" = "api-2" ]; then npm run build:server - serverFiles=$(findTestFiles server/tests/api/server) - usersFiles=$(findTestFiles server/tests/api/users) - liveFiles=$(findTestFiles server/tests/api/live) + serverFiles=$(findTestFiles ./dist/server/tests/api/server) + usersFiles=$(findTestFiles ./dist/server/tests/api/users) + liveFiles=$(findTestFiles ./dist/server/tests/api/live) MOCHA_PARALLEL=true runTest "$1" 3 $serverFiles $usersFiles $liveFiles elif [ "$1" = "api-3" ]; then npm run build:server - videosFiles=$(findTestFiles server/tests/api/videos) + videosFiles=$(findTestFiles ./dist/server/tests/api/videos) MOCHA_PARALLEL=true runTest "$1" 3 $videosFiles elif [ "$1" = "api-4" ]; then npm run build:server - moderationFiles=$(findTestFiles server/tests/api/moderation) - redundancyFiles=$(findTestFiles server/tests/api/redundancy) - activitypubFiles=$(findTestFiles server/tests/api/activitypub) + moderationFiles=$(findTestFiles ./dist/server/tests/api/moderation) + redundancyFiles=$(findTestFiles ./dist/server/tests/api/redundancy) + activitypubFiles=$(findTestFiles ./dist/server/tests/api/activitypub) MOCHA_PARALLEL=true TS_NODE_FILES=true runTest "$1" 2 $moderationFiles $redundancyFiles $activitypubFiles elif [ "$1" = "external-plugins" ]; then npm run build:server - externalPluginsFiles=$(findTestFiles server/tests/external-plugins) + externalPluginsFiles=$(findTestFiles ./dist/server/tests/external-plugins) runTest "$1" 1 $externalPluginsFiles elif [ "$1" = "lint" ]; then - npm run eslint -- --ext .ts "server/**/*.ts" "shared/**/*.ts" "scripts/**/*.ts" + npm run eslint -- --ext .ts "./server/**/*.ts" "shared/**/*.ts" "scripts/**/*.ts" npm run swagger-cli -- validate support/doc/api/openapi.yaml ( cd client diff --git a/server/tests/api/activitypub/helpers.ts b/server/tests/api/activitypub/helpers.ts index 60d95b823..66d7631b7 100644 --- a/server/tests/api/activitypub/helpers.ts +++ b/server/tests/api/activitypub/helpers.ts @@ -6,13 +6,14 @@ import { buildRequestStub } from '../../../../shared/extra-utils/miscs/stubs' import { isHTTPSignatureVerified, isJsonLDSignatureVerified, parseHTTPSignature } from '../../../helpers/peertube-crypto' import { cloneDeep } from 'lodash' import { buildSignedActivity } from '../../../helpers/activitypub' +import { buildAbsoluteFixturePath } from '@shared/extra-utils' describe('Test activity pub helpers', function () { describe('When checking the Linked Signature', function () { it('Should fail with an invalid Mastodon signature', async function () { - const body = require('./json/mastodon/create-bad-signature.json') - const publicKey = require('./json/mastodon/public-key.json').publicKey + const body = require(buildAbsoluteFixturePath('./ap-json/mastodon/create-bad-signature.json')) + const publicKey = require(buildAbsoluteFixturePath('./ap-json/mastodon/public-key.json')).publicKey const fromActor = { publicKey, url: 'http://localhost:9002/accounts/peertube' } const result = await isJsonLDSignatureVerified(fromActor as any, body) @@ -21,8 +22,8 @@ describe('Test activity pub helpers', function () { }) it('Should fail with an invalid public key', async function () { - const body = require('./json/mastodon/create.json') - const publicKey = require('./json/mastodon/bad-public-key.json').publicKey + const body = require(buildAbsoluteFixturePath('./ap-json/mastodon/create.json')) + const publicKey = require(buildAbsoluteFixturePath('./ap-json/mastodon/bad-public-key.json')).publicKey const fromActor = { publicKey, url: 'http://localhost:9002/accounts/peertube' } const result = await isJsonLDSignatureVerified(fromActor as any, body) @@ -31,8 +32,8 @@ describe('Test activity pub helpers', function () { }) it('Should succeed with a valid Mastodon signature', async function () { - const body = require('./json/mastodon/create.json') - const publicKey = require('./json/mastodon/public-key.json').publicKey + const body = require(buildAbsoluteFixturePath('./ap-json/mastodon/create.json')) + const publicKey = require(buildAbsoluteFixturePath('./ap-json/mastodon/public-key.json')).publicKey const fromActor = { publicKey, url: 'http://localhost:9002/accounts/peertube' } const result = await isJsonLDSignatureVerified(fromActor as any, body) @@ -41,8 +42,8 @@ describe('Test activity pub helpers', function () { }) it('Should fail with an invalid PeerTube signature', async function () { - const keys = require('./json/peertube/invalid-keys.json') - const body = require('./json/peertube/announce-without-context.json') + const keys = require(buildAbsoluteFixturePath('./ap-json/peertube/invalid-keys.json')) + const body = require(buildAbsoluteFixturePath('./ap-json/peertube/announce-without-context.json')) const actorSignature = { url: 'http://localhost:9002/accounts/peertube', privateKey: keys.privateKey } const signedBody = await buildSignedActivity(actorSignature as any, body) @@ -54,8 +55,8 @@ describe('Test activity pub helpers', function () { }) it('Should succeed with a valid PeerTube signature', async function () { - const keys = require('./json/peertube/keys.json') - const body = require('./json/peertube/announce-without-context.json') + const keys = require(buildAbsoluteFixturePath('./ap-json/peertube/keys.json')) + const body = require(buildAbsoluteFixturePath('./ap-json/peertube/announce-without-context.json')) const actorSignature = { url: 'http://localhost:9002/accounts/peertube', privateKey: keys.privateKey } const signedBody = await buildSignedActivity(actorSignature as any, body) @@ -73,12 +74,12 @@ describe('Test activity pub helpers', function () { req.method = 'POST' req.url = '/accounts/ronan/inbox' - const mastodonObject = cloneDeep(require('./json/mastodon/bad-http-signature.json')) + const mastodonObject = cloneDeep(require(buildAbsoluteFixturePath('./ap-json/mastodon/bad-http-signature.json'))) req.body = mastodonObject.body req.headers = mastodonObject.headers const parsed = parseHTTPSignature(req, 3600 * 1000 * 365 * 10) - const publicKey = require('./json/mastodon/public-key.json').publicKey + const publicKey = require(buildAbsoluteFixturePath('./ap-json/mastodon/public-key.json')).publicKey const actor = { publicKey } const verified = isHTTPSignatureVerified(parsed, actor as any) @@ -91,12 +92,12 @@ describe('Test activity pub helpers', function () { req.method = 'POST' req.url = '/accounts/ronan/inbox' - const mastodonObject = cloneDeep(require('./json/mastodon/http-signature.json')) + const mastodonObject = cloneDeep(require(buildAbsoluteFixturePath('./ap-json/mastodon/http-signature.json'))) req.body = mastodonObject.body req.headers = mastodonObject.headers const parsed = parseHTTPSignature(req, 3600 * 1000 * 365 * 10) - const publicKey = require('./json/mastodon/bad-public-key.json').publicKey + const publicKey = require(buildAbsoluteFixturePath('./ap-json/mastodon/bad-public-key.json')).publicKey const actor = { publicKey } const verified = isHTTPSignatureVerified(parsed, actor as any) @@ -109,7 +110,7 @@ describe('Test activity pub helpers', function () { req.method = 'POST' req.url = '/accounts/ronan/inbox' - const mastodonObject = cloneDeep(require('./json/mastodon/http-signature.json')) + const mastodonObject = cloneDeep(require(buildAbsoluteFixturePath('./ap-json/mastodon/http-signature.json'))) req.body = mastodonObject.body req.headers = mastodonObject.headers @@ -128,7 +129,7 @@ describe('Test activity pub helpers', function () { req.method = 'POST' req.url = '/accounts/ronan/inbox' - const mastodonObject = cloneDeep(require('./json/mastodon/http-signature.json')) + const mastodonObject = cloneDeep(require(buildAbsoluteFixturePath('./ap-json/mastodon/http-signature.json'))) req.body = mastodonObject.body req.headers = mastodonObject.headers req.headers = 'Signature ' + mastodonObject.headers @@ -148,12 +149,12 @@ describe('Test activity pub helpers', function () { req.method = 'POST' req.url = '/accounts/ronan/inbox' - const mastodonObject = cloneDeep(require('./json/mastodon/http-signature.json')) + const mastodonObject = cloneDeep(require(buildAbsoluteFixturePath('./ap-json/mastodon/http-signature.json'))) req.body = mastodonObject.body req.headers = mastodonObject.headers const parsed = parseHTTPSignature(req, 3600 * 1000 * 365 * 10) - const publicKey = require('./json/mastodon/public-key.json').publicKey + const publicKey = require(buildAbsoluteFixturePath('./ap-json/mastodon/public-key.json')).publicKey const actor = { publicKey } const verified = isHTTPSignatureVerified(parsed, actor as any) diff --git a/server/tests/api/activitypub/security.ts b/server/tests/api/activitypub/security.ts index 364b53e0f..61db272f6 100644 --- a/server/tests/api/activitypub/security.ts +++ b/server/tests/api/activitypub/security.ts @@ -5,6 +5,7 @@ import * as chai from 'chai' import { buildDigest } from '@server/helpers/peertube-crypto' import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { + buildAbsoluteFixturePath, cleanupTests, closeAllSequelize, flushAndRunMultipleServers, @@ -40,7 +41,7 @@ function setUpdatedAtOfServer (onServer: ServerInfo, ofServer: ServerInfo, updat } function getAnnounceWithoutContext (server: ServerInfo) { - const json = require('./json/peertube/announce-without-context.json') + const json = require(buildAbsoluteFixturePath('./ap-json/peertube/announce-without-context.json')) const result: typeof json = {} for (const key of Object.keys(json)) { @@ -58,8 +59,8 @@ describe('Test ActivityPub security', function () { let servers: ServerInfo[] let url: string - const keys = require('./json/peertube/keys.json') - const invalidKeys = require('./json/peertube/invalid-keys.json') + const keys = require(buildAbsoluteFixturePath('./ap-json/peertube/keys.json')) + const invalidKeys = require(buildAbsoluteFixturePath('./ap-json/peertube/invalid-keys.json')) const baseHttpSignature = () => ({ algorithm: HTTP_SIGNATURE.ALGORITHM, authorizationHeaderName: HTTP_SIGNATURE.HEADER_NAME, diff --git a/server/tests/api/check-params/live.ts b/server/tests/api/check-params/live.ts index c171b1f81..32233c9da 100644 --- a/server/tests/api/check-params/live.ts +++ b/server/tests/api/check-params/live.ts @@ -2,9 +2,10 @@ import 'mocha' import { omit } from 'lodash' -import { join } from 'path' import { LiveVideo, VideoPrivacy } from '@shared/models' +import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { + buildAbsoluteFixturePath, cleanupTests, createUser, flushAndRunServer, @@ -24,7 +25,6 @@ import { userLogin, waitUntilLivePublished } from '../../../../shared/extra-utils' -import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' describe('Test video lives API validator', function () { const path = '/api/v1/videos/live' @@ -180,7 +180,7 @@ describe('Test video lives API validator', function () { it('Should fail with an incorrect thumbnail file', async function () { const fields = baseCorrectParams const attaches = { - thumbnailfile: join(__dirname, '..', '..', 'fixtures', 'video_short.mp4') + thumbnailfile: buildAbsoluteFixturePath('video_short.mp4') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -189,7 +189,7 @@ describe('Test video lives API validator', function () { it('Should fail with a big thumbnail file', async function () { const fields = baseCorrectParams const attaches = { - thumbnailfile: join(__dirname, '..', '..', 'fixtures', 'preview-big.png') + thumbnailfile: buildAbsoluteFixturePath('preview-big.png') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -198,7 +198,7 @@ describe('Test video lives API validator', function () { it('Should fail with an incorrect preview file', async function () { const fields = baseCorrectParams const attaches = { - previewfile: join(__dirname, '..', '..', 'fixtures', 'video_short.mp4') + previewfile: buildAbsoluteFixturePath('video_short.mp4') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -207,7 +207,7 @@ describe('Test video lives API validator', function () { it('Should fail with a big preview file', async function () { const fields = baseCorrectParams const attaches = { - previewfile: join(__dirname, '..', '..', 'fixtures', 'preview-big.png') + previewfile: buildAbsoluteFixturePath('preview-big.png') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) diff --git a/server/tests/api/check-params/users.ts b/server/tests/api/check-params/users.ts index dcff0d52b..36482ee17 100644 --- a/server/tests/api/check-params/users.ts +++ b/server/tests/api/check-params/users.ts @@ -2,12 +2,12 @@ import 'mocha' import { omit } from 'lodash' -import { join } from 'path' import { User, UserRole } from '../../../../shared' import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { addVideoChannel, blockUser, + buildAbsoluteFixturePath, cleanupTests, createUser, deleteMe, @@ -600,7 +600,7 @@ describe('Test users API validators', function () { it('Should fail without an incorrect input file', async function () { const fields = {} const attaches = { - avatarfile: join(__dirname, '..', '..', 'fixtures', 'video_short.mp4') + avatarfile: buildAbsoluteFixturePath('video_short.mp4') } await makeUploadRequest({ url: server.url, path: path + '/me/avatar/pick', token: server.accessToken, fields, attaches }) }) @@ -608,7 +608,7 @@ describe('Test users API validators', function () { it('Should fail with a big file', async function () { const fields = {} const attaches = { - avatarfile: join(__dirname, '..', '..', 'fixtures', 'avatar-big.png') + avatarfile: buildAbsoluteFixturePath('avatar-big.png') } await makeUploadRequest({ url: server.url, path: path + '/me/avatar/pick', token: server.accessToken, fields, attaches }) }) @@ -616,7 +616,7 @@ describe('Test users API validators', function () { it('Should fail with an unauthenticated user', async function () { const fields = {} const attaches = { - avatarfile: join(__dirname, '..', '..', 'fixtures', 'avatar.png') + avatarfile: buildAbsoluteFixturePath('avatar.png') } await makeUploadRequest({ url: server.url, @@ -630,7 +630,7 @@ describe('Test users API validators', function () { it('Should succeed with the correct params', async function () { const fields = {} const attaches = { - avatarfile: join(__dirname, '..', '..', 'fixtures', 'avatar.png') + avatarfile: buildAbsoluteFixturePath('avatar.png') } await makeUploadRequest({ url: server.url, diff --git a/server/tests/api/check-params/video-captions.ts b/server/tests/api/check-params/video-captions.ts index 2f049c03d..1ce2202d2 100644 --- a/server/tests/api/check-params/video-captions.ts +++ b/server/tests/api/check-params/video-captions.ts @@ -1,7 +1,10 @@ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ import 'mocha' + +import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { + buildAbsoluteFixturePath, cleanupTests, createUser, flushAndRunServer, @@ -13,9 +16,7 @@ import { uploadVideo, userLogin } from '../../../../shared/extra-utils' -import { join } from 'path' import { createVideoCaption } from '../../../../shared/extra-utils/videos/video-captions' -import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' describe('Test video captions API validator', function () { const path = '/api/v1/videos/' @@ -51,7 +52,7 @@ describe('Test video captions API validator', function () { describe('When adding video caption', function () { const fields = { } const attaches = { - captionfile: join(__dirname, '..', '..', 'fixtures', 'subtitle-good1.vtt') + captionfile: buildAbsoluteFixturePath('subtitle-good1.vtt') } it('Should fail without a valid uuid', async function () { @@ -129,7 +130,7 @@ describe('Test video captions API validator', function () { // We accept any file now // it('Should fail with an invalid captionfile extension', async function () { // const attaches = { - // 'captionfile': join(__dirname, '..', '..', 'fixtures', 'subtitle-bad.txt') + // 'captionfile': buildAbsoluteFixturePath('subtitle-bad.txt') // } // // const captionPath = path + videoUUID + '/captions/fr' @@ -171,7 +172,7 @@ describe('Test video captions API validator', function () { // We don't check the file validity yet // it('Should fail with an invalid captionfile srt', async function () { // const attaches = { - // 'captionfile': join(__dirname, '..', '..', 'fixtures', 'subtitle-bad.srt') + // 'captionfile': buildAbsoluteFixturePath('subtitle-bad.srt') // } // // const captionPath = path + videoUUID + '/captions/fr' diff --git a/server/tests/api/check-params/video-channels.ts b/server/tests/api/check-params/video-channels.ts index bc2e6192e..5c02afd31 100644 --- a/server/tests/api/check-params/video-channels.ts +++ b/server/tests/api/check-params/video-channels.ts @@ -1,9 +1,11 @@ /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ +import 'mocha' import * as chai from 'chai' import { omit } from 'lodash' -import 'mocha' +import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { + buildAbsoluteFixturePath, cleanupTests, createUser, deleteVideoChannel, @@ -23,9 +25,7 @@ import { checkBadSortPagination, checkBadStartPagination } from '../../../../shared/extra-utils/requests/check-api-params' -import { join } from 'path' import { VideoChannelUpdate } from '../../../../shared/models/videos' -import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' const expect = chai.expect @@ -246,7 +246,7 @@ describe('Test video channels API validator', function () { for (const type of types) { const fields = {} const attaches = { - [type + 'file']: join(__dirname, '..', '..', 'fixtures', 'video_short.mp4') + [type + 'file']: buildAbsoluteFixturePath('video_short.mp4') } await makeUploadRequest({ url: server.url, path: `${path}/${type}/pick`, token: server.accessToken, fields, attaches }) @@ -257,7 +257,7 @@ describe('Test video channels API validator', function () { for (const type of types) { const fields = {} const attaches = { - [type + 'file']: join(__dirname, '..', '..', 'fixtures', 'avatar-big.png') + [type + 'file']: buildAbsoluteFixturePath('avatar-big.png') } await makeUploadRequest({ url: server.url, path: `${path}/${type}/pick`, token: server.accessToken, fields, attaches }) } @@ -267,7 +267,7 @@ describe('Test video channels API validator', function () { for (const type of types) { const fields = {} const attaches = { - [type + 'file']: join(__dirname, '..', '..', 'fixtures', 'avatar.png') + [type + 'file']: buildAbsoluteFixturePath('avatar.png') } await makeUploadRequest({ url: server.url, @@ -283,7 +283,7 @@ describe('Test video channels API validator', function () { for (const type of types) { const fields = {} const attaches = { - [type + 'file']: join(__dirname, '..', '..', 'fixtures', 'avatar.png') + [type + 'file']: buildAbsoluteFixturePath('avatar.png') } await makeUploadRequest({ url: server.url, diff --git a/server/tests/api/check-params/video-imports.ts b/server/tests/api/check-params/video-imports.ts index 6de6b40c8..a27b624d0 100644 --- a/server/tests/api/check-params/video-imports.ts +++ b/server/tests/api/check-params/video-imports.ts @@ -2,8 +2,9 @@ import 'mocha' import { omit } from 'lodash' -import { join } from 'path' +import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { + buildAbsoluteFixturePath, cleanupTests, createUser, flushAndRunServer, @@ -22,9 +23,8 @@ import { checkBadSortPagination, checkBadStartPagination } from '../../../../shared/extra-utils/requests/check-api-params' -import { getMagnetURI, getGoodVideoUrl } from '../../../../shared/extra-utils/videos/video-imports' +import { getGoodVideoUrl, getMagnetURI } from '../../../../shared/extra-utils/videos/video-imports' import { VideoPrivacy } from '../../../../shared/models/videos/video-privacy.enum' -import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' describe('Test video imports API validator', function () { const path = '/api/v1/videos/imports' @@ -201,7 +201,7 @@ describe('Test video imports API validator', function () { it('Should fail with an incorrect thumbnail file', async function () { const fields = baseCorrectParams const attaches = { - thumbnailfile: join(__dirname, '..', '..', 'fixtures', 'video_short.mp4') + thumbnailfile: buildAbsoluteFixturePath('video_short.mp4') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -210,7 +210,7 @@ describe('Test video imports API validator', function () { it('Should fail with a big thumbnail file', async function () { const fields = baseCorrectParams const attaches = { - thumbnailfile: join(__dirname, '..', '..', 'fixtures', 'preview-big.png') + thumbnailfile: buildAbsoluteFixturePath('preview-big.png') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -219,7 +219,7 @@ describe('Test video imports API validator', function () { it('Should fail with an incorrect preview file', async function () { const fields = baseCorrectParams const attaches = { - previewfile: join(__dirname, '..', '..', 'fixtures', 'video_short.mp4') + previewfile: buildAbsoluteFixturePath('video_short.mp4') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -228,7 +228,7 @@ describe('Test video imports API validator', function () { it('Should fail with a big preview file', async function () { const fields = baseCorrectParams const attaches = { - previewfile: join(__dirname, '..', '..', 'fixtures', 'preview-big.png') + previewfile: buildAbsoluteFixturePath('preview-big.png') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -237,7 +237,7 @@ describe('Test video imports API validator', function () { it('Should fail with an invalid torrent file', async function () { const fields = omit(baseCorrectParams, 'targetUrl') const attaches = { - torrentfile: join(__dirname, '..', '..', 'fixtures', 'avatar-big.png') + torrentfile: buildAbsoluteFixturePath('avatar-big.png') } await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches }) @@ -312,7 +312,7 @@ describe('Test video imports API validator', function () { fields = omit(fields, 'magnetUri') const attaches = { - torrentfile: join(__dirname, '..', '..', 'fixtures', 'video-720p.torrent') + torrentfile: buildAbsoluteFixturePath('video-720p.torrent') } await makeUploadRequest({ diff --git a/server/tests/api/server/contact-form.ts b/server/tests/api/server/contact-form.ts index 9b4af1915..8851ad55e 100644 --- a/server/tests/api/server/contact-form.ts +++ b/server/tests/api/server/contact-form.ts @@ -54,6 +54,10 @@ describe('Test contact form', function () { }) it('Should not be able to send another contact form because of the anti spam checker', async function () { + this.timeout(10000) + + await wait(1000) + await sendContactForm({ url: server.url, fromEmail: 'toto@example.com', diff --git a/server/tests/api/videos/multiple-servers.ts b/server/tests/api/videos/multiple-servers.ts index e80d69cf3..a8c8a889b 100644 --- a/server/tests/api/videos/multiple-servers.ts +++ b/server/tests/api/videos/multiple-servers.ts @@ -2,11 +2,11 @@ import 'mocha' import * as chai from 'chai' -import { join } from 'path' import * as request from 'supertest' import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' import { addVideoChannel, + buildAbsoluteFixturePath, checkTmpIsEmpty, checkVideoFilesWereRemoved, cleanupTests, @@ -1018,9 +1018,7 @@ describe('Test multiple servers', function () { .field('privacy', '1') .field('channelId', '1') - const filePath = join(__dirname, '..', '..', 'fixtures', 'video_short.webm') - - await req.attach('videofile', filePath) + await req.attach('videofile', buildAbsoluteFixturePath('video_short.webm')) .expect(HttpStatusCode.OK_200) await waitJobs(servers) diff --git a/server/tests/api/activitypub/json/mastodon/bad-body-http-signature.json b/server/tests/fixtures/ap-json/mastodon/bad-body-http-signature.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/bad-body-http-signature.json rename to server/tests/fixtures/ap-json/mastodon/bad-body-http-signature.json diff --git a/server/tests/api/activitypub/json/mastodon/bad-http-signature.json b/server/tests/fixtures/ap-json/mastodon/bad-http-signature.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/bad-http-signature.json rename to server/tests/fixtures/ap-json/mastodon/bad-http-signature.json diff --git a/server/tests/api/activitypub/json/mastodon/bad-public-key.json b/server/tests/fixtures/ap-json/mastodon/bad-public-key.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/bad-public-key.json rename to server/tests/fixtures/ap-json/mastodon/bad-public-key.json diff --git a/server/tests/api/activitypub/json/mastodon/create-bad-signature.json b/server/tests/fixtures/ap-json/mastodon/create-bad-signature.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/create-bad-signature.json rename to server/tests/fixtures/ap-json/mastodon/create-bad-signature.json diff --git a/server/tests/api/activitypub/json/mastodon/create.json b/server/tests/fixtures/ap-json/mastodon/create.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/create.json rename to server/tests/fixtures/ap-json/mastodon/create.json diff --git a/server/tests/api/activitypub/json/mastodon/http-signature.json b/server/tests/fixtures/ap-json/mastodon/http-signature.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/http-signature.json rename to server/tests/fixtures/ap-json/mastodon/http-signature.json diff --git a/server/tests/api/activitypub/json/mastodon/public-key.json b/server/tests/fixtures/ap-json/mastodon/public-key.json similarity index 100% rename from server/tests/api/activitypub/json/mastodon/public-key.json rename to server/tests/fixtures/ap-json/mastodon/public-key.json diff --git a/server/tests/api/activitypub/json/peertube/announce-without-context.json b/server/tests/fixtures/ap-json/peertube/announce-without-context.json similarity index 100% rename from server/tests/api/activitypub/json/peertube/announce-without-context.json rename to server/tests/fixtures/ap-json/peertube/announce-without-context.json diff --git a/server/tests/api/activitypub/json/peertube/invalid-keys.json b/server/tests/fixtures/ap-json/peertube/invalid-keys.json similarity index 100% rename from server/tests/api/activitypub/json/peertube/invalid-keys.json rename to server/tests/fixtures/ap-json/peertube/invalid-keys.json diff --git a/server/tests/api/activitypub/json/peertube/keys.json b/server/tests/fixtures/ap-json/peertube/keys.json similarity index 100% rename from server/tests/api/activitypub/json/peertube/keys.json rename to server/tests/fixtures/ap-json/peertube/keys.json diff --git a/server/tests/plugins/filter-hooks.ts b/server/tests/plugins/filter-hooks.ts index 1d6bb6cf4..e78246d2d 100644 --- a/server/tests/plugins/filter-hooks.ts +++ b/server/tests/plugins/filter-hooks.ts @@ -326,7 +326,7 @@ describe('Test plugin filter hooks', function () { }) it('Should blacklist on remote upload', async function () { - this.timeout(60000) + this.timeout(120000) const res = await uploadVideo(servers[1].url, servers[1].accessToken, { name: 'remote please blacklist me' }) await waitJobs(servers) @@ -335,7 +335,7 @@ describe('Test plugin filter hooks', function () { }) it('Should blacklist on remote update', async function () { - this.timeout(60000) + this.timeout(120000) const res = await uploadVideo(servers[1].url, servers[1].accessToken, { name: 'video' }) await waitJobs(servers) diff --git a/server/tests/register.ts b/server/tests/register.ts new file mode 100644 index 000000000..af6c8c644 --- /dev/null +++ b/server/tests/register.ts @@ -0,0 +1,3 @@ +import { registerTSPaths } from '../helpers/register-ts-paths' + +registerTSPaths() diff --git a/shared/extra-utils/miscs/email-child-process.js b/shared/extra-utils/miscs/email-child-process.js deleted file mode 100644 index 088a5a08c..000000000 --- a/shared/extra-utils/miscs/email-child-process.js +++ /dev/null @@ -1,27 +0,0 @@ -const MailDev = require('maildev') - -// must run maildev as forked ChildProcess -// failed instantiation stops main process with exit code 0 -process.on('message', (msg) => { - if (msg.start) { - const maildev = new MailDev({ - ip: '127.0.0.1', - smtp: msg.port, - disableWeb: true, - silent: true - }) - - maildev.on('new', email => { - process.send({ email }) - }) - - maildev.listen(err => { - if (err) { - // cannot send as Error object - return process.send({ err: err.message }) - } - - return process.send({ err: null }) - }) - } -}) diff --git a/shared/extra-utils/miscs/email.ts b/shared/extra-utils/miscs/email.ts index 758b15b58..9fc9a5ad0 100644 --- a/shared/extra-utils/miscs/email.ts +++ b/shared/extra-utils/miscs/email.ts @@ -1,8 +1,9 @@ -import { ChildProcess, fork } from 'child_process' -import { join } from 'path' +import { ChildProcess } from 'child_process' import { randomInt } from '../../core-utils/miscs/miscs' import { parallelTests } from '../server/servers' +const MailDev = require('maildev') + class MockSmtpServer { private static instance: MockSmtpServer @@ -10,38 +11,32 @@ class MockSmtpServer { private emailChildProcess: ChildProcess private emails: object[] - private constructor () { - this.emailChildProcess = fork(join(__dirname, 'email-child-process'), []) - - this.emailChildProcess.on('message', (msg: any) => { - if (msg.email) { - return this.emails.push(msg.email) - } - }) - - process.on('exit', () => this.kill()) - } + private constructor () { } collectEmails (emailsCollection: object[]) { return new Promise((res, rej) => { const port = parallelTests() ? randomInt(1000, 2000) : 1025 + this.emails = emailsCollection if (this.started) { - this.emails = emailsCollection return res(undefined) } - // ensure maildev isn't started until - // unexpected exit can be reported to test runner - this.emailChildProcess.send({ start: true, port }) - this.emailChildProcess.on('exit', () => { - return rej(new Error('maildev exited unexpectedly, confirm port not in use')) + const maildev = new MailDev({ + ip: '127.0.0.1', + smtp: port, + disableWeb: true, + silent: true + }) + + maildev.on('new', email => { + this.emails.push(email) }) - this.emailChildProcess.on('message', (msg: any) => { - if (msg.err) return rej(new Error(msg.err)) + + maildev.listen(err => { + if (err) return rej(err) this.started = true - this.emails = emailsCollection return res(port) }) -- 2.41.0