Add test cases for checking monitor endpoint resolution

This commit is contained in:
om-3004 committed 2024-10-16 21:12:51 +05:30
1 parent 2c85828144
commit d1e65f53ba
2 files changed
+58 -5

No files matched your search

+4 -5
View File
@@ -274,7 +274,6 @@ const createMonitor = async (req, res, next) => {
* @returns {Object} The response object with a success status, a message, and the resolution result.
* @throws {Error} If there is an error during the process, especially if there is a validation error (422).
*/
const checkEndpointResolution = async (req, res, next) => {
try {
let { monitorURL } = req.query;
@@ -284,12 +283,12 @@ const checkEndpointResolution = async (req, res, next) => {
// Remove the trailing slash if it exists
monitorURL = monitorURL.endsWith('/') ? monitorURL.slice(0, -1) : monitorURL;
dns.setServers(['8.8.8.8', '1.1.1.1']);// Google, Cloudfare
dns.resolve(monitorURL, (error) => {
console.log("Inside .resolve");
if (error) {
next(handleError(error, SERVICE_NAME, "checkEndpointResolution"));
return ;
return res.status(400).json({
success: false,
msg: `DNS resolution failed`,
});
}
return res.status(200).json({
success: true,
@@ -6,6 +6,7 @@ const {
getMonitorsAndSummaryByTeamId,
getMonitorsByTeamId,
createMonitor,
checkEndpointResolution,
deleteMonitor,
deleteAllMonitors,
editMonitor,
@@ -21,6 +22,7 @@ const monitorController = proxyquire("../../controllers/monitorController", {
"ssl-checker": sslCheckerStub,
});
const logger = require("../../utils/logger");
const dns = require("dns");
const SERVICE_NAME = "monitorController";
describe("Monitor Controller - getAllMonitors", () => {
@@ -473,6 +475,58 @@ describe("Monitor Controller - createMonitor", () => {
});
});
describe('checkEndpointResolution', () => {
let dnsResolveStub;
beforeEach(() => {
req = { query: { monitorURL: 'example.com' } };
res = { status: sinon.stub().returnsThis(), json: sinon.stub() };
next = sinon.stub();
dnsResolveStub = sinon.stub(dns, 'resolve');
});
afterEach(() => {
dnsResolveStub.restore();
});
it('should resolve the URL successfully', async () => {
dnsResolveStub.callsFake((monitorURL, callback) => callback(null));
await checkEndpointResolution(req, res, next);
expect(res.status.calledWith(200)).to.be.true;
expect(res.json.calledWith({
success: true,
msg: 'URL resolved successfully',
})).to.be.true;
expect(next.called).to.be.false;
});
it("should return a 400 error message if DNS resolution fails", async () => {
const dnsError = new Error("DNS resolution failed");
dnsResolveStub.callsFake((monitorURL, callback) => callback(dnsError));
await checkEndpointResolution(req, res, next);
expect(res.status.calledOnceWith(400)).to.be.true;
expect(res.json.calledOnceWith({
success: false,
msg: "DNS resolution failed",
})).to.be.true;
expect(next.notCalled).to.be.true;
});
it("should remove the trailing slash and resolve the URL successfully", async () => {
req.query.monitorURL = 'http://example.com/'; // URL with a trailing slash
dnsResolveStub.callsFake((monitorURL, callback) => callback(null));
await checkEndpointResolution(req, res, next);
expect(res.status.calledWith(200)).to.be.true;
expect(res.json.calledWith({
success: true,
msg: 'URL resolved successfully',
})).to.be.true;
expect(next.called).to.be.false;
});
it("should call next with an error if an exception is thrown", async () => {
req.query = {}; // Missing monitorURL will cause an error
await checkEndpointResolution(req, res, next);
expect(next.calledOnce).to.be.true;
const error = next.getCall(0).args[0];
expect(error).to.be.an.instanceOf(Error);
});
});
describe("Monitor Controller - deleteMonitor", () => {
beforeEach(() => {
req = {