From ddd7abb05da585bcc0bfea9d960a31e1355eed41 Mon Sep 17 00:00:00 2001 From: Martin Rubli Date: Sun, 9 Jun 2024 15:23:38 +0200 Subject: [PATCH] test: backend-test: Add more test cases for TLS monitor --- test/backend-test/test-tls.js | 149 +++++++++++++++++++++++++++++++++- 1 file changed, 146 insertions(+), 3 deletions(-) diff --git a/test/backend-test/test-tls.js b/test/backend-test/test-tls.js index 847cd1267..e67f4a625 100644 --- a/test/backend-test/test-tls.js +++ b/test/backend-test/test-tls.js @@ -3,7 +3,7 @@ const assert = require("node:assert"); const { UP } = require("../../src/util"); const { TlsMonitorType } = require("../../server/monitor-types/tls"); -test("TLS.01: HTTPS good", async () => { +test("TLS.HTTPS.good", async () => { const monitor = { hostname: "httpstat.us", port: 443, @@ -21,7 +21,7 @@ test("TLS.01: HTTPS good", async () => { assert.ok(heartbeat.msg.startsWith(`Keyword "${monitor.keyword}" contained in response`)); }); -test("TLS.02: HTTPS expired", () => { +test("TLS.HTTPS.expired", () => { const monitor = { hostname: "expired.badssl.com", port: 443, @@ -38,7 +38,7 @@ test("TLS.02: HTTPS expired", () => { (e) => e.message.includes("certificate has expired")); }); -test("TLS.03: HTTPS wrong host", () => { +test("TLS.HTTPS.wrong_host", () => { const monitor = { hostname: "wrong.host.badssl.com", port: 443, @@ -54,3 +54,146 @@ test("TLS.03: HTTPS wrong host", () => { assert.rejects((new TlsMonitorType().check(monitor, heartbeat, null)), (e) => e.message.includes("Hostname/IP does not match certificate's altnames")); }); + +test("TLS.SMTP.STARTTLS.good", async () => { + const monitor = { + hostname: "smtp.mail.yahoo.com", + port: 587, + tcpStartTls: true, + tcpStartTlsPrompt: "220 ", + tcpStartTlsCommand: String.raw`STARTTLS\n`, + tcpStartTlsResponse: "220 ", + tcpRequest: String.raw`QUIT\n`, + keyword: "221 ", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + await new TlsMonitorType().check(monitor, heartbeat, null); + assert.equal(heartbeat.status, UP); + assert.ok(heartbeat.msg.startsWith(`Keyword "${monitor.keyword}" contained in response`)); +}); + +test("TLS.SMTP.STARTTLS.invalid_prompt", async () => { + const monitor = { + hostname: "smtp.mail.yahoo.com", + port: 587, + tcpStartTls: true, + tcpStartTlsPrompt: "666 ", + tcpStartTlsCommand: String.raw`STARTTLS\n`, + tcpStartTlsResponse: "220 ", + tcpRequest: String.raw`QUIT\n`, + keyword: "221 ", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + assert.rejects((new TlsMonitorType().check(monitor, heartbeat, null)), + (e) => e.message.includes("Unexpected STARTTLS prompt")); +}); + +test("TLS.SMTP.STARTTLS.invalid_command", async () => { + const monitor = { + hostname: "smtp.mail.yahoo.com", + port: 587, + tcpStartTls: true, + tcpStartTlsPrompt: "220 ", + tcpStartTlsCommand: String.raw`CAN_I_HAZ_TLS\n`, + tcpStartTlsResponse: "220 ", + tcpRequest: String.raw`QUIT\n`, + keyword: "221 ", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + assert.rejects((new TlsMonitorType().check(monitor, heartbeat, null)), + (e) => e.message.includes("500 ")); +}); + +test("TLS.SMTP.STARTTLS.invalid_request", async () => { + const monitor = { + hostname: "smtp.mail.yahoo.com", + port: 587, + tcpStartTls: true, + tcpStartTlsPrompt: "220 ", + tcpStartTlsCommand: String.raw`STARTTLS\n`, + tcpStartTlsResponse: "220 ", + tcpRequest: String.raw`I_AM_OUT\n`, + keyword: "221 ", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + assert.rejects((new TlsMonitorType().check(monitor, heartbeat, null)), + (e) => e.message.includes("500 ")); +}); + +test("TLS.SMTP.STARTTLS.incomplete_request", async () => { + const monitor = { + hostname: "smtp.mail.yahoo.com", + port: 587, + tcpStartTls: true, + tcpStartTlsPrompt: "220 ", + tcpStartTlsCommand: String.raw`STARTTLS\n`, + tcpStartTlsResponse: "220 ", + tcpRequest: String.raw`QUIT`, // Note: Missing newline + keyword: "221 ", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + assert.rejects((new TlsMonitorType().check(monitor, heartbeat, null)), + (e) => e.message.includes("Timeout while reading request response")); +}); + +test("TLS.POP3.STARTTLS.good", async () => { + const monitor = { + hostname: "outlook.office365.com", + port: 110, + tcpStartTls: true, + tcpStartTlsPrompt: "+OK", + tcpStartTlsCommand: String.raw`STLS\r\n`, + tcpStartTlsResponse: "+OK", + tcpRequest: String.raw`QUIT\r\n`, + keyword: "+OK", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + await new TlsMonitorType().check(monitor, heartbeat, null); + assert.equal(heartbeat.status, UP); + assert.ok(heartbeat.msg.startsWith(`Keyword "${monitor.keyword}" contained in response`)); +}); + +test("TLS.IMAP4.STARTTLS.good", async () => { + const monitor = { + hostname: "outlook.office365.com", + port: 143, + tcpStartTls: true, + tcpStartTlsPrompt: "* OK", + tcpStartTlsCommand: String.raw`a001 STARTTLS\r\n`, + tcpStartTlsResponse: "a001 OK", + tcpRequest: String.raw`a002 CAPABILITY\r\n`, + keyword: "* CAPABILITY", + interval: 3, + }; + const heartbeat = { + status: null, + msg: null, + }; + await new TlsMonitorType().check(monitor, heartbeat, null); + assert.equal(heartbeat.status, UP); + assert.ok(heartbeat.msg.startsWith(`Keyword "${monitor.keyword}" contained in response`)); +});