mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 23:04:52 +09:00
Fix message validation for request responses
Fix the validation loging for sending responses to requests not functioning due to the message data property being passed incorrectly to the validator.
This commit is contained in:
1 parent
6eef4bd300
commit
e8405cbf77
2 files changed
+25
-3
No files matched your search
@@ -207,12 +207,13 @@ class Request extends Message {
|
||||
response = {};
|
||||
}
|
||||
|
||||
if (!this._responseValidator({ seq: 0, type: this.responseType, response })) {
|
||||
let data = { ...response, seq: message.seq };
|
||||
if (!this._responseValidator({ seq: 0, type: this.responseType, data })) {
|
||||
logger.error(JSON.stringify(this._responseValidator.errors, null, 4));
|
||||
throw new Error(`Validation failed responding to ${this.requestType}`);
|
||||
}
|
||||
|
||||
link.connector.send(this.responseType, { ...response, seq: message.seq });
|
||||
link.connector.send(this.responseType, data);
|
||||
|
||||
}).catch(err => {
|
||||
if (!(err instanceof libErrors.RequestError)) {
|
||||
|
||||
@@ -20,6 +20,9 @@ describe("lib/link/messages", function() {
|
||||
requestProperties: {
|
||||
"test": { type: "string" },
|
||||
},
|
||||
responseProperties: {
|
||||
"test": { type: "string" },
|
||||
},
|
||||
});
|
||||
|
||||
describe("constructor", function() {
|
||||
@@ -63,7 +66,24 @@ describe("lib/link/messages", function() {
|
||||
});
|
||||
});
|
||||
it("should implicitly send an empty object on empty return", async function() {
|
||||
handlerResult = undefined;
|
||||
let emptyRequest = new libLink.Request({
|
||||
type: "empty",
|
||||
links: ["source-target"],
|
||||
});
|
||||
emptyRequest.attach(testTargetLink, async(message) => {});
|
||||
testTargetLink._handlers.get("empty_request")({ seq: 2 });
|
||||
let result = await new Promise(resolve => {
|
||||
testTargetLink.connector.send = (type, data) => resolve({ type, data });
|
||||
});
|
||||
assert.deepEqual(result, {
|
||||
type: "empty_response",
|
||||
data: {
|
||||
seq: 2,
|
||||
},
|
||||
});
|
||||
});
|
||||
it("should validate response from handler", async function() {
|
||||
handlerResult = { test: 12 };
|
||||
testTargetLink._handlers.get("test_request")({ seq: 2 });
|
||||
let result = await new Promise(resolve => {
|
||||
testTargetLink.connector.send = (type, data) => resolve({ type, data });
|
||||
@@ -71,6 +91,7 @@ describe("lib/link/messages", function() {
|
||||
assert.deepEqual(result, {
|
||||
type: "test_response",
|
||||
data: {
|
||||
error: "Validation failed responding to test_request",
|
||||
seq: 2,
|
||||
},
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user