Files
ShieldAI/scripts/load-test/services/spamshield.js
Michael Freno d2097d8930 Fix spamshield k6 test to match actual API routes FRE-4929
- Rewrote spamshield.js to test real endpoints: POST /sms/classify,
  POST /number/reputation, POST /call/analyze, POST /feedback,
  GET /history, GET /statistics
- Added proper P99 latency thresholds per classification type:
  SMS classify < 150ms, number reputation < 300ms, call analyze < 400ms
- Previous version tested non-existent endpoints (/classify, /health, /blocklist/check)

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-05-09 10:06:33 -04:00

76 lines
2.5 KiB
JavaScript

import http from 'k6/http';
import { check, group } from 'k6';
import { Rate, Trend } from 'k6/metrics';
import { getBaseUrl, defaultThresholds, checkResponse, randomString } from '../lib/common.js';
const errorRate = new Rate('errors');
const smsClassifyP99 = new Trend('sms_classify_p99');
const numberReputationP99 = new Trend('number_reputation_p99');
const callAnalyzeP99 = new Trend('call_analyze_p99');
export const options = {
thresholds: {
...defaultThresholds(400).thresholds,
sms_classify_p99: ['p(99)<150'],
number_reputation_p99: ['p(99)<300'],
call_analyze_p99: ['p(99)<400'],
},
};
const BASE_URL = getBaseUrl();
const AUTH_TOKEN = __ENV.API_TOKEN || 'test-token';
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${AUTH_TOKEN}`,
};
export default function () {
group('SMS Text Classification', function () {
const payload = JSON.stringify({
text: `Is this message a spam attempt? ${randomString(16)}`,
});
const res = http.post(`${BASE_URL}/spamshield/sms/classify`, payload, { headers });
checkResponse(res, 200);
smsClassifyP99.add(res.timings.duration);
});
group('Number Reputation Check', function () {
const payload = JSON.stringify({
phoneNumber: `+1555${String(Math.floor(1000000 + Math.random() * 9000000))}`,
});
const res = http.post(`${BASE_URL}/spamshield/number/reputation`, payload, { headers });
checkResponse(res, 200);
numberReputationP99.add(res.timings.duration);
});
group('Call Analysis', function () {
const payload = JSON.stringify({
phoneNumber: `+1555${String(Math.floor(1000000 + Math.random() * 9000000))}`,
callTime: new Date().toISOString(),
});
const res = http.post(`${BASE_URL}/spamshield/call/analyze`, payload, { headers });
checkResponse(res, 200);
callAnalyzeP99.add(res.timings.duration);
});
group('Spam Feedback', function () {
const payload = JSON.stringify({
phoneNumber: `+1555${String(Math.floor(1000000 + Math.random() * 9000000))}`,
isSpam: false,
});
const res = http.post(`${BASE_URL}/spamshield/feedback`, payload, { headers });
check(res, { 'feedback status is 201': (r) => r.status === 201 });
});
group('Spam History', function () {
const res = http.get(`${BASE_URL}/spamshield/history?limit=10`, { headers });
checkResponse(res, 200);
});
group('Spam Statistics', function () {
const res = http.get(`${BASE_URL}/spamshield/statistics`, { headers });
checkResponse(res, 200);
});
}