blob: 435dc53c12db306a5239c7abcfcf962579650879 [file] [log] [blame]
// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "cobalt/websocket/buffered_amount_tracker.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cobalt {
namespace websocket {
class BufferedAmountTrackerTest : public ::testing::Test {
public:
BufferedAmountTracker tracker_;
};
TEST_F(BufferedAmountTrackerTest, Construct) {
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
}
TEST_F(BufferedAmountTrackerTest, AddNonPayload) {
tracker_.Add(false, 5);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
}
TEST_F(BufferedAmountTrackerTest, AddPayload) {
tracker_.Add(true, 5);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 5ul);
}
TEST_F(BufferedAmountTrackerTest, AddCombination) {
tracker_.Add(true, 5);
tracker_.Add(false, 3);
tracker_.Add(true, 11);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 16ul);
}
TEST_F(BufferedAmountTrackerTest, AddCombination2) {
tracker_.Add(false, 2);
tracker_.Add(false, 3);
tracker_.Add(true, 11);
tracker_.Add(true, 1);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 12ul);
}
TEST_F(BufferedAmountTrackerTest, AddZero) {
tracker_.Add(true, 0);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
tracker_.Add(false, 0);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
}
TEST_F(BufferedAmountTrackerTest, PopZero) {
std::size_t amount_poped = 0;
tracker_.Add(false, 5);
amount_poped = tracker_.Pop(0);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
EXPECT_EQ(amount_poped, 0);
tracker_.Add(false, 0);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
EXPECT_EQ(amount_poped, 0);
}
TEST_F(BufferedAmountTrackerTest, PopPayload) {
std::size_t amount_poped = 0;
tracker_.Add(true, 5);
amount_poped = tracker_.Pop(4);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 1ul);
EXPECT_EQ(amount_poped, 4);
}
TEST_F(BufferedAmountTrackerTest, PopNonPayload) {
std::size_t amount_poped = 0;
tracker_.Add(false, 5);
amount_poped = tracker_.Pop(3);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
EXPECT_EQ(amount_poped, 0);
}
TEST_F(BufferedAmountTrackerTest, PopCombined) {
std::size_t amount_poped = 0;
tracker_.Add(false, 5);
tracker_.Add(true, 3);
amount_poped = tracker_.Pop(7);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 1ul);
EXPECT_EQ(amount_poped, 2);
}
TEST_F(BufferedAmountTrackerTest, PopOverflow) {
std::size_t amount_poped = 0;
tracker_.Add(false, 2);
tracker_.Add(true, 2);
amount_poped = tracker_.Pop(16);
EXPECT_EQ(amount_poped, 2);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 0ul);
}
TEST_F(BufferedAmountTrackerTest, MultipleOperations) {
tracker_.Add(false, 2);
tracker_.Add(true, 3);
tracker_.Add(false, 1);
tracker_.Add(false, 6);
tracker_.Add(true, 14);
tracker_.Add(false, 3);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 17ul);
std::size_t amount_poped = 0;
tracker_.Add(false, 3);
amount_poped = tracker_.Pop(4);
EXPECT_EQ(amount_poped, 2);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 15ul);
tracker_.Add(false, 4);
amount_poped = tracker_.Pop(2);
EXPECT_EQ(amount_poped, 1);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 14ul);
tracker_.Add(true, 5);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 19ul);
amount_poped = tracker_.Pop(4);
EXPECT_EQ(amount_poped, 0);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 19ul);
tracker_.Add(false, 6);
amount_poped = tracker_.Pop(4);
EXPECT_EQ(amount_poped, 2);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 17ul);
tracker_.Add(true, 7);
amount_poped = tracker_.Pop(4);
EXPECT_EQ(amount_poped, 4);
EXPECT_EQ(tracker_.GetTotalBytesInflight(), 20ul);
}
} // namespace websocket
} // namespace cobalt