chore: establish local platform baseline

This commit is contained in:
Codex Local
2026-08-26 06:41:54 +08:00
commit 29bdf4900f
575 changed files with 95644 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
import http from "k6/http";
import { check, sleep } from "k6";
const baseURL = __ENV.BASE_URL || "http://host.docker.internal:58080";
const accessToken = __ENV.ACCESS_TOKEN || "";
const smoke = (__ENV.PROFILE || "acceptance").toLowerCase() === "smoke";
const targetRate = Number(__ENV.RATE || (smoke ? 20 : 50));
const duration = __ENV.DURATION || (smoke ? "20s" : "30m");
export const options = {
scenarios: {
steady_read_traffic: {
executor: "constant-arrival-rate",
rate: targetRate,
timeUnit: "1s",
duration,
preAllocatedVUs: smoke ? 20 : 75,
maxVUs: smoke ? 50 : 200,
gracefulStop: "30s",
},
},
thresholds: {
http_req_failed: [smoke ? "rate<0.01" : "rate<0.001"],
http_req_duration: ["p(95)<500", "p(99)<1000"],
checks: ["rate>0.99"],
},
};
export default function () {
const ready = http.get(`${baseURL}/health/ready`, {
tags: { operation: "readiness" },
timeout: "3s",
});
check(ready, {
"readiness returns 200": (response) => response.status === 200,
"readiness dependencies are up": (response) =>
response.status === 200 && response.json("data.status") === "ready" &&
response.json("data.checks.postgres") === "up" && response.json("data.checks.redis") === "up" &&
response.json("data.checks.object_store") === "up",
});
if (accessToken) {
const households = http.get(`${baseURL}/api/v1/households`, {
headers: { Authorization: `Bearer ${accessToken}`, Accept: "application/json" },
tags: { operation: "households" },
timeout: "3s",
});
check(households, {
"authenticated household read returns 200": (response) => response.status === 200,
});
}
if (smoke) sleep(0.02);
}
+55
View File
@@ -0,0 +1,55 @@
import http from 'k6/http';
import exec from 'k6/execution';
import { check } from 'k6';
import { SharedArray } from 'k6/data';
const fixtures = new SharedArray('privacy delete fixtures', () => JSON.parse(open(__ENV.FIXTURE_FILE)));
const vus = Number(__ENV.VUS || fixtures.length);
export const options = {
scenarios: {
concurrent_privacy_deletes: {
executor: 'per-vu-iterations',
vus,
iterations: 1,
maxDuration: '30s',
gracefulStop: '5s',
},
},
thresholds: {
http_req_failed: ['rate==0'],
http_req_duration: ['p(95)<1000'],
checks: ['rate==1'],
},
};
export default function () {
const fixture = fixtures[exec.vu.idInTest - 1];
const response = http.post(
`${__ENV.API_BASE}/api/v1/subjects/${fixture.subject_id}/privacy-requests`,
JSON.stringify({
request_type: 'DELETE',
scope: {},
reason: 'synthetic concurrent privacy capacity verification',
confirmation: fixture.preferred_name,
}),
{
headers: {
Authorization: `Bearer ${__ENV.ACCESS_TOKEN}`,
'Content-Type': 'application/json',
'Idempotency-Key': `privacy-capacity-${fixture.subject_id}`,
},
tags: { name: 'POST privacy delete' },
},
);
check(response, {
'delete accepted': (r) => r.status === 202,
'request id returned': (r) => {
try {
return Boolean(r.json('data.id'));
} catch (_) {
return false;
}
},
});
}
+74
View File
@@ -0,0 +1,74 @@
import http from "k6/http";
import crypto from "k6/crypto";
import exec from "k6/execution";
import { check } from "k6";
const baseURL = __ENV.CALLBACK_URL || "http://host.docker.internal:58081";
const secret = __ENV.PROVIDER_CALLBACK_SECRET;
const fixtureText = __ENV.PROVIDER_FIXTURES || `${__ENV.CONVERSATION_ID || ""}|${__ENV.PROVIDER_TASK_REF || ""}`;
const fixtures = fixtureText.split(",").filter(Boolean).map((item) => {
const [conversationID, taskRef] = item.split("|");
return { conversationID, taskRef };
});
const smoke = (__ENV.PROFILE || "acceptance").toLowerCase() === "smoke";
const targetRate = Number(__ENV.RATE || (smoke ? 25 : 500));
const duration = __ENV.DURATION || (smoke ? "10s" : "10m");
const duplicateWindow = Number(__ENV.DUPLICATE_WINDOW || (smoke ? 100 : 300000));
const occurredAt = __ENV.OCCURRED_AT || new Date().toISOString();
if (!secret || !fixtures.length || fixtures.some((item) => !item.conversationID || !item.taskRef)) {
throw new Error("PROVIDER_CALLBACK_SECRET and valid PROVIDER_FIXTURES are required");
}
export const options = {
scenarios: {
provider_notifications: {
executor: "constant-arrival-rate",
rate: targetRate,
timeUnit: "1s",
duration,
preAllocatedVUs: smoke ? 50 : 600,
maxVUs: smoke ? 150 : 1500,
gracefulStop: "30s",
},
},
thresholds: {
http_req_failed: [smoke ? "rate<0.01" : "rate<0.001"],
http_req_duration: ["p(95)<200", "p(99)<1000"],
checks: ["rate>0.999"],
},
};
function base64URL(value) {
return value.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_");
}
export default function () {
const eventNumber = exec.scenario.iterationInTest % duplicateWindow;
const fixture = fixtures[eventNumber % fixtures.length];
const body = JSON.stringify({
provider: "mock",
event_id: `load-started-${eventNumber}`,
task_ref: fixture.taskRef,
conversation_id: fixture.conversationID,
event_type: "voice_chat.started",
status: "ACTIVE",
occurred_at: occurredAt,
});
const timestamp = new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
const digest = crypto.sha256(body, "hex");
const signature = base64URL(crypto.hmac("sha256", secret, `${timestamp}\n${digest}`, "base64"));
const response = http.post(`${baseURL}/callbacks/v1/vertc/voice-chat`, body, {
headers: {
"Content-Type": "application/json",
"X-Provider-Timestamp": timestamp,
"X-Provider-Signature": signature,
},
tags: { operation: "provider_callback" },
timeout: "3s",
});
check(response, {
"callback acknowledged": (item) => item.status === 200,
"callback response is correlated": (item) => item.status === 200 && item.body.includes('"request_id"'),
});
}