58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
|
import { tap, expect } from '@push.rocks/tapbundle';
|
||
|
import { Http01MemoryHandler } from '../ts/handlers/Http01MemoryHandler.js';
|
||
|
|
||
|
tap.test('Http01MemoryHandler serves in-memory challenges and cleans up', async () => {
|
||
|
const handler = new Http01MemoryHandler();
|
||
|
const token = 'testtoken';
|
||
|
const keyAuth = 'keyAuthValue';
|
||
|
const webPath = `/.well-known/acme-challenge/${token}`;
|
||
|
const challenge = { type: 'http-01', token, keyAuthorization: keyAuth, webPath };
|
||
|
|
||
|
// Prepare challenge (store in memory)
|
||
|
await handler.prepare(challenge);
|
||
|
|
||
|
// Serve existing challenge without next()
|
||
|
const req1: any = { url: webPath };
|
||
|
const res1: any = {
|
||
|
statusCode: 0,
|
||
|
headers: {} as Record<string, string>,
|
||
|
body: '',
|
||
|
setHeader(name: string, value: string) { this.headers[name] = value; },
|
||
|
end(body?: string) { this.body = body || ''; },
|
||
|
};
|
||
|
handler.handleRequest(req1, res1);
|
||
|
expect(res1.statusCode).toEqual(200);
|
||
|
expect(res1.body).toEqual(keyAuth);
|
||
|
expect(res1.headers['content-type']).toEqual('text/plain');
|
||
|
|
||
|
// Cleanup challenge (remove from memory)
|
||
|
await handler.cleanup(challenge);
|
||
|
|
||
|
// Serve after cleanup without next() should give 404
|
||
|
const req2: any = { url: webPath };
|
||
|
const res2: any = {
|
||
|
statusCode: 0,
|
||
|
headers: {} as Record<string, string>,
|
||
|
body: '',
|
||
|
setHeader(name: string, value: string) { this.headers[name] = value; },
|
||
|
end(body?: string) { this.body = body || ''; },
|
||
|
};
|
||
|
handler.handleRequest(req2, res2);
|
||
|
expect(res2.statusCode).toEqual(404);
|
||
|
|
||
|
// Serve after cleanup with next() should call next
|
||
|
const req3: any = { url: webPath };
|
||
|
let nextCalled = false;
|
||
|
const next = () => { nextCalled = true; };
|
||
|
const res3: any = {
|
||
|
statusCode: 0,
|
||
|
headers: {} as Record<string, string>,
|
||
|
body: '',
|
||
|
setHeader(name: string, value: string) { this.headers[name] = value; },
|
||
|
end(body?: string) { this.body = body || ''; },
|
||
|
};
|
||
|
handler.handleRequest(req3, res3, next);
|
||
|
expect(nextCalled).toEqual(true);
|
||
|
});
|
||
|
|
||
|
export default tap.start();
|