]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add unit tests for PayloadSizeRule
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 5 Dec 2023 13:59:53 +0000 (14:59 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 8 Dec 2023 07:46:35 +0000 (08:46 +0100)
pdns/dnsdistdist/test-dnsdistrules_cc.cc

index b709bd48168a76e7bf1d765bcac2ff6fd20fa9c0..64cae299d3e10a5f361db5d86ad19d8f8e6d8370 100644 (file)
@@ -157,4 +157,75 @@ BOOST_AUTO_TEST_CASE(test_poolOutstandingRule) {
   BOOST_CHECK_EQUAL(pOR2.matches(&dq), false);
 }
 
+BOOST_AUTO_TEST_CASE(test_payloadSizeRule) {
+  auto dq = getDQ();
+
+  {
+    PayloadSizeRule rule("equal", dq.getData().size());
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+    BOOST_CHECK_EQUAL(rule.toString(), "payload size is equal to " + std::to_string(dq.getData().size()));
+  }
+
+  {
+    PayloadSizeRule rule("equal", dq.getData().size() + 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), false);
+  }
+
+  {
+    PayloadSizeRule rule("greater", dq.getData().size());
+    BOOST_CHECK_EQUAL(rule.matches(&dq), false);
+    BOOST_CHECK_EQUAL(rule.toString(), "payload size is greater than " + std::to_string(dq.getData().size()));
+  }
+
+  {
+    PayloadSizeRule rule("greater", dq.getData().size() - 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+  }
+
+  {
+    PayloadSizeRule rule("smaller", dq.getData().size());
+    BOOST_CHECK_EQUAL(rule.matches(&dq), false);
+    BOOST_CHECK_EQUAL(rule.toString(), "payload size is smaller than " + std::to_string(dq.getData().size()));
+  }
+
+  {
+    PayloadSizeRule rule("smaller", dq.getData().size() + 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+  }
+
+  {
+    PayloadSizeRule rule("greaterOrEqual", dq.getData().size());
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+    BOOST_CHECK_EQUAL(rule.toString(), "payload size is equal to or greater than " + std::to_string(dq.getData().size()));
+  }
+
+  {
+    PayloadSizeRule rule("greaterOrEqual", dq.getData().size() - 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+  }
+
+  {
+    PayloadSizeRule rule("greaterOrEqual", dq.getData().size() + 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), false);
+  }
+
+  {
+    PayloadSizeRule rule("smallerOrEqual", dq.getData().size());
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+    BOOST_CHECK_EQUAL(rule.toString(), "payload size is equal to or smaller than " + std::to_string(dq.getData().size()));
+  }
+
+  {
+    PayloadSizeRule rule("smallerOrEqual", dq.getData().size() + 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), true);
+  }
+
+  {
+    PayloadSizeRule rule("smallerOrEqual", dq.getData().size() - 1);
+    BOOST_CHECK_EQUAL(rule.matches(&dq), false);
+  }
+
+  BOOST_CHECK_THROW(PayloadSizeRule("invalid", 42U), std::runtime_error);
+}
+
 BOOST_AUTO_TEST_SUITE_END()