]> granicus.if.org Git - pdns/commitdiff
dns_random: verify upper bound behaviour
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 28 Aug 2019 12:11:45 +0000 (14:11 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 28 Aug 2019 12:11:45 +0000 (14:11 +0200)
pdns/test-dns_random_hh.cc

index aec678f87525bf2b0a9f69d14a4f5cbf0598dc78..8482991e4b55618d1e8745e4e289ee5566f7bb72 100644 (file)
@@ -78,6 +78,30 @@ BOOST_AUTO_TEST_CASE(test_dns_random_garbage) {
   BOOST_CHECK_THROW(dns_random_init("", true), std::runtime_error);
 }
 
+BOOST_AUTO_TEST_CASE(test_dns_random_upper_bound) {
+  ::arg().set("rng")="auto";
+  ::arg().set("entropy-source")="/dev/urandom";
+
+  dns_random_init("", true);
+
+  map<int, bool> seen;
+  for(unsigned int n=0; n < 100000; ++n) {
+    seen[dns_random(10)] = true;
+  }
+
+  BOOST_CHECK_EQUAL(seen[0], true);
+  BOOST_CHECK_EQUAL(seen[1], true);
+  BOOST_CHECK_EQUAL(seen[2], true);
+  BOOST_CHECK_EQUAL(seen[3], true);
+  BOOST_CHECK_EQUAL(seen[4], true);
+  BOOST_CHECK_EQUAL(seen[5], true);
+  BOOST_CHECK_EQUAL(seen[6], true);
+  BOOST_CHECK_EQUAL(seen[7], true);
+  BOOST_CHECK_EQUAL(seen[8], true);
+  BOOST_CHECK_EQUAL(seen[9], true);
+  BOOST_CHECK_EQUAL(seen[10], false);
+}
+
 #if defined(HAVE_GETRANDOM)
 BOOST_AUTO_TEST_CASE(test_dns_random_getrandom_average) {