Skip to content

Commit 8cc5c7e

Browse files
committed
test: add encodeCompositeMetadata tests
1 parent 877a5c7 commit 8cc5c7e

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
import {
2+
encodeCompositeMetadata,
3+
WellKnownMimeType,
4+
} from "rsocket-composite-metadata";
5+
import { readUInt24BE } from "rsocket-core";
6+
7+
describe("encodeCompositeMetadata encodes the metadata", () => {
8+
describe("when given a map", () => {
9+
it("handles WellKnownMimeType instances as keys", () => {
10+
const metadata = new Map();
11+
metadata.set(
12+
WellKnownMimeType.MESSAGE_RSOCKET_MIMETYPE,
13+
Buffer.from("test")
14+
);
15+
16+
const encoded = encodeCompositeMetadata(metadata);
17+
18+
// 122 | 128
19+
const maskedId = encoded.readUInt8(0);
20+
const length = readUInt24BE(encoded, 1);
21+
const value = encoded.slice(4, encoded.length);
22+
23+
expect(maskedId).toBe(250);
24+
expect(length).toBe(4);
25+
expect(value.length).toBe(4);
26+
expect(value.toString("utf-8")).toBe("test");
27+
});
28+
29+
it("handles WellKnownMimeType identifiers as keys", () => {
30+
const metadata = new Map();
31+
metadata.set(122, Buffer.from("test"));
32+
33+
const encoded = encodeCompositeMetadata(metadata);
34+
35+
// 122 | 128
36+
const maskedId = encoded.readUInt8(0);
37+
const length = readUInt24BE(encoded, 1);
38+
const value = encoded.slice(4, encoded.length);
39+
40+
expect(maskedId).toBe(250);
41+
expect(length).toBe(4);
42+
expect(value.length).toBe(4);
43+
expect(value.toString("utf-8")).toBe("test");
44+
});
45+
46+
it("handles custom mimetypes as keys", () => {
47+
const metadata = new Map();
48+
metadata.set("custom", Buffer.from("test"));
49+
50+
const encoded = encodeCompositeMetadata(metadata);
51+
52+
const mimeTypeLengthMinusOne = encoded.readUInt8(0);
53+
const start = 1;
54+
const end = mimeTypeLengthMinusOne + 2;
55+
const mimeType = encoded.slice(start, end);
56+
const metadataLength = readUInt24BE(encoded, mimeTypeLengthMinusOne + 2);
57+
const metadataValue = encoded.slice(encoded.length - metadataLength);
58+
59+
expect(mimeTypeLengthMinusOne).toBe(5);
60+
expect(mimeType.toString("utf-8")).toBe("custom");
61+
expect(metadataLength).toBe(4);
62+
expect(metadataValue.toString("utf-8")).toBe("test");
63+
});
64+
65+
it("handles mimetype value as function", () => {
66+
const metadata = new Map();
67+
metadata.set("custom", () => Buffer.from("test"));
68+
69+
const encoded = encodeCompositeMetadata(metadata);
70+
71+
const mimeTypeLengthMinusOne = encoded.readUInt8(0);
72+
const start = 1;
73+
const end = mimeTypeLengthMinusOne + 2;
74+
const mimeType = encoded.slice(start, end);
75+
const metadataLength = readUInt24BE(encoded, mimeTypeLengthMinusOne + 2);
76+
const metadataValue = encoded.slice(encoded.length - metadataLength);
77+
78+
expect(mimeTypeLengthMinusOne).toBe(5);
79+
expect(mimeType.toString("utf-8")).toBe("custom");
80+
expect(metadataLength).toBe(4);
81+
expect(metadataValue.toString("utf-8")).toBe("test");
82+
});
83+
});
84+
85+
describe("when given a array", () => {
86+
it("handles WellKnownMimeType instances as keys", () => {
87+
const encoded = encodeCompositeMetadata([
88+
[WellKnownMimeType.MESSAGE_RSOCKET_MIMETYPE, Buffer.from("test")],
89+
]);
90+
91+
// 122 | 128
92+
const maskedId = encoded.readUInt8(0);
93+
const length = readUInt24BE(encoded, 1);
94+
const value = encoded.slice(4, encoded.length);
95+
96+
expect(maskedId).toBe(250);
97+
expect(length).toBe(4);
98+
expect(value.length).toBe(4);
99+
expect(value.toString("utf-8")).toBe("test");
100+
});
101+
102+
it("handles WellKnownMimeType identifiers as keys", () => {
103+
const encoded = encodeCompositeMetadata([[122, Buffer.from("test")]]);
104+
105+
// 122 | 128
106+
const maskedId = encoded.readUInt8(0);
107+
const length = readUInt24BE(encoded, 1);
108+
const value = encoded.slice(4, encoded.length);
109+
110+
expect(maskedId).toBe(250);
111+
expect(length).toBe(4);
112+
expect(value.length).toBe(4);
113+
expect(value.toString("utf-8")).toBe("test");
114+
});
115+
116+
it("handles custom mimetypes as keys", () => {
117+
const encoded = encodeCompositeMetadata([
118+
["custom", Buffer.from("test")],
119+
]);
120+
121+
const mimeTypeLengthMinusOne = encoded.readUInt8(0);
122+
const start = 1;
123+
const end = mimeTypeLengthMinusOne + 2;
124+
const mimeType = encoded.slice(start, end);
125+
const metadataLength = readUInt24BE(encoded, mimeTypeLengthMinusOne + 2);
126+
const metadataValue = encoded.slice(encoded.length - metadataLength);
127+
128+
expect(mimeTypeLengthMinusOne).toBe(5);
129+
expect(mimeType.toString("utf-8")).toBe("custom");
130+
expect(metadataLength).toBe(4);
131+
expect(metadataValue.toString("utf-8")).toBe("test");
132+
});
133+
134+
it("handles mimetype value as function", () => {
135+
const encoded = encodeCompositeMetadata([
136+
["custom", () => Buffer.from("test")],
137+
]);
138+
139+
const mimeTypeLengthMinusOne = encoded.readUInt8(0);
140+
const start = 1;
141+
const end = mimeTypeLengthMinusOne + 2;
142+
const mimeType = encoded.slice(start, end);
143+
const metadataLength = readUInt24BE(encoded, mimeTypeLengthMinusOne + 2);
144+
const metadataValue = encoded.slice(encoded.length - metadataLength);
145+
146+
expect(mimeTypeLengthMinusOne).toBe(5);
147+
expect(mimeType.toString("utf-8")).toBe("custom");
148+
expect(metadataLength).toBe(4);
149+
expect(metadataValue.toString("utf-8")).toBe("test");
150+
});
151+
});
152+
});

0 commit comments

Comments
 (0)