]>
Commit | Line | Data |
---|---|---|
78cb2bd0 | 1 | #define BOOST_TEST_DYN_LINK |
2 | #define BOOST_TEST_NO_MAIN | |
e59c5996 | 3 | |
34eb951c | 4 | // Disable this code for gcc 4.8 and lower |
4b587bc5 | 5 | #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ > 8) || !__GNUC__ |
9c4701ec | 6 | |
7 | #ifdef HAVE_CONFIG_H | |
e59c5996 | 8 | #include "config.h" |
870a0fe4 | 9 | #endif |
78cb2bd0 | 10 | #include <boost/test/unit_test.hpp> |
11 | #include <boost/assign/std/map.hpp> | |
fa8fd4d2 | 12 | |
78cb2bd0 | 13 | #include <boost/accumulators/statistics/median.hpp> |
14 | #include <boost/accumulators/statistics/mean.hpp> | |
15 | #include <boost/accumulators/accumulators.hpp> | |
16 | #include <boost/accumulators/statistics.hpp> | |
17 | ||
05739b0e | 18 | #include "arguments.hh" |
78cb2bd0 | 19 | #include "dns_random.hh" |
20 | #include "namespaces.hh" | |
21 | ||
e59c5996 | 22 | |
78cb2bd0 | 23 | using namespace boost; |
24 | using namespace boost::accumulators; | |
25 | ||
26 | typedef accumulator_set< | |
27 | double | |
28 | , stats<boost::accumulators::tag::median(with_p_square_quantile), | |
232f0877 CH |
29 | boost::accumulators::tag::mean(immediate) |
30 | > | |
78cb2bd0 | 31 | > acc_t; |
32 | ||
33 | ||
34 | ||
35 | BOOST_AUTO_TEST_SUITE(test_dns_random_hh) | |
36 | ||
809137d7 | 37 | BOOST_AUTO_TEST_CASE(test_dns_random_auto_average) { |
e59c5996 | 38 | |
05739b0e RG |
39 | ::arg().set("rng")="auto"; |
40 | ::arg().set("entropy-source")="/dev/urandom"; | |
e59c5996 | 41 | |
05739b0e | 42 | dns_random_init("", true); |
e59c5996 | 43 | |
78cb2bd0 | 44 | acc_t acc; |
45 | ||
78cb2bd0 | 46 | for(unsigned int n=0; n < 100000; ++n) { |
47 | acc(dns_random(100000)/100000.0); | |
48 | } | |
49 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
50 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
e59c5996 | 51 | |
78cb2bd0 | 52 | // please add covariance tests, chi-square, Kolmogorov-Smirnov |
53 | } | |
54 | ||
809137d7 | 55 | BOOST_AUTO_TEST_CASE(test_dns_random_urandom_average) { |
05739b0e RG |
56 | |
57 | ::arg().set("rng")="urandom"; | |
58 | ::arg().set("entropy-source")="/dev/urandom"; | |
59 | ||
60 | dns_random_init("", true); | |
61 | ||
62 | acc_t acc; | |
63 | ||
64 | for(unsigned int n=0; n < 100000; ++n) { | |
65 | acc(dns_random(100000)/100000.0); | |
66 | } | |
67 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
68 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
69 | ||
70 | // please add covariance tests, chi-square, Kolmogorov-Smirnov | |
71 | } | |
72 | ||
809137d7 | 73 | BOOST_AUTO_TEST_CASE(test_dns_random_garbage) { |
05739b0e RG |
74 | |
75 | ::arg().set("rng")="garbage"; | |
76 | ::arg().set("entropy-source")="/dev/urandom"; | |
77 | ||
78 | BOOST_CHECK_THROW(dns_random_init("", true), std::runtime_error); | |
79 | } | |
80 | ||
0abdd3fb PD |
81 | BOOST_AUTO_TEST_CASE(test_dns_random_upper_bound) { |
82 | ::arg().set("rng")="auto"; | |
83 | ::arg().set("entropy-source")="/dev/urandom"; | |
84 | ||
85 | dns_random_init("", true); | |
86 | ||
87 | map<int, bool> seen; | |
88 | for(unsigned int n=0; n < 100000; ++n) { | |
89 | seen[dns_random(10)] = true; | |
90 | } | |
91 | ||
92 | BOOST_CHECK_EQUAL(seen[0], true); | |
93 | BOOST_CHECK_EQUAL(seen[1], true); | |
94 | BOOST_CHECK_EQUAL(seen[2], true); | |
95 | BOOST_CHECK_EQUAL(seen[3], true); | |
96 | BOOST_CHECK_EQUAL(seen[4], true); | |
97 | BOOST_CHECK_EQUAL(seen[5], true); | |
98 | BOOST_CHECK_EQUAL(seen[6], true); | |
99 | BOOST_CHECK_EQUAL(seen[7], true); | |
100 | BOOST_CHECK_EQUAL(seen[8], true); | |
101 | BOOST_CHECK_EQUAL(seen[9], true); | |
102 | BOOST_CHECK_EQUAL(seen[10], false); | |
103 | } | |
104 | ||
05739b0e | 105 | #if defined(HAVE_GETRANDOM) |
809137d7 | 106 | BOOST_AUTO_TEST_CASE(test_dns_random_getrandom_average) { |
05739b0e RG |
107 | |
108 | ::arg().set("rng")="getrandom"; | |
109 | ::arg().set("entropy-source")="/dev/urandom"; | |
110 | ||
111 | dns_random_init("", true); | |
112 | ||
113 | acc_t acc; | |
114 | ||
115 | for(unsigned int n=0; n < 100000; ++n) { | |
116 | acc(dns_random(100000)/100000.0); | |
117 | } | |
118 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
119 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
120 | ||
121 | // please add covariance tests, chi-square, Kolmogorov-Smirnov | |
122 | } | |
123 | #endif | |
124 | ||
125 | #if defined(HAVE_ARC4RANDOM) | |
809137d7 | 126 | BOOST_AUTO_TEST_CASE(test_dns_random_getrandom_average) { |
05739b0e RG |
127 | |
128 | ::arg().set("rng")="arc4random"; | |
129 | ::arg().set("entropy-source")="/dev/urandom"; | |
130 | ||
131 | dns_random_init("", true); | |
132 | ||
133 | acc_t acc; | |
134 | ||
135 | for(unsigned int n=0; n < 100000; ++n) { | |
136 | acc(dns_random(100000)/100000.0); | |
137 | } | |
138 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
139 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
140 | ||
141 | // please add covariance tests, chi-square, Kolmogorov-Smirnov | |
142 | } | |
143 | #endif | |
144 | ||
145 | #if defined(HAVE_RANDOMBYTES_STIR) | |
809137d7 | 146 | BOOST_AUTO_TEST_CASE(test_dns_random_sodium_average) { |
05739b0e RG |
147 | |
148 | ::arg().set("rng")="sodium"; | |
149 | ::arg().set("entropy-source")="/dev/urandom"; | |
150 | ||
151 | dns_random_init("", true); | |
152 | ||
153 | acc_t acc; | |
154 | ||
155 | for(unsigned int n=0; n < 100000; ++n) { | |
156 | acc(dns_random(100000)/100000.0); | |
157 | } | |
158 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
159 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
160 | ||
161 | // please add covariance tests, chi-square, Kolmogorov-Smirnov | |
162 | } | |
163 | #endif | |
164 | ||
165 | #if defined(HAVE_RAND_BYTES) | |
809137d7 | 166 | BOOST_AUTO_TEST_CASE(test_dns_random_openssl_average) { |
05739b0e RG |
167 | |
168 | ::arg().set("rng")="openssl"; | |
169 | ::arg().set("entropy-source")="/dev/urandom"; | |
170 | ||
171 | dns_random_init("", true); | |
172 | ||
173 | acc_t acc; | |
174 | ||
175 | for(unsigned int n=0; n < 100000; ++n) { | |
176 | acc(dns_random(100000)/100000.0); | |
177 | } | |
178 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
179 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
180 | ||
181 | // please add covariance tests, chi-square, Kolmogorov-Smirnov | |
182 | } | |
183 | #endif | |
184 | ||
185 | #if defined(HAVE_KISS_RNG) | |
809137d7 | 186 | BOOST_AUTO_TEST_CASE(test_dns_random_kiss_average) { |
05739b0e RG |
187 | |
188 | ::arg().set("rng")="kiss"; | |
189 | ::arg().set("entropy-source")="/dev/urandom"; | |
190 | ||
191 | dns_random_init("", true); | |
192 | ||
193 | acc_t acc; | |
194 | ||
195 | for(unsigned int n=0; n < 100000; ++n) { | |
196 | acc(dns_random(100000)/100000.0); | |
197 | } | |
198 | BOOST_CHECK_CLOSE(0.5, median(acc), 2.0); // within 2% | |
199 | BOOST_CHECK_CLOSE(0.5, mean(acc), 2.0); | |
200 | ||
201 | // please add covariance tests, chi-square, Kolmogorov-Smirnov | |
202 | } | |
203 | #endif | |
e59c5996 | 204 | |
205 | ||
78cb2bd0 | 206 | BOOST_AUTO_TEST_SUITE_END() |
e59c5996 | 207 | |
4d68b3b1 | 208 | #endif |