Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
icebob committed Sep 11, 2017
1 parent 3495b63 commit 54d84ec
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 44 deletions.
12 changes: 6 additions & 6 deletions src/cachers/redis.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ class RedisCacher extends BaseCacher {
Redis = require("ioredis");
} catch(err) {
/* istanbul ignore next */
this.broker.fatal("The 'ioredis' package is missing! Please install it with 'npm install ioredis --save' command!", err, true);
this.broker.fatal("The 'ioredis' package is missing. Please install it with 'npm install ioredis --save' command.", err, true);
}

this.client = new Redis(this.opts.redis);
this.client.on("connect", () => {
/* istanbul ignore next */
this.logger.info("Redis cacher connected!");
this.logger.info("Redis cacher connected.");
});

this.client.on("error", (err) => {
Expand Down Expand Up @@ -98,7 +98,7 @@ class RedisCacher extends BaseCacher {
try {
return JSON.parse(data);
} catch (err) {
this.logger.error("Redis result parse error!", err, data);
this.logger.error("Redis result parse error.", err, data);
}
}
return null;
Expand Down Expand Up @@ -139,7 +139,7 @@ class RedisCacher extends BaseCacher {
this.logger.debug(`DELETE ${key}`);
return this.client.del(this.prefix + key).catch(err => {
/* istanbul ignore next */
this.logger.error("Redis `del` error!", key, err);
this.logger.error("Redis `del` error.", key, err);
});
}

Expand All @@ -154,7 +154,7 @@ class RedisCacher extends BaseCacher {
* @memberOf Cacher
*/
clean(match = "*") {
match = self.prefix + match.replace(/\*\*/g, "*");
match = this.prefix + match.replace(/\*\*/g, "*");
this.logger.debug(`CLEAN ${match}`);
let self = this;
let scanDel = function (cursor, cb) {
Expand Down Expand Up @@ -189,7 +189,7 @@ class RedisCacher extends BaseCacher {
scanDel(0, (err) => {
/* istanbul ignore next */
if (err) {
this.logger.error("Redis `scanDel` error!", match, err);
this.logger.error("Redis `scanDel` error.", match, err);
}
});

Expand Down
2 changes: 1 addition & 1 deletion src/context.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ class Context {

// Max calling level check to avoid calling loops
if (this.broker.options.maxCallLevel > 0 && this.level >= this.broker.options.maxCallLevel) {
return Promise.reject(new MaxCallLevelError(this.broker.nodeID, { level: this.level, action: actionName }));
return Promise.reject(new MaxCallLevelError(this.broker.nodeID, this.level));
}

return this.broker.call(actionName, params, opts);
Expand Down
19 changes: 14 additions & 5 deletions src/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -225,23 +225,32 @@ class MaxCallLevelError extends MoleculerError {
* Creates an instance of MaxCallLevelError.
*
* @param {String} nodeID
* @param {any} data
* @param {Number} level
*
* @memberOf MaxCallLevelError
*/
constructor(nodeID, data) {
super(`Request level is reached the limit on '${nodeID}' node.`, 500, null, data);
constructor(nodeID, level) {
super(`Request level is reached the limit (${level}) on '${nodeID}' node.`, 500, null, { level });
this.retryable = false;
}
}

/**
* Custom Moleculer Error class
* Custom Moleculer Error class for Service schema errors
*
* @class ServiceSchemaError
* @extends {Error}
*/
class ServiceSchemaError extends ExtendableError {
class ServiceSchemaError extends MoleculerError {
/**
* Creates an instance of ServiceSchemaError.
*
* @param {String} msg
* @memberof ServiceSchemaError
*/
constructor(msg) {
super(msg, 500, null);
}
}

/**
Expand Down
8 changes: 4 additions & 4 deletions src/service-broker.js
Original file line number Diff line number Diff line change
Expand Up @@ -737,15 +737,15 @@ class ServiceBroker {
const epList = this.registry.getActionEndpoints(actionName);
if (!epList) {
this.logger.warn(`Service '${actionName}' is not registered.`);
return Promise.reject(new E.ServiceNotFoundError(actionName, this.broker.nodeID));
return Promise.reject(new E.ServiceNotFoundError(actionName, this.nodeID));
}

// Get the next available endpoint
const endpoint = epList.next();
if (!endpoint) {
const errMsg = `Service '${actionName}' is not available.`;
this.logger.warn(errMsg);
return Promise.reject(new E.ServiceNotAvailable(actionName, this.broker.nodeID));
return Promise.reject(new E.ServiceNotAvailable(actionName, this.nodeID));
}
return endpoint;
}
Expand Down Expand Up @@ -831,7 +831,7 @@ class ServiceBroker {
const epList = this.registry.getActionEndpoints(actionName);
if (epList == null) {
this.logger.warn(`Service '${actionName}' is not registered.`);
return Promise.reject(new E.ServiceNotFoundError(actionName, this.broker.nodeID));
return Promise.reject(new E.ServiceNotFoundError(actionName, this.nodeID));
}
}
}
Expand Down Expand Up @@ -961,7 +961,7 @@ class ServiceBroker {
let actions = this.registry.getActionEndpoints(actionName);
if (actions == null || actions.localEndpoint == null) {
this.logger.warn(`Service '${actionName}' is not registered locally.`);
return Promise.reject(new E.ServiceNotFoundError(actionName, this.broker.nodeID));
return Promise.reject(new E.ServiceNotFoundError(actionName, this.nodeID));
}

// Get local endpoint
Expand Down
2 changes: 1 addition & 1 deletion test/unit/context.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ describe("Test call method", () => {
expect(broker.call).toHaveBeenCalledTimes(0);
expect(err).toBeInstanceOf(MaxCallLevelError);
expect(err.code).toBe(500);
expect(err.data.action).toBe("posts.find");
expect(err.data).toEqual({ level: 5 });
});
});
});
Expand Down
31 changes: 17 additions & 14 deletions test/unit/errors.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,26 +61,26 @@ describe("Test Errors", () => {
});

it("test ServiceNotFoundError", () => {
let err = new errors.ServiceNotFoundError("posts.find");
let err = new errors.ServiceNotFoundError("posts.find", "node-2");
expect(err).toBeDefined();
expect(err).toBeInstanceOf(Error);
expect(err).toBeInstanceOf(errors.ServiceNotFoundError);
expect(err.code).toBe(404);
expect(err.name).toBe("ServiceNotFoundError");
expect(err.message).toBe("Service 'posts.find' is not found!");
expect(err.data).toEqual({ action: "posts.find" });
expect(err.message).toBe("Service 'posts.find' is not found on 'node-2' node.");
expect(err.data).toEqual({ action: "posts.find", nodeID: "node-2" });
expect(err.retryable).toBe(false);
});

it("test ServiceNotAvailable", () => {
let err = new errors.ServiceNotAvailable("posts.find");
let err = new errors.ServiceNotAvailable("posts.find", "node-2");
expect(err).toBeDefined();
expect(err).toBeInstanceOf(Error);
expect(err).toBeInstanceOf(errors.ServiceNotAvailable);
expect(err.code).toBe(404);
expect(err.name).toBe("ServiceNotAvailable");
expect(err.message).toBe("Service 'posts.find' is not available!");
expect(err.data).toEqual({ action: "posts.find" });
expect(err.message).toBe("Service 'posts.find' is not available on 'node-2' node.");
expect(err.data).toEqual({ action: "posts.find", nodeID: "node-2" });
expect(err.retryable).toBe(false);
});

Expand All @@ -91,7 +91,7 @@ describe("Test Errors", () => {
expect(err).toBeInstanceOf(errors.ServiceNotAvailable);
expect(err.code).toBe(404);
expect(err.name).toBe("ServiceNotAvailable");
expect(err.message).toBe("Service 'posts.find' is not available on 'server-2' node!");
expect(err.message).toBe("Service 'posts.find' is not available on 'server-2' node.");
expect(err.data).toEqual({ action: "posts.find", nodeID: "server-2" });
expect(err.retryable).toBe(false);
});
Expand All @@ -104,7 +104,7 @@ describe("Test Errors", () => {
expect(err).toBeInstanceOf(errors.RequestTimeoutError);
expect(err.code).toBe(504);
expect(err.name).toBe("RequestTimeoutError");
expect(err.message).toBe("Request timed out when call 'posts.find' action on 'server-2' node!");
expect(err.message).toBe("Request is timed out when call 'posts.find' action on 'server-2' node.");
expect(err.data.nodeID).toBe("server-2");
expect(err.retryable).toBe(true);
});
Expand All @@ -117,7 +117,7 @@ describe("Test Errors", () => {
expect(err).toBeInstanceOf(errors.RequestSkippedError);
expect(err.code).toBe(514);
expect(err.name).toBe("RequestSkippedError");
expect(err.message).toBe("Calling 'posts.find' is skipped because timeout reached on 'server-3' node!");
expect(err.message).toBe("Calling 'posts.find' is skipped because timeout reached on 'server-3' node.");
expect(err.data.action).toBe("posts.find");
expect(err.data.nodeID).toBe("server-3");
expect(err.retryable).toBe(false);
Expand All @@ -139,25 +139,28 @@ describe("Test Errors", () => {
});

it("test MaxCallLevelError", () => {
let err = new errors.MaxCallLevelError({ level: 10 });
let err = new errors.MaxCallLevelError("server-2", 10);
expect(err).toBeDefined();
expect(err).toBeInstanceOf(Error);
expect(err).toBeInstanceOf(errors.MoleculerError);
expect(err).toBeInstanceOf(errors.MaxCallLevelError);
expect(err.code).toBe(500);
expect(err.name).toBe("MaxCallLevelError");
expect(err.message).toBe("Request level is reached the limit!");
expect(err.message).toBe("Request level is reached the limit (10) on 'server-2' node.");
expect(err.data).toEqual({ level: 10 });
expect(err.retryable).toBe(false);
});

it("test ServiceSchemaError", () => {
let err = new errors.ServiceSchemaError("Invalid schema");
let err = new errors.ServiceSchemaError("Invalid schema def.");
expect(err).toBeDefined();
expect(err).toBeInstanceOf(Error);
expect(err).toBeInstanceOf(errors.ServiceSchemaError);
expect(err.name).toBe("ServiceSchemaError");
expect(err.message).toBe("Invalid schema");
expect(err.message).toBe("Invalid schema def.");
expect(err.code).toBe(500);
expect(err.type).toBeNull();
expect(err.data).toBeUndefined();
});

it("test ProtocolVersionMismatchError", () => {
Expand All @@ -167,7 +170,7 @@ describe("Test Errors", () => {
expect(err).toBeInstanceOf(errors.ProtocolVersionMismatchError);
expect(err.code).toBe(500);
expect(err.name).toBe("ProtocolVersionMismatchError");
expect(err.message).toBe("Protocol version mismatch!");
expect(err.message).toBe("Protocol version mismatch.");
expect(err.data).toEqual({ nodeID: "server-2", actual: "2", received: "1" });
expect(err.retryable).toBe(false);
});
Expand Down
24 changes: 12 additions & 12 deletions test/unit/service-broker.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1155,8 +1155,8 @@ describe("Test broker._findNextActionEndpoint", () => {
return broker._findNextActionEndpoint("posts.noaction").then(protectReject).catch(err => {
expect(err).toBeDefined();
expect(err).toBeInstanceOf(ServiceNotFoundError);
expect(err.message).toBe("Service 'posts.noaction' is not found!");
expect(err.data).toEqual({ action: "posts.noaction" });
expect(err.message).toBe("Service 'posts.noaction' is not found on 'node-1234' node.");
expect(err.data).toEqual({ action: "posts.noaction", nodeID: broker.nodeID });
});
});

Expand All @@ -1165,16 +1165,16 @@ describe("Test broker._findNextActionEndpoint", () => {
return broker._findNextActionEndpoint("posts.noHandler", {}).then(protectReject).catch(err => {
expect(err).toBeDefined();
expect(err).toBeInstanceOf(ServiceNotAvailable);
expect(err.message).toBe("Service 'posts.noHandler' is not available!");
expect(err.data).toEqual({ action: "posts.noHandler" });
expect(err.message).toBe("Service 'posts.noHandler' is not available on 'node-1234' node.");
expect(err.data).toEqual({ action: "posts.noHandler", nodeID: broker.nodeID });
});
});

it("should reject if no action on node", () => {
return broker._findNextActionEndpoint("posts.noHandler", { nodeID: "node-123"}).then(protectReject).catch(err => {
expect(err).toBeDefined();
expect(err).toBeInstanceOf(ServiceNotFoundError);
expect(err.message).toBe("Service 'posts.noHandler' is not found on 'node-123' node!");
expect(err.message).toBe("Service 'posts.noHandler' is not found on 'node-123' node.");
expect(err.data).toEqual({ action: "posts.noHandler", nodeID: "node-123" });
});
});
Expand Down Expand Up @@ -1371,8 +1371,8 @@ describe("Test broker.callWithoutBalancer", () => {
return broker.callWithoutBalancer("posts.noaction", {}).then(protectReject).catch(err => {
expect(err).toBeDefined();
expect(err).toBeInstanceOf(ServiceNotFoundError);
expect(err.message).toBe("Service 'posts.noaction' is not found!");
expect(err.data).toEqual({ action: "posts.noaction" });
expect(err.message).toBe("Service 'posts.noaction' is not found on 'node-1234' node.");
expect(err.data).toEqual({ action: "posts.noaction", nodeID: broker.nodeID });
});
});

Expand Down Expand Up @@ -1778,8 +1778,8 @@ describe("Test broker._handleRemoteRequest", () => {
return broker._handleRemoteRequest(ctx).then(protectReject).catch(err => {
expect(err).toBeDefined();
expect(err).toBeInstanceOf(ServiceNotFoundError);
expect(err.message).toBe("Service 'posts.find' is not found!");
expect(err.data).toEqual({ action: "posts.find", nodeID: undefined });
expect(err.message).toBe("Service 'posts.find' is not found on 'node-1234' node.");
expect(err.data).toEqual({ action: "posts.find", nodeID: "node-1234" });

expect(broker._localCall).toHaveBeenCalledTimes(0);
});
Expand All @@ -1794,8 +1794,8 @@ describe("Test broker._handleRemoteRequest", () => {
return broker._handleRemoteRequest(ctx).then(protectReject).catch(err => {
expect(err).toBeDefined();
expect(err).toBeInstanceOf(ServiceNotFoundError);
expect(err.message).toBe("Service 'posts.find' is not found!");
expect(err.data).toEqual({ action: "posts.find", nodeID: undefined });
expect(err.message).toBe("Service 'posts.find' is not found on 'node-1234' node.");
expect(err.data).toEqual({ action: "posts.find", nodeID: "node-1234" });

expect(broker._localCall).toHaveBeenCalledTimes(0);
});
Expand Down Expand Up @@ -1897,7 +1897,7 @@ describe("Test broker._callErrorHandler", () => {
it("should convert Promise.TimeoutError to RequestTimeoutError", () => {
return broker._callErrorHandler(new Promise.TimeoutError, ctx, endpoint, {}).then(protectReject).catch(err => {
expect(err).toBeInstanceOf(RequestTimeoutError);
expect(err.message).toBe("Request timed out when call 'user.create' action on 'server-2' node!");
expect(err.message).toBe("Request is timed out when call 'user.create' action on 'server-2' node.");
expect(broker.call).toHaveBeenCalledTimes(0);
});
});
Expand Down
2 changes: 1 addition & 1 deletion test/unit/transit.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ describe("Test Transit.messageHandler", () => {
//transit.deserialize = jest.fn(() => null);
expect(() => {
transit.messageHandler("EVENT");
}).toThrow("Missing packet!");
}).toThrow("Missing packet.");

//transit.deserialize.mockReset();
});
Expand Down

0 comments on commit 54d84ec

Please sign in to comment.