summaryrefslogtreecommitdiffstats
path: root/test/backend-test/monitor-conditions/test-evaluator.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/backend-test/monitor-conditions/test-evaluator.js')
-rw-r--r--test/backend-test/monitor-conditions/test-evaluator.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/backend-test/monitor-conditions/test-evaluator.js b/test/backend-test/monitor-conditions/test-evaluator.js
new file mode 100644
index 0000000..da7c7fa
--- /dev/null
+++ b/test/backend-test/monitor-conditions/test-evaluator.js
@@ -0,0 +1,46 @@
+const test = require("node:test");
+const assert = require("node:assert");
+const { ConditionExpressionGroup, ConditionExpression, LOGICAL } = require("../../../server/monitor-conditions/expression.js");
+const { evaluateExpressionGroup, evaluateExpression } = require("../../../server/monitor-conditions/evaluator.js");
+
+test("Test evaluateExpression", async (t) => {
+ const expr = new ConditionExpression("record", "contains", "mx1.example.com");
+ assert.strictEqual(true, evaluateExpression(expr, { record: "mx1.example.com" }));
+ assert.strictEqual(false, evaluateExpression(expr, { record: "mx2.example.com" }));
+});
+
+test("Test evaluateExpressionGroup with logical AND", async (t) => {
+ const group = new ConditionExpressionGroup([
+ new ConditionExpression("record", "contains", "mx1."),
+ new ConditionExpression("record", "contains", "example.com", LOGICAL.AND),
+ ]);
+ assert.strictEqual(true, evaluateExpressionGroup(group, { record: "mx1.example.com" }));
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "mx1." }));
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "example.com" }));
+});
+
+test("Test evaluateExpressionGroup with logical OR", async (t) => {
+ const group = new ConditionExpressionGroup([
+ new ConditionExpression("record", "contains", "example.com"),
+ new ConditionExpression("record", "contains", "example.org", LOGICAL.OR),
+ ]);
+ assert.strictEqual(true, evaluateExpressionGroup(group, { record: "example.com" }));
+ assert.strictEqual(true, evaluateExpressionGroup(group, { record: "example.org" }));
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "example.net" }));
+});
+
+test("Test evaluateExpressionGroup with nested group", async (t) => {
+ const group = new ConditionExpressionGroup([
+ new ConditionExpression("record", "contains", "mx1."),
+ new ConditionExpressionGroup([
+ new ConditionExpression("record", "contains", "example.com"),
+ new ConditionExpression("record", "contains", "example.org", LOGICAL.OR),
+ ]),
+ ]);
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "mx1." }));
+ assert.strictEqual(true, evaluateExpressionGroup(group, { record: "mx1.example.com" }));
+ assert.strictEqual(true, evaluateExpressionGroup(group, { record: "mx1.example.org" }));
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "example.com" }));
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "example.org" }));
+ assert.strictEqual(false, evaluateExpressionGroup(group, { record: "mx1.example.net" }));
+});