103 lines
5.0 KiB
TypeScript
103 lines
5.0 KiB
TypeScript
import { MessagePackHubProtocol } from "../Microsoft.AspNetCore.SignalR.Client.TS/MessagePackHubProtocol"
|
|
import { MessageType, InvocationMessage, CompletionMessage, ResultMessage } from "../Microsoft.AspNetCore.SignalR.Client.TS/IHubProtocol"
|
|
|
|
describe("MessageHubProtocol", () => {
|
|
it("can write/read Invocation message", () => {
|
|
let invocation = <InvocationMessage>{
|
|
type: MessageType.Invocation,
|
|
invocationId: "123",
|
|
target: "myMethod",
|
|
nonblocking: true,
|
|
arguments: [42, true, "test", ["x1", "y2"], null]
|
|
};
|
|
|
|
let protocol = new MessagePackHubProtocol();
|
|
var parsedMessages = protocol.parseMessages(protocol.writeMessage(invocation));
|
|
expect(parsedMessages).toEqual([invocation]);
|
|
});
|
|
|
|
([
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
|
|
0x94, 0x03, 0xa3, 0x61, 0x62, 0x63, 0x01, 0xa3, 0x45, 0x72, 0x72],
|
|
{
|
|
type: MessageType.Completion,
|
|
invocationId: "abc",
|
|
error: "Err",
|
|
result: null
|
|
} as CompletionMessage ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
|
|
0x94, 0x03, 0xa3, 0x61, 0x62, 0x63, 0x03, 0xa2, 0x4f, 0x4b ],
|
|
{
|
|
type: MessageType.Completion,
|
|
invocationId: "abc",
|
|
error: null,
|
|
result: "OK"
|
|
} as CompletionMessage ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
0x93, 0x03, 0xa3, 0x61, 0x62, 0x63, 0x02 ],
|
|
{
|
|
type: MessageType.Completion,
|
|
invocationId: "abc",
|
|
error: null,
|
|
result: null
|
|
} as CompletionMessage ]
|
|
] as [[number[], CompletionMessage]]).forEach(([payload, expected_message]) =>
|
|
it("can read Completion message", () => {
|
|
let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
|
|
expect(messages).toEqual([expected_message]);
|
|
}));
|
|
|
|
([
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
0x93, 0x02, 0xa3, 0x61, 0x62, 0x63, 0x08 ],
|
|
{
|
|
type: MessageType.Result,
|
|
invocationId: "abc",
|
|
item: 8
|
|
} as ResultMessage ]
|
|
] as [[number[], CompletionMessage]]).forEach(([payload, expected_message]) =>
|
|
it("can read Result message", () => {
|
|
let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
|
|
expect(messages).toEqual([expected_message]);
|
|
}));
|
|
|
|
([
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], new Error("Invalid payload.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90 ], new Error("Invalid payload.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc2 ], new Error("Invalid payload.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x91, 0x05 ], new Error("Invalid message type.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x91, 0xa1, 0x78 ], new Error("Invalid message type.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x91, 0x01 ], new Error("Invalid payload for Invocation message.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x91, 0x02 ], new Error("Invalid payload for stream Result message.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x92, 0x03, 0xa0 ], new Error("Invalid payload for Completion message.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x94, 0x03, 0xa0, 0x02, 0x00 ], new Error("Invalid payload for Completion message.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x93, 0x03, 0xa0, 0x01 ], new Error("Invalid payload for Completion message.") ],
|
|
[ [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x93, 0x03, 0xa0, 0x03 ], new Error("Invalid payload for Completion message.") ]
|
|
] as [[number[], Error]]).forEach(([payload, expected_error]) =>
|
|
it("throws for invalid messages", () => {
|
|
expect(() => new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer))
|
|
.toThrow(expected_error);
|
|
}));
|
|
|
|
it("can read multiple messages", () => {
|
|
let payload = [
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
|
0x93, 0x02, 0xa3, 0x61, 0x62, 0x63, 0x08,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
|
|
0x94, 0x03, 0xa3, 0x61, 0x62, 0x63, 0x03, 0xa2, 0x4f, 0x4b ];
|
|
let messages = new MessagePackHubProtocol().parseMessages(new Uint8Array(payload).buffer);
|
|
expect(messages).toEqual([
|
|
{
|
|
type: MessageType.Result,
|
|
invocationId: "abc",
|
|
item: 8
|
|
} as ResultMessage,
|
|
{
|
|
type: MessageType.Completion,
|
|
invocationId: "abc",
|
|
error: null,
|
|
result: "OK"
|
|
} as CompletionMessage
|
|
]);
|
|
});
|
|
}); |