Skip to content

Commit 7a59414

Browse files
authored
Connecting to non AMQP server should fail (#78)
* Set timeout between connect and connected * keep timeout if heartbeat is enabled * enable tcp keepalive if heartbeats are disabled
1 parent dba5781 commit 7a59414

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

src/amqp-socket-client.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,18 @@ export class AMQPClient extends AMQPBaseClient {
5353
writable: true,
5454
enumerable: false // hide it from console.log etc.
5555
})
56+
// enable socket read timeout during connection establishment
57+
socket.setTimeout((this.heartbeat || 60) * 1000)
58+
// enable TCP keepalive if AMQP heartbeats are disabled
59+
if (this.heartbeat === 0) socket.setKeepAlive(true, 60)
5660
return new Promise((resolve, reject) => {
61+
socket.on('timeout', () => reject(new AMQPError("timeout", this)))
5762
socket.on('error', (err) => reject(new AMQPError(err.message, this)))
58-
this.connectPromise = [resolve, reject]
63+
const onConnect = (conn : AMQPBaseClient) => {
64+
socket.setTimeout(this.heartbeat * 1000) // reset timeout if heartbeats are disabled
65+
resolve(conn)
66+
}
67+
this.connectPromise = [onConnect, reject]
5968
})
6069
}
6170

test-browser/websocket.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,3 +663,8 @@ test("raises when channelMax is reached", async () => {
663663
const ch1 = await conn.channel(1)
664664
await expect(ch1.basicQos(10)).resolves.toBeUndefined()
665665
}, 20_000)
666+
667+
test('should fail to connect to an AMQP port', async () => {
668+
const amqp = new AMQPWebSocketClient("ws://127.0.0.1:5672/ws/amqp")
669+
await expect(amqp.connect()).rejects.toThrow()
670+
})

test/test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,3 +673,8 @@ test('can update-secret', async () => {
673673
const conn = await amqp.connect()
674674
await expect(conn.updateSecret("foobar", "no reason")).resolves.toBeUndefined()
675675
})
676+
677+
test('should fail to connect to HTTP', async () => {
678+
const amqp = new AMQPClient("amqp://127.0.0.1:15672?heartbeat=1")
679+
await expect(amqp.connect()).rejects.toThrow()
680+
})

0 commit comments

Comments
 (0)