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(); |