forked from Prompt-Hash-Stellar/prompt-hash
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimulation.test.ts
More file actions
61 lines (55 loc) · 1.64 KB
/
Copy pathsimulation.test.ts
File metadata and controls
61 lines (55 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { describe, it, expect } from "vitest";
import challengeHandler from "../../api/auth/challenge";
// Mocking the response and request objects
const createMockRes = () => {
let _status = 200;
let _json = {};
const res = {
status(code: number) {
_status = code;
return this;
},
json(data: any) {
_json = data;
return this;
},
get statusCode() { return _status; },
get data() { return _json; }
};
return res;
};
describe("Production Hardening Simulation", () => {
const address = "GBXCC5SVXCI2XCDXCDXCDXCDXCDXCDXCDXCDXCDXCDXCDXCDXCDXCD";
const promptId = "1";
it("should trigger rate limiting after multiple requests from same IP", async () => {
process.env.CHALLENGE_TOKEN_SECRET = "test-secret";
const ip = "1.2.3.4";
// First 10 requests should succeed (assuming limit is 10/min)
for (let i = 0; i < 10; i++) {
const req = {
method: "POST",
headers: { "x-forwarded-for": ip },
body: { address, promptId },
socket: {}
};
const res = createMockRes();
// @ts-ignore
await challengeHandler(req, res);
expect(res.statusCode).toBe(200);
}
// 11th request should fail with 429
const req = {
method: "POST",
headers: { "x-forwarded-for": ip },
body: { address, promptId },
socket: {}
};
const res = createMockRes();
// @ts-ignore
await challengeHandler(req, res);
expect(res.statusCode).toBe(429);
// @ts-ignore
expect(res.data.error).toContain("Too many requests");
console.log("Successfully triggered rate limit (429) as expected.");
});
});