From 43ce6aa58c4a16a34dd282c5c6110ce559b52889 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Thu, 2 Apr 2020 14:39:18 +0200 Subject: [PATCH] Pass validation errors with InvalidMessage error Pass the array describing the validation errors occuring with the InvalidMessage error throw and print it to the console. --- lib/errors.js | 7 ++++++- lib/link/link.js | 10 ++++++---- test/lib/link/link.js | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/errors.js b/lib/errors.js index 45dd309a..2da6fbef 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -7,7 +7,12 @@ class CommandError extends Error { } class RequestError extends Error { } // Signal for messages that fail validation -class InvalidMessage extends Error { } +class InvalidMessage extends Error { + constructor(msg, errors) { + super(msg); + this.errors = errors || null; + } +} // Errror class for known errors occuring during startup class StartupError extends Error { } diff --git a/lib/link/link.js b/lib/link/link.js index 9d174833..6907d708 100644 --- a/lib/link/link.js +++ b/lib/link/link.js @@ -33,6 +33,10 @@ class Link { } catch (err) { if (err instanceof errors.InvalidMessage) { this.connector.close(`Invalid message: ${err.message}`); + console.error(`Invalid message on ${this.source}-${this.target} link: ${err.message}`) + if (err.errors) { + console.error(err.errors); + } } else { this.connector.emit('error', err); } @@ -57,7 +61,7 @@ class Link { */ processMessage(message) { if (!schema.message(message)) { - throw new errors.InvalidMessage("Malformed"); + throw new errors.InvalidMessage("Malformed", schema.message.errors); } let validator = this._validators.get(message.type); @@ -66,9 +70,7 @@ class Link { } if (!validator(message)) { - // TODO better logging of errors encountered validating - console.error(validator.errors); - throw new errors.InvalidMessage(`Validation failed for ${message.type}`); + throw new errors.InvalidMessage(`Validation failed for ${message.type}`, validator.errors); } let hadHandlers = this._processHandler(message); diff --git a/test/lib/link/link.js b/test/lib/link/link.js index 213e2e19..81dae963 100644 --- a/test/lib/link/link.js +++ b/test/lib/link/link.js @@ -90,7 +90,7 @@ describe("lib/link/link", function() { it("should throw on invalid message", function() { assert.throws( () => testLink.processMessage({ data: "invalid message" }), - new errors.InvalidMessage("Malformed") + { message: "Malformed" } ); }); it("should throw on message without validator", function() { @@ -102,7 +102,7 @@ describe("lib/link/link", function() { it("should throw on message failing validation", function() { assert.throws( () => testLink.processMessage({ seq: 1, type: 'simple', data: { string: 1 }}), - new errors.InvalidMessage("Validation failed for simple") + { message: "Validation failed for simple" } ); }); it("should throw on unhandled message", function() {