Skip to content

Commit db2d874

Browse files
ngbrownbaelter
authored andcommitted
Set client as closed when socket closes
1 parent 48542b6 commit db2d874

4 files changed

Lines changed: 28 additions & 2 deletions

File tree

src/amqp-socket-client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ export class AMQPClient extends AMQPBaseClient {
8383
conn.on('connect', () => {
8484
conn.on('error', (err) => this.onerror(new AMQPError(err.message, this)))
8585
conn.on('close', (hadError: boolean) => {
86-
if (!hadError && !this.closed) this.onerror(new AMQPError("Socket closed", this))
86+
const clientClosed = this.closed
87+
this.closed = true
88+
if (!hadError && !clientClosed) this.onerror(new AMQPError("Socket closed", this))
8789
})
8890
})
8991
return conn

src/amqp-websocket-client.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ export class AMQPWebSocketClient extends AMQPBaseClient {
5757
socket.addEventListener('open', () => {
5858
socket.addEventListener('error', (ev: Event) => this.onerror(new AMQPError(ev.toString(), this)))
5959
socket.addEventListener('close', (ev: CloseEvent) => {
60-
if (!ev.wasClean && !this.closed) this.onerror(new AMQPError(`connection not cleanly closed (${ev.code})`, this))
60+
const clientClosed = this.closed
61+
this.closed = true
62+
if (!ev.wasClean && !clientClosed) this.onerror(new AMQPError(`connection not cleanly closed (${ev.code})`, this))
6163
})
6264
socket.send(new Uint8Array([65, 77, 81, 80, 0, 0, 9, 1]))
6365
})

test-browser/websocket.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,17 @@ test('connection error raises on publish', async () => {
213213
await expect(q.publish("foobar")).rejects.toThrow()
214214
})
215215

216+
test('closed socket closes client', async () => {
217+
const amqp = getNewClient()
218+
await amqp.connect()
219+
const socket = amqp["socket"]
220+
assert(socket, "Socket must be created")
221+
const closed = new Promise((resolve) => socket.addEventListener('close', resolve))
222+
socket.close()
223+
await closed
224+
expect(amqp.closed).toBe(true)
225+
})
226+
216227
test('wait for publish confirms', async () => {
217228
const amqp = getNewClient()
218229
const conn = await amqp.connect()

test/test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,17 @@ test('connection error raises on publish', async () => {
218218
await expect(q.publish("foobar")).rejects.toThrow()
219219
})
220220

221+
test('closed socket closes client', async () => {
222+
const amqp = getNewClient()
223+
await amqp.connect()
224+
const socket = amqp["socket"]
225+
assert(socket, "Socket must be created")
226+
const closed = new Promise((resolve) => socket.on('close', resolve))
227+
socket.destroy()
228+
await closed
229+
expect(amqp.closed).toBe(true)
230+
})
231+
221232
test('wait for publish confirms', async () => {
222233
const amqp = getNewClient()
223234
const conn = await amqp.connect()

0 commit comments

Comments
 (0)