X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fshared%2Fchecks.ts;h=feaef37c67ab43cad6e1f0dc7bf449e7b931b2f2;hb=4cf800a350972a078c074da6b31da2b98ab4b007;hp=9ecc84b5d8d8ac602e9523ea50aad275ed8370b8;hpb=c55e3d7227fe1453869e309025996b9d75256d5d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/shared/checks.ts b/server/tests/shared/checks.ts index 9ecc84b5d..feaef37c6 100644 --- a/server/tests/shared/checks.ts +++ b/server/tests/shared/checks.ts @@ -2,13 +2,16 @@ import { expect } from 'chai' import { pathExists, readFile } from 'fs-extra' +import JPEG from 'jpeg-js' import { join } from 'path' +import pixelmatch from 'pixelmatch' +import { PNG } from 'pngjs' import { root } from '@shared/core-utils' import { HttpStatusCode } from '@shared/models' import { makeGetRequest, PeerTubeServer } from '@shared/server-commands' // Default interval -> 5 minutes -function dateIsValid (dateString: string, interval = 300000) { +function dateIsValid (dateString: string | Date, interval = 300000) { const dateToCheck = new Date(dateString) const now = new Date() @@ -19,27 +22,66 @@ function expectStartWith (str: string, start: string) { expect(str.startsWith(start), `${str} does not start with ${start}`).to.be.true } +function expectNotStartWith (str: string, start: string) { + expect(str.startsWith(start), `${str} does not start with ${start}`).to.be.false +} + +function expectEndWith (str: string, end: string) { + expect(str.endsWith(end), `${str} does not end with ${end}`).to.be.true +} + +// --------------------------------------------------------------------------- + async function expectLogDoesNotContain (server: PeerTubeServer, str: string) { const content = await server.servers.getLogContent() expect(content.toString()).to.not.contain(str) } -async function testImage (url: string, imageName: string, imagePath: string, extension = '.jpg') { +async function expectLogContain (server: PeerTubeServer, str: string) { + const content = await server.servers.getLogContent() + + expect(content.toString()).to.contain(str) +} + +async function testImageSize (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') { const res = await makeGetRequest({ url, - path: imagePath, + path: imageHTTPPath, expectedStatus: HttpStatusCode.OK_200 }) const body = res.body const data = await readFile(join(root(), 'server', 'tests', 'fixtures', imageName + extension)) - const minLength = body.length - ((30 * body.length) / 100) - const maxLength = body.length + ((30 * body.length) / 100) + const minLength = data.length - ((40 * data.length) / 100) + const maxLength = data.length + ((40 * data.length) / 100) - expect(data.length).to.be.above(minLength, 'the generated image is way smaller than the recorded fixture') - expect(data.length).to.be.below(maxLength, 'the generated image is way larger than the recorded fixture') + expect(body.length).to.be.above(minLength, 'the generated image is way smaller than the recorded fixture') + expect(body.length).to.be.below(maxLength, 'the generated image is way larger than the recorded fixture') +} + +async function testImage (url: string, imageName: string, imageHTTPPath: string, extension = '.jpg') { + const res = await makeGetRequest({ + url, + path: imageHTTPPath, + expectedStatus: HttpStatusCode.OK_200 + }) + + const body = res.body + const data = await readFile(join(root(), 'server', 'tests', 'fixtures', imageName + extension)) + + const img1 = imageHTTPPath.endsWith('.png') + ? PNG.sync.read(body) + : JPEG.decode(body) + + const img2 = extension === '.png' + ? PNG.sync.read(data) + : JPEG.decode(data) + + const result = pixelmatch(img1.data, img2.data, null, img1.width, img1.height, { threshold: 0.1 }) + + expect(result).to.equal(0, `${imageHTTPPath} image is not the same as ${imageName}${extension}`) } async function testFileExistsOrNot (server: PeerTubeServer, directory: string, filePath: string, exist: boolean) { @@ -48,6 +90,8 @@ async function testFileExistsOrNot (server: PeerTubeServer, directory: string, f expect(await pathExists(join(base, filePath))).to.equal(exist) } +// --------------------------------------------------------------------------- + function checkBadStartPagination (url: string, path: string, token?: string, query = {}) { return makeGetRequest({ url, @@ -86,13 +130,34 @@ function checkBadSortPagination (url: string, path: string, token?: string, quer }) } +// --------------------------------------------------------------------------- + +async function checkVideoDuration (server: PeerTubeServer, videoUUID: string, duration: number) { + const video = await server.videos.get({ id: videoUUID }) + + expect(video.duration).to.be.approximately(duration, 1) + + for (const file of video.files) { + const metadata = await server.videos.getFileMetadata({ url: file.metadataUrl }) + + for (const stream of metadata.streams) { + expect(Math.round(stream.duration)).to.be.approximately(duration, 1) + } + } +} + export { dateIsValid, + testImageSize, testImage, expectLogDoesNotContain, testFileExistsOrNot, expectStartWith, + expectNotStartWith, + expectEndWith, checkBadStartPagination, checkBadCountPagination, - checkBadSortPagination + checkBadSortPagination, + checkVideoDuration, + expectLogContain }