X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=scripts%2Fbenchmark.ts;h=f7f9ad1bf6c600ccb0da1d164c5e747683b7144e;hb=ba2684ceddf9b76312635b9cddc6bf6975ce436a;hp=1d980063bdfb69acf812fa736e58d8f80feebce5;hpb=89d241a79c262b9775c233b73cff080043ebb5e6;p=github%2FChocobozzz%2FPeerTube.git diff --git a/scripts/benchmark.ts b/scripts/benchmark.ts index 1d980063b..f7f9ad1bf 100644 --- a/scripts/benchmark.ts +++ b/scripts/benchmark.ts @@ -1,21 +1,29 @@ -import * as autocannon from 'autocannon' +import autocannon, { printResult } from 'autocannon' +import { program } from 'commander' import { writeJson } from 'fs-extra' -import { flushAndRunServer, killallServers, ServerInfo, setAccessTokensToServers } from '@shared/extra-utils' import { Video, VideoPrivacy } from '@shared/models' -import { registerTSPaths } from '../server/helpers/register-ts-paths' +import { createMultipleServers, doubleFollow, killallServers, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands' -registerTSPaths() - -let server: ServerInfo +let servers: PeerTubeServer[] +// First server +let server: PeerTubeServer let video: Video let threadId: number -const outfile = process.argv[2] +program + .option('-o, --outfile [outfile]', 'Outfile') + .option('--grep [string]', 'Filter tests you want to execute') + .description('Run API REST benchmark') + .parse(process.argv) + +const options = program.opts() + +const outfile = options.outfile run() .catch(err => console.error(err)) .finally(() => { - if (server) return killallServers([ server ]) + if (servers) return killallServers(servers) }) function buildAuthorizationHeader () { @@ -30,6 +38,12 @@ function buildAPHeader () { } } +function buildJSONHeader () { + return { + 'Content-Type': 'application/json' + } +} + async function run () { console.log('Preparing server...') @@ -41,7 +55,7 @@ async function run () { path: '/accounts/peertube', headers: buildAPHeader(), expecter: (body, status) => { - return status === 200 && body.startsWith('{"type":') + return status === 200 && body.startsWith('{"@context":') } }, { @@ -49,7 +63,7 @@ async function run () { path: '/videos/watch/' + video.uuid, headers: buildAPHeader(), expecter: (body, status) => { - return status === 200 && body.startsWith('{"type":"Video"') + return status === 200 && body.startsWith('{"@context":') } }, { @@ -135,10 +149,37 @@ async function run () { title: 'API - config', path: '/api/v1/config', expecter: (body, status) => { - return status === 200 && body.startsWith('{"instance":') + return status === 200 && body.startsWith('{"client":') + } + }, + { + title: 'API - views with token', + method: 'PUT', + headers: { + ...buildAuthorizationHeader(), + ...buildJSONHeader() + }, + body: JSON.stringify({ currentTime: 2 }), + path: '/api/v1/videos/' + video.uuid + '/views', + expecter: (body, status) => { + return status === 204 + } + }, + { + title: 'API - views without token', + method: 'POST', + headers: buildJSONHeader(), + body: JSON.stringify({ currentTime: 2 }), + path: '/api/v1/videos/' + video.uuid + '/views', + expecter: (body, status) => { + return status === 204 } } - ] + ].filter(t => { + if (!options.grep) return true + + return t.title.includes(options.grep) + }) const finalResult: any[] = [] @@ -149,7 +190,7 @@ async function run () { Object.assign(testResult, { title: test.title, path: test.path }) finalResult.push(testResult) - console.log(autocannon.printResult(testResult)) + console.log(printResult(testResult)) } if (outfile) await writeJson(outfile, finalResult) @@ -157,14 +198,18 @@ async function run () { function runBenchmark (options: { path: string + method?: string + body?: string headers?: { [ id: string ]: string } expecter: Function }) { - const { path, expecter, headers } = options + const { method = 'GET', path, body, expecter, headers } = options return new Promise((res, rej) => { autocannon({ url: server.url + path, + method, + body, connections: 20, headers, pipelining: 1, @@ -188,14 +233,18 @@ function runBenchmark (options: { } async function prepare () { - server = await flushAndRunServer(1, { + servers = await createMultipleServers(3, { rates_limit: { api: { max: 5_000_000 } } }) - await setAccessTokensToServers([ server ]) + server = servers[0] + + await setAccessTokensToServers(servers) + await doubleFollow(servers[0], servers[1]) + await doubleFollow(servers[0], servers[2]) const attributes = { name: 'my super video', @@ -205,7 +254,7 @@ async function prepare () { language: 'fr', privacy: VideoPrivacy.PUBLIC, support: 'please give me a coffee', - description: 'my super description'.repeat(10), + description: 'my super description\n'.repeat(10) + ' * list1\n * list 2\n * list 3', tags: [ 'tag1', 'tag2', 'tag3' ] } @@ -232,12 +281,10 @@ async function prepare () { } for (const caption of [ 'ar', 'fr', 'en', 'zh' ]) { - await server.captions.createVideoCaption({ + await server.captions.add({ language: caption, videoId: video.id, fixture: 'subtitle-good2.vtt' }) } - - return { server, video, threadId } }