1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "quiche/quic/test_tools/quic_test_utils.h"
6
7 #include "quiche/quic/platform/api/quic_test.h"
8
9 namespace quic {
10 namespace test {
11
12 class QuicTestUtilsTest : public QuicTest {};
13
TEST_F(QuicTestUtilsTest,ConnectionId)14 TEST_F(QuicTestUtilsTest, ConnectionId) {
15 EXPECT_NE(EmptyQuicConnectionId(), TestConnectionId());
16 EXPECT_NE(EmptyQuicConnectionId(), TestConnectionId(1));
17 EXPECT_EQ(TestConnectionId(), TestConnectionId());
18 EXPECT_EQ(TestConnectionId(33), TestConnectionId(33));
19 EXPECT_NE(TestConnectionId(0xdead), TestConnectionId(0xbeef));
20 EXPECT_EQ(0x1337u, TestConnectionIdToUInt64(TestConnectionId(0x1337)));
21 EXPECT_NE(0xdeadu, TestConnectionIdToUInt64(TestConnectionId(0xbeef)));
22 }
23
TEST_F(QuicTestUtilsTest,BasicApproxEq)24 TEST_F(QuicTestUtilsTest, BasicApproxEq) {
25 EXPECT_APPROX_EQ(10, 10, 1e-6f);
26 EXPECT_APPROX_EQ(1000, 1001, 0.01f);
27 EXPECT_NONFATAL_FAILURE(EXPECT_APPROX_EQ(1000, 1100, 0.01f), "");
28
29 EXPECT_APPROX_EQ(64, 31, 0.55f);
30 EXPECT_NONFATAL_FAILURE(EXPECT_APPROX_EQ(31, 64, 0.55f), "");
31 }
32
TEST_F(QuicTestUtilsTest,QuicTimeDelta)33 TEST_F(QuicTestUtilsTest, QuicTimeDelta) {
34 EXPECT_APPROX_EQ(QuicTime::Delta::FromMicroseconds(1000),
35 QuicTime::Delta::FromMicroseconds(1003), 0.01f);
36 EXPECT_NONFATAL_FAILURE(
37 EXPECT_APPROX_EQ(QuicTime::Delta::FromMicroseconds(1000),
38 QuicTime::Delta::FromMicroseconds(1200), 0.01f),
39 "");
40 }
41
TEST_F(QuicTestUtilsTest,QuicBandwidth)42 TEST_F(QuicTestUtilsTest, QuicBandwidth) {
43 EXPECT_APPROX_EQ(QuicBandwidth::FromBytesPerSecond(1000),
44 QuicBandwidth::FromBitsPerSecond(8005), 0.01f);
45 EXPECT_NONFATAL_FAILURE(
46 EXPECT_APPROX_EQ(QuicBandwidth::FromBytesPerSecond(1000),
47 QuicBandwidth::FromBitsPerSecond(9005), 0.01f),
48 "");
49 }
50
51 // Ensure that SimpleRandom does not change its output for a fixed seed.
TEST_F(QuicTestUtilsTest,SimpleRandomStability)52 TEST_F(QuicTestUtilsTest, SimpleRandomStability) {
53 SimpleRandom rng;
54 rng.set_seed(UINT64_C(0x1234567800010001));
55 EXPECT_EQ(UINT64_C(12589383305231984671), rng.RandUint64());
56 EXPECT_EQ(UINT64_C(17775425089941798664), rng.RandUint64());
57 }
58
59 // Ensure that the output of SimpleRandom does not depend on the size of the
60 // read calls.
TEST_F(QuicTestUtilsTest,SimpleRandomChunks)61 TEST_F(QuicTestUtilsTest, SimpleRandomChunks) {
62 SimpleRandom rng;
63 std::string reference(16 * 1024, '\0');
64 rng.RandBytes(&reference[0], reference.size());
65
66 for (size_t chunk_size : {3, 4, 7, 4096}) {
67 rng.set_seed(0);
68 size_t chunks = reference.size() / chunk_size;
69 std::string buffer(chunks * chunk_size, '\0');
70 for (size_t i = 0; i < chunks; i++) {
71 rng.RandBytes(&buffer[i * chunk_size], chunk_size);
72 }
73 EXPECT_EQ(reference.substr(0, buffer.size()), buffer)
74 << "Failed for chunk_size = " << chunk_size;
75 }
76 }
77
78 } // namespace test
79 } // namespace quic
80