mirror of
https://github.com/bitwarden/server.git
synced 2024-11-24 12:35:25 +01:00
152 lines
3.4 KiB
JavaScript
152 lines
3.4 KiB
JavaScript
import http from "k6/http";
|
|
import { check, fail } from "k6";
|
|
import { authenticate } from "./helpers/auth.js";
|
|
import { uuidv4 } from "https://jslib.k6.io/k6-utils/1.4.0/index.js";
|
|
|
|
const IDENTITY_URL = __ENV.IDENTITY_URL;
|
|
const API_URL = __ENV.API_URL;
|
|
const CLIENT_ID = __ENV.CLIENT_ID;
|
|
const AUTH_CLIENT_ID = __ENV.AUTH_CLIENT_ID;
|
|
const AUTH_CLIENT_SECRET = __ENV.AUTH_CLIENT_SECRET;
|
|
|
|
export const options = {
|
|
ext: {
|
|
loadimpact: {
|
|
projectID: 3639465,
|
|
name: "Groups",
|
|
},
|
|
},
|
|
scenarios: {
|
|
constant_load: {
|
|
executor: "constant-arrival-rate",
|
|
rate: 30,
|
|
timeUnit: "1m", // 0.5 requests / second
|
|
duration: "10m",
|
|
preAllocatedVUs: 5,
|
|
},
|
|
ramping_load: {
|
|
executor: "ramping-arrival-rate",
|
|
startRate: 30,
|
|
timeUnit: "1m", // 0.5 requests / second to start
|
|
stages: [
|
|
{ duration: "30s", target: 30 },
|
|
{ duration: "2m", target: 75 },
|
|
{ duration: "1m", target: 60 },
|
|
{ duration: "2m", target: 100 },
|
|
{ duration: "2m", target: 90 },
|
|
{ duration: "1m", target: 120 },
|
|
{ duration: "30s", target: 150 },
|
|
{ duration: "30s", target: 60 },
|
|
{ duration: "30s", target: 0 },
|
|
],
|
|
preAllocatedVUs: 20,
|
|
},
|
|
},
|
|
thresholds: {
|
|
http_req_failed: ["rate<0.01"],
|
|
http_req_duration: ["p(95)<400"],
|
|
},
|
|
};
|
|
|
|
export function setup() {
|
|
return authenticate(
|
|
IDENTITY_URL,
|
|
CLIENT_ID,
|
|
null,
|
|
null,
|
|
AUTH_CLIENT_ID,
|
|
AUTH_CLIENT_SECRET
|
|
);
|
|
}
|
|
|
|
export default function (data) {
|
|
const params = {
|
|
headers: {
|
|
Accept: "application/json",
|
|
"Content-Type": "application/json",
|
|
Authorization: `Bearer ${data.access_token}`,
|
|
"X-ClientId": CLIENT_ID,
|
|
},
|
|
tags: { name: "Groups" },
|
|
};
|
|
|
|
let name = `Name ${uuidv4()}`;
|
|
const createPayload = {
|
|
name: name,
|
|
accessAll: true,
|
|
externalId: `External ${uuidv4()}`,
|
|
};
|
|
|
|
const createRes = http.post(
|
|
`${API_URL}/public/groups`,
|
|
JSON.stringify(createPayload),
|
|
params
|
|
);
|
|
if (
|
|
!check(createRes, {
|
|
"group create status is 200": (r) => r.status === 200,
|
|
})
|
|
) {
|
|
fail("group create status code was *not* 200");
|
|
}
|
|
|
|
const createJson = createRes.json();
|
|
|
|
if (
|
|
!check(createJson, {
|
|
"group create id is available": (j) => j.id !== "",
|
|
})
|
|
) {
|
|
fail("group create id was *not* available");
|
|
}
|
|
|
|
const id = createJson.id;
|
|
const getRes = http.get(`${API_URL}/public/groups/${id}`, params);
|
|
if (
|
|
!check(getRes, {
|
|
"group get status is 200": (r) => r.status === 200,
|
|
})
|
|
) {
|
|
fail("group get status code was *not* 200");
|
|
}
|
|
|
|
const getJson = getRes.json();
|
|
|
|
if (
|
|
!check(getJson, {
|
|
"group get name matches": (j) => j.name === name,
|
|
})
|
|
) {
|
|
fail("group get name did *not* match");
|
|
}
|
|
|
|
name = `Name ${uuidv4()}`;
|
|
const updatePayload = {
|
|
name: name,
|
|
accessAll: createPayload.accessAll,
|
|
externalId: createPayload.externalId,
|
|
};
|
|
|
|
const updateRes = http.put(
|
|
`${API_URL}/public/groups/${id}`,
|
|
JSON.stringify(updatePayload),
|
|
params
|
|
);
|
|
if (
|
|
!check(updateRes, {
|
|
"group update status is 200": (r) => r.status === 200,
|
|
})
|
|
) {
|
|
fail("group update status code was *not* 200");
|
|
}
|
|
|
|
const deleteRes = http.del(`${API_URL}/public/groups/${id}`, null, params);
|
|
if (
|
|
!check(deleteRes, {
|
|
"group delete status is 200": (r) => r.status === 200,
|
|
})
|
|
) {
|
|
fail("group delete status code was *not* 200");
|
|
}
|
|
}
|