@@ -25,6 +25,80 @@ namespace test {
2525
2626class LogBufferTests : public PelotonTest {};
2727
28+ TEST_F (LogBufferTests, InsertLogBufferTest) {
29+ oid_t block = 1 , offset = 16 ;
30+ ItemPointer location (block, offset);
31+ eid_t epoch_id = 3 ;
32+ txn_id_t txn_id = 99 ;
33+ cid_t commit_id = 98 ;
34+ oid_t database_id = 10 ;
35+ oid_t table_id = 20 ;
36+ oid_t tile_group_id = 30 ;
37+ double value1 = 9.1 , value2 = 9.2 , value3 = 9.3 ;
38+
39+ logging::LogBuffer *log_buffer;
40+ log_buffer = new logging::LogBuffer (logging::LogManager::GetInstance ().GetTransactionBufferSize ());
41+
42+ // TILES
43+ std::vector<std::string> tile_column_names;
44+ std::vector<std::vector<std::string>> column_names;
45+
46+ tile_column_names.push_back (" INTEGER COL" );
47+ column_names.push_back (tile_column_names);
48+
49+ std::vector<catalog::Schema> schemas;
50+ std::vector<catalog::Column> columns;
51+
52+ // SCHEMA
53+ catalog::Column column1 (type::TypeId::INTEGER, type::Type::GetTypeSize (type::TypeId::INTEGER),
54+ " A" , true );
55+ columns.push_back (column1);
56+
57+ std::unique_ptr<catalog::Schema> schema1 (new catalog::Schema (columns));
58+ schemas.push_back (*schema1);
59+
60+ std::map<oid_t , std::pair<oid_t , oid_t >> column_map;
61+ column_map[0 ] = std::make_pair (0 , 0 );
62+
63+ std::shared_ptr<storage::TileGroup> tile_group (storage::TileGroupFactory::GetTileGroup (
64+ database_id, table_id, tile_group_id, nullptr , schemas, column_map, 3 ));
65+ catalog::Manager::GetInstance ().AddTileGroup (block, tile_group);
66+
67+ logging::LogRecord insert_record = logging::LogRecordFactory::CreateTupleRecord (
68+ LogRecordType::TUPLE_INSERT, location, epoch_id, txn_id, commit_id);
69+
70+ EXPECT_EQ (log_buffer->GetThreshold (), logging::LogManager::GetInstance ().GetTransactionBufferSize ());
71+
72+ type::Value val1 = type::ValueFactory::GetDecimalValue (value1);
73+ type::Value val2 = type::ValueFactory::GetDecimalValue (value2);
74+ type::Value val3 = type::ValueFactory::GetDecimalValue (value3);
75+ std::vector<type::Value> values;
76+ values.push_back (val1);
77+ values.push_back (val2);
78+ values.push_back (val3);
79+ insert_record.SetValuesArray (reinterpret_cast <char *>(values.data ()), static_cast <uint32_t >(values.size ()));
80+ log_buffer->WriteRecord (insert_record);
81+ size_t buffer_size1 = sizeof (int32_t ) + sizeof (int8_t ) + sizeof (int64_t ) * 3 + sizeof (int64_t ) * 4 +
82+ sizeof (double ) * 3 ;
83+ EXPECT_EQ (buffer_size1, log_buffer->GetSize ());
84+
85+ ReferenceSerializeInput log_buffer_input (log_buffer->GetData (), log_buffer->GetSize ());
86+
87+ // Insert record
88+ EXPECT_EQ (buffer_size1 - sizeof (int32_t ), log_buffer_input.ReadInt ());
89+ EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_INSERT), log_buffer_input.ReadEnumInSingleByte ());
90+ EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
91+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
92+ EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
93+ EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
94+ EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
95+ EXPECT_EQ (block, log_buffer_input.ReadLong ());
96+ EXPECT_EQ (offset, log_buffer_input.ReadLong ());
97+ EXPECT_EQ (value1, log_buffer_input.ReadDouble ());
98+ EXPECT_EQ (value2, log_buffer_input.ReadDouble ());
99+ EXPECT_EQ (value3, log_buffer_input.ReadDouble ());
100+ }
101+
28102TEST_F (LogBufferTests, LogBufferTest) {
29103 oid_t block = 1 , offset = 16 , old_block = 1 , old_offset = 8 , new_block = 1 ,
30104 new_offset = 24 ;
@@ -115,8 +189,8 @@ TEST_F(LogBufferTests, LogBufferTest) {
115189 // Insert record
116190 EXPECT_EQ (buffer_size1 - sizeof (int32_t ), log_buffer_input.ReadInt ());
117191 EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_INSERT), log_buffer_input.ReadEnumInSingleByte ());
118- EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
119192 EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
193+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
120194 EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
121195 EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
122196 EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
@@ -129,8 +203,8 @@ TEST_F(LogBufferTests, LogBufferTest) {
129203 // Update Record
130204 EXPECT_EQ (buffer_size2 - sizeof (int32_t ), log_buffer_input.ReadInt ());
131205 EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_UPDATE), log_buffer_input.ReadEnumInSingleByte ());
132- EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
133206 EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
207+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
134208 EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
135209 EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
136210 EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
@@ -149,8 +223,8 @@ TEST_F(LogBufferTests, LogBufferTest) {
149223 // Delete record
150224 EXPECT_EQ (buffer_size3 - sizeof (int32_t ), log_buffer_input.ReadInt ());
151225 EXPECT_EQ (static_cast <int >(LogRecordType::TUPLE_DELETE), log_buffer_input.ReadEnumInSingleByte ());
152- EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
153226 EXPECT_EQ (txn_id, log_buffer_input.ReadLong ());
227+ EXPECT_EQ (epoch_id, log_buffer_input.ReadLong ());
154228 EXPECT_EQ (commit_id, log_buffer_input.ReadLong ());
155229 EXPECT_EQ (database_id, log_buffer_input.ReadLong ());
156230 EXPECT_EQ (table_id, log_buffer_input.ReadLong ());
0 commit comments