Add watching and views endpoints to benchmark

pull/4867/head
Chocobozzz 2022-03-18 14:52:53 +01:00
parent cc92203fe5
commit 6afc0d374c
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 42 additions and 7 deletions

View File

@ -2,8 +2,10 @@ import autocannon, { printResult } from 'autocannon'
import { program } from 'commander'
import { writeJson } from 'fs-extra'
import { Video, VideoPrivacy } from '@shared/models'
import { createSingleServer, killallServers, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
import { createMultipleServers, doubleFollow, killallServers, PeerTubeServer, setAccessTokensToServers } from '@shared/server-commands'
let servers: PeerTubeServer[]
// First server
let server: PeerTubeServer
let video: Video
let threadId: number
@ -21,7 +23,7 @@ const outfile = options.outfile
run()
.catch(err => console.error(err))
.finally(() => {
if (server) return killallServers([ server ])
if (servers) return killallServers(servers)
})
function buildAuthorizationHeader () {
@ -36,6 +38,12 @@ function buildAPHeader () {
}
}
function buildJSONHeader () {
return {
'Content-Type': 'application/json'
}
}
async function run () {
console.log('Preparing server...')
@ -143,6 +151,27 @@ async function run () {
expecter: (body, status) => {
return status === 200 && body.startsWith('{"client":')
}
},
{
title: 'API - watching',
method: 'PUT',
headers: {
...buildAuthorizationHeader(),
...buildJSONHeader()
},
body: JSON.stringify({ currentTime: 2 }),
path: '/api/v1/videos/' + video.uuid + '/watching',
expecter: (body, status) => {
return status === 204
}
},
{
title: 'API - views',
method: 'POST',
path: '/api/v1/videos/' + video.uuid + '/views',
expecter: (body, status) => {
return status === 204
}
}
].filter(t => {
if (!options.grep) return true
@ -167,14 +196,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, path, body, expecter, headers } = options
return new Promise((res, rej) => {
autocannon({
url: server.url + path,
method,
body,
connections: 20,
headers,
pipelining: 1,
@ -198,14 +231,18 @@ function runBenchmark (options: {
}
async function prepare () {
server = await createSingleServer(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',
@ -248,6 +285,4 @@ async function prepare () {
fixture: 'subtitle-good2.vtt'
})
}
return { server, video, threadId }
}