Skip to content

Commit c6d6c47

Browse files
committed
Merge branch 'test/composite-metadata-tests' into 1.0.x-alpha
2 parents c5113bb + 8cc5c7e commit c6d6c47

File tree

4 files changed

+221
-0
lines changed

4 files changed

+221
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`encodeWellKnownMetadataHeader encodes the header as per spec 1`] = `
4+
Array [
5+
133,
6+
0,
7+
0,
8+
16,
9+
]
10+
`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import {
2+
encodeAndAddWellKnownMetadata,
3+
WellKnownMimeType,
4+
} from "rsocket-composite-metadata";
5+
import { readUInt24BE } from "rsocket-core";
6+
7+
describe("encodeWellKnownMetadataHeader", () => {
8+
it("encodes the header as per spec when WellKnownMimeType given", () => {
9+
const metadata = encodeAndAddWellKnownMetadata(
10+
Buffer.from([]),
11+
WellKnownMimeType.MESSAGE_RSOCKET_MIMETYPE,
12+
Buffer.from("test")
13+
);
14+
15+
// 122 | 128
16+
const maskedId = metadata.readUInt8(0);
17+
const length = readUInt24BE(metadata, 1);
18+
const value = metadata.slice(4, metadata.length);
19+
20+
expect(maskedId).toBe(250);
21+
expect(length).toBe(4);
22+
expect(value.length).toBe(4);
23+
expect(value.toString("utf-8")).toBe("test");
24+
});
25+
26+
it("encodes the header as per spec when identifier given", () => {
27+
const metadata = encodeAndAddWellKnownMetadata(
28+
Buffer.from([]),
29+
// MESSAGE_RSOCKET_MIMETYPE
30+
122,
31+
Buffer.from("test")
32+
);
33+
34+
// 122 | 128
35+
const maskedId = metadata.readUInt8(0);
36+
const length = readUInt24BE(metadata, 1);
37+
const value = metadata.slice(4, metadata.length);
38+
39+
expect(maskedId).toBe(250);
40+
expect(length).toBe(4);
41+
expect(value.length).toBe(4);
42+
expect(value.toString("utf-8")).toBe("test");
43+
});
44+
});
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+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {
2+
encodeWellKnownMetadataHeader,
3+
WellKnownMimeType,
4+
} from "rsocket-composite-metadata";
5+
6+
describe("encodeWellKnownMetadataHeader", () => {
7+
it("encodes the header as per spec", () => {
8+
const header = encodeWellKnownMetadataHeader(
9+
WellKnownMimeType.APPLICATION_JSON.identifier,
10+
WellKnownMimeType.APPLICATION_JSON.toString().length
11+
);
12+
const actual = header.toJSON().data;
13+
expect(actual).toMatchSnapshot();
14+
});
15+
});

0 commit comments

Comments
 (0)