byte_buffer_unittest.cpp revision 3d8db0877bb66bfea17e37e12a586b4b29440963
13d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal/*
23d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * Copyright (C) 2016, The Android Open Source Project
33d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal *
43d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * Licensed under the Apache License, Version 2.0 (the "License");
53d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * you may not use this file except in compliance with the License.
63d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * You may obtain a copy of the License at
73d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal *
83d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal *     http://www.apache.org/licenses/LICENSE-2.0
93d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal *
103d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * Unless required by applicable law or agreed to in writing, software
113d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * distributed under the License is distributed on an "AS IS" BASIS,
123d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * See the License for the specific language governing permissions and
143d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal * limitations under the License.
153d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal */
163d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
173d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal#include <array>
183d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal#include <cstring>
193d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal#include <string>
203d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
213d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal#include "gtest/gtest.h"
223d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
233d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal#include "wifilogd/byte_buffer.h"
243d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
253d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalnamespace android {
263d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalnamespace wifilogd {
273d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalnamespace {
283d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
293d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalconstexpr size_t kBufferSizeBytes = 1024;
303d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalconstexpr std::array<uint8_t, 1> kSmallestMessage{};
313d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalconstexpr std::array<uint8_t, kBufferSizeBytes> kLargestMessage{};
323d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
333d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalclass ByteBufferTest : public ::testing::Test {
343d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal public:
353d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  ByteBufferTest() {}
363d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
373d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal protected:
383d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  ByteBuffer<kBufferSizeBytes> buffer_;
393d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal};
403d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
413d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}  // namespace
423d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
433d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, AppendMinimalOnEmptyBufferSucceeds) {
443d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size());
453d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
463d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
473d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, AppendMaximalOnEmptyBufferSucceeds) {
483d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size());
493d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
503d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
513d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, AppendStoresOurData) {
523d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  const std::string message1{"hello"};
533d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  const std::string message2{"world"};
543d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(message1.data(), message1.size());
553d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(message2.data(), message2.size());
563d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
573d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  const std::string expected{"helloworld"};
583d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(0, std::memcmp(buffer_.data(), expected.data(), expected.size()));
593d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
603d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
613d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, AssigningWorks) {
623d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  const std::string message1{"hello"};
633d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(message1.data(), message1.size());
643d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
653d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  ByteBuffer<kBufferSizeBytes> copy;
663d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  ASSERT_NE(buffer_.size(), copy.size());
673d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
683d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  copy = buffer_;
693d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  ASSERT_EQ(buffer_.size(), copy.size());
703d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(0, std::memcmp(copy.data(), buffer_.data(), buffer_.size()));
713d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
723d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
733d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, CopyingWorks) {
743d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  const std::string message1{"hello"};
753d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(message1.data(), message1.size());
763d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
773d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  const ByteBuffer<kBufferSizeBytes> copy{buffer_};
783d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  ASSERT_EQ(buffer_.size(), copy.size());
793d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(0, std::memcmp(copy.data(), buffer_.data(), buffer_.size()));
803d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
813d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
823d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, DataDoesNotReturnNullOnFreshBuffer) {
833d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_NE(nullptr, buffer_.data());
843d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
853d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
863d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, DataDoesNotReturnNullAfterLargeWrite) {
873d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size());
883d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_NE(nullptr, buffer_.data());
893d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
903d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
913d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeReturnsZeroOnFreshBuffer) {
923d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(0U, buffer_.size());
933d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
943d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
953d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeIsCorrectAfterSmallWrite) {
963d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size());
973d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(kSmallestMessage.size(), buffer_.size());
983d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
993d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
1003d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeIsCorrectAfterLargeWrite) {
1013d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size());
1023d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(kLargestMessage.size(), buffer_.size());
1033d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
1043d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
1053d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeIsCorrectAfterMultipleWrites) {
1063d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size());
1073d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size());
1083d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size());
1093d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_EQ(3 * kSmallestMessage.size(), buffer_.size());
1103d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
1113d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
1123d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal// Per
1133d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal// github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#death-tests),
1143d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal// death tests should be specially named.
1153d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalusing ByteBufferDeathTest = ByteBufferTest;
1163d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
1173d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferDeathTest, AppendLargerThanBufferCausesDeath) {
1183d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  constexpr std::array<uint8_t, kBufferSizeBytes + 1> oversized_message{};
1193d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_DEATH(
1203d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal      buffer_.AppendOrDie(oversized_message.data(), oversized_message.size()),
1213d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal      "Check failed");
1223d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
1233d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
1243d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferDeathTest, AppendLargerThanFreeSpaceCausesDeath) {
1253d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size());
1263d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal  EXPECT_DEATH(
1273d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal      buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size()),
1283d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal      "Check failed");
1293d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}
1303d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal
1313d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}  // namespace wifilogd
1323d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal}  // namespace android
133