blob: 31e480417581c6eea4c20b10ad5661df53e6ad2b [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// 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 "net/third_party/quiche/src/quic/test_tools/quic_test_utils.h"
6
QUICHE teama6ef0a62019-03-07 20:34:33 -05007#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
8
9namespace quic {
10namespace test {
11
12class QuicTestUtilsTest : public QuicTest {};
13
14TEST_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
24TEST_F(QuicTestUtilsTest, BasicApproxEq) {
wub9343d702019-05-02 17:12:56 -070025 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), "");
QUICHE teama6ef0a62019-03-07 20:34:33 -050028
wub9343d702019-05-02 17:12:56 -070029 EXPECT_APPROX_EQ(64, 31, 0.55f);
30 EXPECT_NONFATAL_FAILURE(EXPECT_APPROX_EQ(31, 64, 0.55f), "");
QUICHE teama6ef0a62019-03-07 20:34:33 -050031}
32
33TEST_F(QuicTestUtilsTest, QuicTimeDelta) {
wub9343d702019-05-02 17:12:56 -070034 EXPECT_APPROX_EQ(QuicTime::Delta::FromMicroseconds(1000),
35 QuicTime::Delta::FromMicroseconds(1003), 0.01f);
QUICHE teama6ef0a62019-03-07 20:34:33 -050036 EXPECT_NONFATAL_FAILURE(
wub9343d702019-05-02 17:12:56 -070037 EXPECT_APPROX_EQ(QuicTime::Delta::FromMicroseconds(1000),
38 QuicTime::Delta::FromMicroseconds(1200), 0.01f),
QUICHE teama6ef0a62019-03-07 20:34:33 -050039 "");
40}
41
42TEST_F(QuicTestUtilsTest, QuicBandwidth) {
wub9343d702019-05-02 17:12:56 -070043 EXPECT_APPROX_EQ(QuicBandwidth::FromBytesPerSecond(1000),
44 QuicBandwidth::FromBitsPerSecond(8005), 0.01f);
QUICHE teama6ef0a62019-03-07 20:34:33 -050045 EXPECT_NONFATAL_FAILURE(
wub9343d702019-05-02 17:12:56 -070046 EXPECT_APPROX_EQ(QuicBandwidth::FromBytesPerSecond(1000),
47 QuicBandwidth::FromBitsPerSecond(9005), 0.01f),
QUICHE teama6ef0a62019-03-07 20:34:33 -050048 "");
49}
50
51// Ensure that SimpleRandom does not change its output for a fixed seed.
52TEST_F(QuicTestUtilsTest, SimpleRandomStability) {
53 SimpleRandom rng;
54 rng.set_seed(UINT64_C(0x1234567800010001));
vasilvvc2018482019-04-26 15:47:55 -070055 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.
61TEST_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 }
QUICHE teama6ef0a62019-03-07 20:34:33 -050076}
77
78} // namespace test
79} // namespace quic