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 73937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawalTEST_F(ByteBufferTest, ChainingWorks) { 74937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal const std::string message1{"hello"}; 75937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal const std::string message2{"world"}; 76937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal buffer_.AppendOrDie(message1.data(), message1.size()) 77937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal .AppendOrDie(message2.data(), message2.size()); 78937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal 79937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal const std::string expected{"helloworld"}; 80937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal EXPECT_EQ(0, std::memcmp(buffer_.data(), expected.data(), expected.size())); 81937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal} 82937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal 833d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, CopyingWorks) { 843d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal const std::string message1{"hello"}; 853d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(message1.data(), message1.size()); 863d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 873d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal const ByteBuffer<kBufferSizeBytes> copy{buffer_}; 883d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal ASSERT_EQ(buffer_.size(), copy.size()); 893d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_EQ(0, std::memcmp(copy.data(), buffer_.data(), buffer_.size())); 903d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 913d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 923d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, DataDoesNotReturnNullOnFreshBuffer) { 933d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_NE(nullptr, buffer_.data()); 943d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 953d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 963d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, DataDoesNotReturnNullAfterLargeWrite) { 973d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size()); 983d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_NE(nullptr, buffer_.data()); 993d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1003d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1013d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeReturnsZeroOnFreshBuffer) { 1023d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_EQ(0U, buffer_.size()); 1033d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1043d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1053d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeIsCorrectAfterSmallWrite) { 1063d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size()); 1073d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_EQ(kSmallestMessage.size(), buffer_.size()); 1083d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1093d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1103d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeIsCorrectAfterLargeWrite) { 1113d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size()); 1123d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_EQ(kLargestMessage.size(), buffer_.size()); 1133d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1143d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1153d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferTest, SizeIsCorrectAfterMultipleWrites) { 116937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size()) 117937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal .AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size()) 118937164df3f181a273589ed0c12dcc3729bbd1d6dmukesh agrawal .AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size()); 1193d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_EQ(3 * kSmallestMessage.size(), buffer_.size()); 1203d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1213d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1223d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal// Per 1237e979c369670feea99b9aff42bc366a903cf7049mukesh agrawal// github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#death-tests, 1243d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal// death tests should be specially named. 1253d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalusing ByteBufferDeathTest = ByteBufferTest; 1263d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1273d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferDeathTest, AppendLargerThanBufferCausesDeath) { 1283d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal constexpr std::array<uint8_t, kBufferSizeBytes + 1> oversized_message{}; 1293d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_DEATH( 1303d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(oversized_message.data(), oversized_message.size()), 1313d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal "Check failed"); 1323d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1333d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1343d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawalTEST_F(ByteBufferDeathTest, AppendLargerThanFreeSpaceCausesDeath) { 1353d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(kLargestMessage.data(), kLargestMessage.size()); 1363d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal EXPECT_DEATH( 1373d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal buffer_.AppendOrDie(kSmallestMessage.data(), kSmallestMessage.size()), 1383d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal "Check failed"); 1393d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} 1403d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal 1413d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} // namespace wifilogd 1423d8db0877bb66bfea17e37e12a586b4b29440963mukesh agrawal} // namespace android 143