// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #include "journal/Entry.h" #include "gtest/gtest.h" class TestEntry : public ::testing::Test { }; TEST_F(TestEntry, DefaultConstructor) { journal::Entry entry; ASSERT_EQ(0U, entry.get_entry_tid()); ASSERT_EQ(0U, entry.get_tag_tid()); bufferlist data(entry.get_data()); bufferlist expected_data; ASSERT_TRUE(data.contents_equal(expected_data)); } TEST_F(TestEntry, Constructor) { bufferlist data; data.append("data"); journal::Entry entry(234, 123, data); data.clear(); data = entry.get_data(); bufferlist expected_data; expected_data.append("data"); ASSERT_EQ(123U, entry.get_entry_tid()); ASSERT_EQ(234U, entry.get_tag_tid()); ASSERT_TRUE(data.contents_equal(expected_data)); } TEST_F(TestEntry, IsReadable) { bufferlist data; data.append("data"); journal::Entry entry(234, 123, data); bufferlist full_bl; ::encode(entry, full_bl); uint32_t bytes_needed; for (size_t i = 0; i < full_bl.length() - 1; ++i) { bufferlist partial_bl; if (i > 0) { partial_bl.substr_of(full_bl, 0, i); } ASSERT_FALSE(journal::Entry::is_readable(partial_bl.begin(), &bytes_needed)); ASSERT_GT(bytes_needed, 0U); } ASSERT_TRUE(journal::Entry::is_readable(full_bl.begin(), &bytes_needed)); ASSERT_EQ(0U, bytes_needed); } TEST_F(TestEntry, IsReadableBadPreamble) { bufferlist data; data.append("data"); journal::Entry entry(234, 123, data); uint64_t stray_bytes = 0x1122334455667788; bufferlist full_bl; ::encode(stray_bytes, full_bl); ::encode(entry, full_bl); uint32_t bytes_needed; bufferlist::iterator it = full_bl.begin(); ASSERT_FALSE(journal::Entry::is_readable(it, &bytes_needed)); ASSERT_EQ(0U, bytes_needed); it.advance(sizeof(stray_bytes)); ASSERT_TRUE(journal::Entry::is_readable(it, &bytes_needed)); ASSERT_EQ(0U, bytes_needed); } TEST_F(TestEntry, IsReadableBadCRC) { bufferlist data; data.append("data"); journal::Entry entry(234, 123, data); bufferlist full_bl; ::encode(entry, full_bl); bufferlist bad_bl; bad_bl.substr_of(full_bl, 0, full_bl.length() - 4); ::encode(full_bl.crc32c(1), bad_bl); uint32_t bytes_needed; ASSERT_FALSE(journal::Entry::is_readable(bad_bl.begin(), &bytes_needed)); ASSERT_EQ(0U, bytes_needed); }