Skip to content

Commit 67b3ac2

Browse files
committed
Processing the extensions
Signed-off-by: Fabio José <[email protected]>
1 parent 7024876 commit 67b3ac2

File tree

2 files changed

+50
-2
lines changed

2 files changed

+50
-2
lines changed

lib/bindings/http/receiver_binary_0_2.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ setter_reflections[Constants.BINARY_HEADERS_02.TYPE] = {
2222
name : "type",
2323
parser : (v) => v
2424
};
25+
setter_reflections[Constants.BINARY_HEADERS_02.SPEC_VERSION] = {
26+
name : "specversion",
27+
parser : (v) => "0.2"
28+
};
2529
setter_reflections[Constants.BINARY_HEADERS_02.SOURCE] = {
2630
name : "source",
2731
parser: (v) => v
@@ -102,6 +106,7 @@ Receiver.prototype.parse = function(payload, headers) {
102106
// Clone and low case all headers names
103107
var sanity_headers = Commons.sanity_and_clone(headers);
104108

109+
var processed_headers = [];
105110
var cloudevent = new Cloudevent(Spec02);
106111
for(header in setter_reflections) {
107112
// dont worry, check() have seen what was required or not
@@ -111,16 +116,31 @@ Receiver.prototype.parse = function(payload, headers) {
111116

112117
// invoke the setter function
113118
cloudevent[setter_name](parser_fn(sanity_headers[header]));
119+
120+
// to use ahead, for extensions processing
121+
processed_headers.push(header);
114122
}
115123
}
116124

117125
// Parses the payload
118-
var parsedPayload =
126+
var parsed_payload =
119127
parser_by_type[sanity_headers[Constants.HEADER_CONTENT_TYPE]]
120128
.parse(payload);
121129

130+
// Every unprocessed header should be an extension
131+
Array.from(Object.keys(sanity_headers))
132+
.filter(value => !processed_headers.includes(value))
133+
.filter(value =>
134+
value.startsWith(Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX))
135+
.map(extension =>
136+
extension.substring(Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX.length)
137+
).forEach(extension =>
138+
cloudevent.addExtension(extension,
139+
sanity_headers[Constants.BINARY_HEADERS_02.EXTENSIONS_PREFIX+extension])
140+
);
141+
122142
// Sets the data
123-
cloudevent.data(parsedPayload);
143+
cloudevent.data(parsed_payload);
124144

125145
// Checks the event spec
126146
cloudevent.format();

test/bindings/http/receiver_binary_0_2_tests.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,34 @@ describe("HTTP Transport Binding Binary Receiver for CloudEvents v0.2", () => {
353353
expect(actual)
354354
.to.be.an("object");
355355

356+
expect(actual)
357+
.to.have.property("format");
358+
});
359+
360+
it("Should accept 'extension1'", () => {
361+
// setup
362+
var extension1 = "mycuston-ext1";
363+
var payload = {
364+
"data" : "dataString"
365+
};
366+
var attributes = {
367+
"ce-type" : "type",
368+
"ce-specversion" : "0.2",
369+
"ce-source" : "source",
370+
"ce-id" : "id",
371+
"ce-time" : "2019-06-16T11:42:00Z",
372+
"ce-schemaurl" : "http://schema.registry/v1",
373+
"Content-Type" : "application/json",
374+
"ce-extension1" : extension1
375+
};
376+
377+
// act
378+
var actual = receiver.parse(payload, attributes);
379+
var actualExtensions = actual.getExtensions();
380+
381+
// assert
382+
expect(actualExtensions["extension1"])
383+
.to.equal(extension1);
356384
});
357385
});
358386
});

0 commit comments

Comments
 (0)