mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
feat: Add WebSocket functionality to server.
This commit is contained in:
committed by
Joachim Van Herwegen
parent
e39e7963eb
commit
59487410b1
54
test/unit/server/WebSocketServerFactory.test.ts
Normal file
54
test/unit/server/WebSocketServerFactory.test.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import type { Server } from 'http';
|
||||
import request from 'supertest';
|
||||
import WebSocket from 'ws';
|
||||
import { ExpressHttpServerFactory } from '../../../src/server/ExpressHttpServerFactory';
|
||||
import { HttpHandler } from '../../../src/server/HttpHandler';
|
||||
import type { HttpRequest } from '../../../src/server/HttpRequest';
|
||||
import type { HttpResponse } from '../../../src/server/HttpResponse';
|
||||
import { WebSocketHandler } from '../../../src/server/WebSocketHandler';
|
||||
import { WebSocketServerFactory } from '../../../src/server/WebSocketServerFactory';
|
||||
|
||||
class SimpleHttpHandler extends HttpHandler {
|
||||
public async handle(input: { request: HttpRequest; response: HttpResponse }): Promise<void> {
|
||||
input.response.end('SimpleHttpHandler');
|
||||
}
|
||||
}
|
||||
|
||||
class SimpleWebSocketHandler extends WebSocketHandler {
|
||||
public host: any;
|
||||
|
||||
public async handle(input: { webSocket: WebSocket; upgradeRequest: HttpRequest }): Promise<void> {
|
||||
input.webSocket.send('SimpleWebSocketHandler');
|
||||
input.webSocket.close();
|
||||
this.host = input.upgradeRequest.headers.host;
|
||||
}
|
||||
}
|
||||
|
||||
describe('SimpleWebSocketHandler', (): void => {
|
||||
let webSocketHandler: SimpleWebSocketHandler;
|
||||
let server: Server;
|
||||
|
||||
beforeAll(async(): Promise<void> => {
|
||||
const httpHandler = new SimpleHttpHandler();
|
||||
webSocketHandler = new SimpleWebSocketHandler();
|
||||
const httpServerFactory = new ExpressHttpServerFactory(httpHandler);
|
||||
const webSocketServerFactory = new WebSocketServerFactory(httpServerFactory, webSocketHandler);
|
||||
server = webSocketServerFactory.startServer(5555);
|
||||
});
|
||||
|
||||
afterAll(async(): Promise<void> => {
|
||||
server.close();
|
||||
});
|
||||
|
||||
it('has a functioning HTTP interface.', async(): Promise<void> => {
|
||||
const result = await request(server).get('/').expect('SimpleHttpHandler');
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
|
||||
it('has a functioning WebSockets interface.', async(): Promise<void> => {
|
||||
const client = new WebSocket('ws://localhost:5555');
|
||||
const text = await new Promise((resolve): any => client.on('message', resolve));
|
||||
expect(text).toBe('SimpleWebSocketHandler');
|
||||
expect(webSocketHandler.host).toBe('localhost:5555');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user