Simplify WebSocket keepalive logic

This commit is contained in:
Fedor Indutny 2023-06-06 17:36:38 -07:00 committed by GitHub
parent adc8513f41
commit 7abd2280bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 88 additions and 81 deletions

View file

@ -68,6 +68,7 @@ describe('WebSocket-Resource', () => {
// actual test
new WebSocketResource(socket as WebSocket, {
name: 'test',
handleRequest(request: any) {
assert.strictEqual(request.verb, 'PUT');
assert.strictEqual(request.path, '/some/path');
@ -106,7 +107,9 @@ describe('WebSocket-Resource', () => {
});
// actual test
const resource = new WebSocketResource(socket as WebSocket);
const resource = new WebSocketResource(socket as WebSocket, {
name: 'test',
});
const promise = resource.sendRequest({
verb: 'PUT',
path: '/some/path',
@ -134,14 +137,18 @@ describe('WebSocket-Resource', () => {
sinon.stub(socket, 'close').callsFake(() => done());
const resource = new WebSocketResource(socket as WebSocket);
const resource = new WebSocketResource(socket as WebSocket, {
name: 'test',
});
resource.close();
});
it('force closes the connection', function test(done) {
const socket = new FakeSocket();
const resource = new WebSocketResource(socket as WebSocket);
const resource = new WebSocketResource(socket as WebSocket, {
name: 'test',
});
resource.close();
resource.addEventListener('close', () => done());
@ -164,37 +171,21 @@ describe('WebSocket-Resource', () => {
});
new WebSocketResource(socket as WebSocket, {
name: 'test',
keepalive: { path: '/v1/keepalive' },
});
this.clock.next();
});
it('uses / as a default path', function test(done) {
const socket = new FakeSocket();
sinon.stub(socket, 'sendBytes').callsFake(data => {
const message = Proto.WebSocketMessage.decode(data);
assert.strictEqual(message.type, Proto.WebSocketMessage.Type.REQUEST);
assert.strictEqual(message.request?.verb, 'GET');
assert.strictEqual(message.request?.path, '/');
done();
});
new WebSocketResource(socket as WebSocket, {
keepalive: true,
});
this.clock.next();
});
it('optionally disconnects if no response', function thisNeeded1(done) {
const socket = new FakeSocket();
sinon.stub(socket, 'close').callsFake(() => done());
new WebSocketResource(socket as WebSocket, {
keepalive: true,
name: 'test',
keepalive: { path: '/' },
});
// One to trigger send
@ -210,7 +201,8 @@ describe('WebSocket-Resource', () => {
sinon.stub(socket, 'close').callsFake(() => done());
new WebSocketResource(socket as WebSocket, {
keepalive: true,
name: 'test',
keepalive: { path: '/' },
});
// Just skip one hour immediately
@ -237,7 +229,8 @@ describe('WebSocket-Resource', () => {
});
const resource = new WebSocketResource(socket as WebSocket, {
keepalive: true,
name: 'test',
keepalive: { path: '/' },
});
setTimeout(() => {