1
0
mirror of https://github.com/bitwarden/server.git synced 2024-11-24 12:35:25 +01:00
bitwarden-server/perf/load/config.js

79 lines
1.9 KiB
JavaScript

import http from "k6/http";
import { check, fail } from "k6";
import { authenticate } from "./helpers/auth.js";
const IDENTITY_URL = __ENV.IDENTITY_URL;
const API_URL = __ENV.API_URL;
const CLIENT_ID = __ENV.CLIENT_ID;
const AUTH_USERNAME = __ENV.AUTH_USER_EMAIL;
const AUTH_PASSWORD = __ENV.AUTH_USER_PASSWORD_HASH;
export const options = {
ext: {
loadimpact: {
projectID: 3639465,
name: "Config",
},
},
scenarios: {
constant_load: {
executor: "constant-arrival-rate",
rate: 1,
timeUnit: "1s", // 1 request / second
duration: "10m",
preAllocatedVUs: 5,
},
ramping_load: {
executor: "ramping-arrival-rate",
startRate: 60,
timeUnit: "1m", // 1 request / second to start
stages: [
{ duration: "30s", target: 60 },
{ duration: "2m", target: 150 },
{ duration: "1m", target: 90 },
{ duration: "2m", target: 200 },
{ duration: "2m", target: 120 },
{ duration: "1m", target: 180 },
{ duration: "30s", target: 250 },
{ duration: "30s", target: 90 },
{ duration: "30s", target: 0 },
],
preAllocatedVUs: 40,
},
},
thresholds: {
http_req_failed: ["rate<0.01"],
http_req_duration: ["p(95)<750"],
},
};
export function setup() {
return authenticate(IDENTITY_URL, CLIENT_ID, AUTH_USERNAME, AUTH_PASSWORD);
}
export default function (data) {
const params = {
headers: {
Accept: "application/json",
Authorization: `Bearer ${data.access_token}`,
"X-ClientId": CLIENT_ID,
},
tags: { name: "Config" },
};
const res = http.get(`${API_URL}/config`, params);
if (
!check(res, {
"config status is 200": (r) => r.status === 200,
})
) {
fail("config status code was *not* 200");
}
const json = res.json();
check(json, {
"config version is available": (j) => j.version !== "",
});
}