1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard
5*3f982cf4SFabien Sanglard #include "discovery/mdns/mdns_random.h"
6*3f982cf4SFabien Sanglard
7*3f982cf4SFabien Sanglard #include "gmock/gmock.h"
8*3f982cf4SFabien Sanglard #include "gtest/gtest.h"
9*3f982cf4SFabien Sanglard
10*3f982cf4SFabien Sanglard namespace openscreen {
11*3f982cf4SFabien Sanglard namespace discovery {
12*3f982cf4SFabien Sanglard
13*3f982cf4SFabien Sanglard namespace {
14*3f982cf4SFabien Sanglard constexpr int kIterationCount = 100;
15*3f982cf4SFabien Sanglard }
16*3f982cf4SFabien Sanglard
TEST(MdnsRandomTest,InitialQueryDelay)17*3f982cf4SFabien Sanglard TEST(MdnsRandomTest, InitialQueryDelay) {
18*3f982cf4SFabien Sanglard constexpr std::chrono::milliseconds lower_bound{20};
19*3f982cf4SFabien Sanglard constexpr std::chrono::milliseconds upper_bound{120};
20*3f982cf4SFabien Sanglard MdnsRandom mdns_random;
21*3f982cf4SFabien Sanglard for (int i = 0; i < kIterationCount; ++i) {
22*3f982cf4SFabien Sanglard const Clock::duration delay = mdns_random.GetInitialQueryDelay();
23*3f982cf4SFabien Sanglard EXPECT_GE(delay, lower_bound);
24*3f982cf4SFabien Sanglard EXPECT_LE(delay, upper_bound);
25*3f982cf4SFabien Sanglard }
26*3f982cf4SFabien Sanglard }
27*3f982cf4SFabien Sanglard
TEST(MdnsRandomTest,RecordTtlVariation)28*3f982cf4SFabien Sanglard TEST(MdnsRandomTest, RecordTtlVariation) {
29*3f982cf4SFabien Sanglard constexpr double lower_bound = 0.0;
30*3f982cf4SFabien Sanglard constexpr double upper_bound = 0.02;
31*3f982cf4SFabien Sanglard MdnsRandom mdns_random;
32*3f982cf4SFabien Sanglard for (int i = 0; i < kIterationCount; ++i) {
33*3f982cf4SFabien Sanglard const double variation = mdns_random.GetRecordTtlVariation();
34*3f982cf4SFabien Sanglard EXPECT_GE(variation, lower_bound);
35*3f982cf4SFabien Sanglard EXPECT_LE(variation, upper_bound);
36*3f982cf4SFabien Sanglard }
37*3f982cf4SFabien Sanglard }
38*3f982cf4SFabien Sanglard
TEST(MdnsRandomTest,SharedRecordResponseDelay)39*3f982cf4SFabien Sanglard TEST(MdnsRandomTest, SharedRecordResponseDelay) {
40*3f982cf4SFabien Sanglard constexpr std::chrono::milliseconds lower_bound{20};
41*3f982cf4SFabien Sanglard constexpr std::chrono::milliseconds upper_bound{120};
42*3f982cf4SFabien Sanglard MdnsRandom mdns_random;
43*3f982cf4SFabien Sanglard for (int i = 0; i < kIterationCount; ++i) {
44*3f982cf4SFabien Sanglard const Clock::duration delay = mdns_random.GetSharedRecordResponseDelay();
45*3f982cf4SFabien Sanglard EXPECT_GE(delay, lower_bound);
46*3f982cf4SFabien Sanglard EXPECT_LE(delay, upper_bound);
47*3f982cf4SFabien Sanglard }
48*3f982cf4SFabien Sanglard }
49*3f982cf4SFabien Sanglard
TEST(MdnsRandomTest,TruncatedQueryResponseDelay)50*3f982cf4SFabien Sanglard TEST(MdnsRandomTest, TruncatedQueryResponseDelay) {
51*3f982cf4SFabien Sanglard constexpr std::chrono::milliseconds lower_bound{400};
52*3f982cf4SFabien Sanglard constexpr std::chrono::milliseconds upper_bound{500};
53*3f982cf4SFabien Sanglard MdnsRandom mdns_random;
54*3f982cf4SFabien Sanglard for (int i = 0; i < kIterationCount; ++i) {
55*3f982cf4SFabien Sanglard const Clock::duration delay = mdns_random.GetTruncatedQueryResponseDelay();
56*3f982cf4SFabien Sanglard EXPECT_GE(delay, lower_bound);
57*3f982cf4SFabien Sanglard EXPECT_LE(delay, upper_bound);
58*3f982cf4SFabien Sanglard }
59*3f982cf4SFabien Sanglard }
60*3f982cf4SFabien Sanglard
61*3f982cf4SFabien Sanglard } // namespace discovery
62*3f982cf4SFabien Sanglard } // namespace openscreen
63