|
|
|
@ -49,7 +49,18 @@ class GrpcByteBufferPeer { |
|
|
|
|
ByteBuffer* bb_; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
class ProtoUtilsTest : public ::testing::Test {}; |
|
|
|
|
class ProtoUtilsTest : public ::testing::Test { |
|
|
|
|
protected: |
|
|
|
|
static void SetUpTestCase() { |
|
|
|
|
// Ensure the ProtoBufferWriter internals are initialized.
|
|
|
|
|
grpc::internal::GrpcLibraryInitializer init; |
|
|
|
|
init.summon(); |
|
|
|
|
grpc::GrpcLibraryCodegen lib; |
|
|
|
|
grpc_init(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void TearDownTestCase() { grpc_shutdown(); } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Regression test for a memory corruption bug where a series of
|
|
|
|
|
// ProtoBufferWriter Next()/Backup() invocations could result in a dangling
|
|
|
|
@ -136,36 +147,46 @@ void BufferWriterTest(int block_size, int total_size, int backup_size) { |
|
|
|
|
grpc_byte_buffer_reader_destroy(&reader); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, TinyBlockTinyBackup) { |
|
|
|
|
class WriterTest : public ::testing::Test { |
|
|
|
|
protected: |
|
|
|
|
static void SetUpTestCase() { |
|
|
|
|
grpc::internal::GrpcLibraryInitializer init; |
|
|
|
|
init.summon(); |
|
|
|
|
grpc::GrpcLibraryCodegen lib; |
|
|
|
|
// Ensure the ProtoBufferWriter internals are initialized.
|
|
|
|
|
grpc_init(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void TearDownTestCase() { grpc_shutdown(); } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
TEST_F(WriterTest, TinyBlockTinyBackup) { |
|
|
|
|
for (int i = 2; i < static_cast<int> GRPC_SLICE_INLINED_SIZE; i++) { |
|
|
|
|
BufferWriterTest(i, 256, 1); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, SmallBlockTinyBackup) { BufferWriterTest(64, 256, 1); } |
|
|
|
|
TEST_F(WriterTest, SmallBlockTinyBackup) { BufferWriterTest(64, 256, 1); } |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, SmallBlockNoBackup) { BufferWriterTest(64, 256, 0); } |
|
|
|
|
TEST_F(WriterTest, SmallBlockNoBackup) { BufferWriterTest(64, 256, 0); } |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, SmallBlockFullBackup) { BufferWriterTest(64, 256, 64); } |
|
|
|
|
TEST_F(WriterTest, SmallBlockFullBackup) { BufferWriterTest(64, 256, 64); } |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, LargeBlockTinyBackup) { BufferWriterTest(4096, 8192, 1); } |
|
|
|
|
TEST_F(WriterTest, LargeBlockTinyBackup) { BufferWriterTest(4096, 8192, 1); } |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, LargeBlockNoBackup) { BufferWriterTest(4096, 8192, 0); } |
|
|
|
|
TEST_F(WriterTest, LargeBlockNoBackup) { BufferWriterTest(4096, 8192, 0); } |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, LargeBlockFullBackup) { BufferWriterTest(4096, 8192, 4096); } |
|
|
|
|
TEST_F(WriterTest, LargeBlockFullBackup) { BufferWriterTest(4096, 8192, 4096); } |
|
|
|
|
|
|
|
|
|
TEST(WriterTest, LargeBlockLargeBackup) { BufferWriterTest(4096, 8192, 4095); } |
|
|
|
|
TEST_F(WriterTest, LargeBlockLargeBackup) { |
|
|
|
|
BufferWriterTest(4096, 8192, 4095); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
} // namespace internal
|
|
|
|
|
} // namespace grpc
|
|
|
|
|
|
|
|
|
|
int main(int argc, char** argv) { |
|
|
|
|
// Ensure the ProtoBufferWriter internals are initialized.
|
|
|
|
|
grpc::internal::GrpcLibraryInitializer init; |
|
|
|
|
init.summon(); |
|
|
|
|
grpc::GrpcLibraryCodegen lib; |
|
|
|
|
|
|
|
|
|
::testing::InitGoogleTest(&argc, argv); |
|
|
|
|
return RUN_ALL_TESTS(); |
|
|
|
|
} |
|
|
|
|