-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* WIP: Credit, handle credit response from server * Add tests for credit * Remove unused credit response * Fix for npm check * Add test for credit and credit request, missing last expect for now * Add credit number check test through http api * Changes for review, still wip * Increase timeout * Skipping consumer test to debug * Skipping credit test to debug * Increase eventually time * Move connection close in test and increase timeout * Debug credit * Remove only test in credit * Skip of credit test * Fix wrong function removal in util * Removal of console logs * Removal of unused function * fix minimal code coherence typos * Fix pr comments --------- Co-authored-by: magne <magnello@coders51.com> Co-authored-by: GPad <gpadovani@gmail.com> Co-authored-by: Alberto Barrilà <alberto.barrila@gmail.com>
- Loading branch information
1 parent
0bb38e7
commit 8159eea
Showing
9 changed files
with
237 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import { AbstractRequest } from "./abstract_request" | ||
import { DataWriter } from "./data_writer" | ||
|
||
export type CreditRequestParams = { | ||
subscriptionId: number | ||
credit: number | ||
} | ||
|
||
export class CreditRequest extends AbstractRequest { | ||
readonly key = 0x09 | ||
readonly responseKey = -1 | ||
|
||
constructor(private params: CreditRequestParams) { | ||
super() | ||
} | ||
|
||
protected writeContent(writer: DataWriter): void { | ||
writer.writeUInt8(this.params.subscriptionId) | ||
writer.writeUInt16(this.params.credit) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import { BufferDataWriter } from "../requests/abstract_request" | ||
import { RawCreditResponse } from "./raw_response" | ||
import { Response } from "./response" | ||
|
||
export class CreditResponse implements Response { | ||
static key = 0x8009 as const | ||
|
||
constructor(private response: RawCreditResponse) { | ||
if (this.response.key !== CreditResponse.key) { | ||
throw new Error(`Unable to create ${CreditResponse.name} from data of type ${this.response.key}`) | ||
} | ||
} | ||
|
||
toBuffer(): Buffer { | ||
const dw = new BufferDataWriter(Buffer.alloc(1024), 4) | ||
dw.writeUInt16(CreditResponse.key) | ||
dw.writeUInt16(1) | ||
dw.writeUInt16(this.response.responseCode) | ||
dw.writeUInt8(this.response.subscriptionId) | ||
dw.writePrefixSize() | ||
return dw.toBuffer() | ||
} | ||
|
||
get key() { | ||
return this.response.key | ||
} | ||
|
||
get correlationId(): number { | ||
return -1 | ||
} | ||
|
||
get code(): number { | ||
return -1 | ||
} | ||
|
||
get ok(): boolean { | ||
return true | ||
} | ||
|
||
get responseCode(): number { | ||
return this.response.responseCode | ||
} | ||
|
||
get subscriptionId(): number { | ||
return this.response.subscriptionId | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import { expect } from "chai" | ||
import { Connection, connect } from "../../src" | ||
import { Rabbit } from "../support/rabbit" | ||
import { eventually } from "../support/util" | ||
import { Offset } from "../../src/requests/subscribe_request" | ||
import { Message } from "../../src/producer" | ||
|
||
describe("credit management", () => { | ||
const rabbit = new Rabbit() | ||
const streamName = "credit-test-stream" | ||
let connection: Connection | ||
|
||
beforeEach(async () => { | ||
connection = await connect({ | ||
hostname: "localhost", | ||
port: 5552, | ||
username: "rabbit", | ||
password: "rabbit", | ||
vhost: "/", | ||
frameMax: 0, // not used | ||
heartbeat: 0, // not used | ||
listeners: { | ||
metadata_update: (_data) => console.info("Subscribe server error"), | ||
}, | ||
}) | ||
await rabbit.createStream(streamName) | ||
}) | ||
|
||
afterEach(async () => { | ||
await connection.close() | ||
await rabbit.deleteStream(streamName) | ||
}) | ||
|
||
// This test can only run locally, the HTTP API gives different results in GitHub CI (https://coders51.slack.com/archives/C03E263HH38/p1681374600592829) | ||
it.skip(`the number of credit remain stable after have consumed some messages`, async () => { | ||
const receivedMessages: Buffer[] = [] | ||
const howMany = 2 | ||
const messages = Array.from(Array(howMany).keys()).map((_) => Buffer.from("hello")) | ||
const publisher = await connection.declarePublisher({ stream: streamName }) | ||
for (const m of messages) { | ||
await publisher.send(m) | ||
} | ||
|
||
await connection.declareConsumer({ stream: streamName, offset: Offset.first() }, (message: Message) => | ||
receivedMessages.push(message.content) | ||
) | ||
|
||
await eventually(async () => { | ||
expect(receivedMessages).eql(messages) | ||
const allConsumerCredits = await rabbit.returnConsumersCredits() | ||
expect(allConsumerCredits[0].allCredits[0]).eql(10) | ||
}, 5000) | ||
}).timeout(20000) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.