xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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