From 78abde0d25652e76c92cf39998e6f3dacabaa20c Mon Sep 17 00:00:00 2001 From: Or Ozeri Date: Thu, 25 Nov 2021 15:05:55 +0200 Subject: [PATCH] test/librbd: fix memory leak in TestMockCryptoBlockCrypto fix memory leak in TestMockCryptoBlockCrypto. Signed-off-by: Or Ozeri --- .../librbd/crypto/test_mock_BlockCrypto.cc | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/test/librbd/crypto/test_mock_BlockCrypto.cc b/src/test/librbd/crypto/test_mock_BlockCrypto.cc index 6d0a42172331a..4ddc43d3bb7c0 100644 --- a/src/test/librbd/crypto/test_mock_BlockCrypto.cc +++ b/src/test/librbd/crypto/test_mock_BlockCrypto.cc @@ -22,7 +22,7 @@ MATCHER_P(CompareArrayToString, s, "") { } struct TestMockCryptoBlockCrypto : public TestFixture { - MockDataCryptor cryptor; + MockDataCryptor* cryptor; ceph::ref_t> bc; int cryptor_block_size = 16; int cryptor_iv_size = 16; @@ -33,35 +33,37 @@ struct TestMockCryptoBlockCrypto : public TestFixture { void SetUp() override { TestFixture::SetUp(); - cryptor.block_size = cryptor_block_size; + cryptor = new MockDataCryptor(); + cryptor->block_size = cryptor_block_size; bc = new BlockCrypto( - reinterpret_cast(m_ioctx.cct()), &cryptor, + reinterpret_cast(m_ioctx.cct()), cryptor, block_size, data_offset); expectation_set = new ExpectationSet(); } void TearDown() override { delete expectation_set; + bc->put(); TestFixture::TearDown(); } void expect_get_context(CipherMode mode) { _set_last_expectation( - EXPECT_CALL(cryptor, get_context(mode)) + EXPECT_CALL(*cryptor, get_context(mode)) .After(*expectation_set).WillOnce(Return( new MockCryptoContext()))); } void expect_init_context(const std::string& iv) { _set_last_expectation( - EXPECT_CALL(cryptor, init_context(_, CompareArrayToString(iv), + EXPECT_CALL(*cryptor, init_context(_, CompareArrayToString(iv), cryptor_iv_size)) .After(*expectation_set)); } void expect_update_context(const std::string& in_str, int out_ret) { _set_last_expectation( - EXPECT_CALL(cryptor, update_context(_, + EXPECT_CALL(*cryptor, update_context(_, CompareArrayToString(in_str), _, in_str.length())) .After(*expectation_set).WillOnce(Return(out_ret))); @@ -93,7 +95,7 @@ TEST_F(TestMockCryptoBlockCrypto, Encrypt) { expect_update_context(std::string(2048, '1') + std::string(2048, '2'), 4096); expect_init_context(std::string("\x38\x12\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16)); expect_update_context(std::string(2048, '2') + std::string(2048, '3'), 4096); - EXPECT_CALL(cryptor, return_context(_, CipherMode::CIPHER_MODE_ENC)); + EXPECT_CALL(*cryptor, return_context(_, CipherMode::CIPHER_MODE_ENC)); ASSERT_EQ(0, bc->encrypt(&data, image_offset)); @@ -115,7 +117,7 @@ TEST_F(TestMockCryptoBlockCrypto, UnalignedDataLength) { TEST_F(TestMockCryptoBlockCrypto, GetContextError) { ceph::bufferlist data; data.append(std::string(4096, '1')); - EXPECT_CALL(cryptor, get_context(CipherMode::CIPHER_MODE_ENC)).WillOnce( + EXPECT_CALL(*cryptor, get_context(CipherMode::CIPHER_MODE_ENC)).WillOnce( Return(nullptr)); ASSERT_EQ(-EIO, bc->encrypt(&data, 0)); } @@ -124,7 +126,7 @@ TEST_F(TestMockCryptoBlockCrypto, InitContextError) { ceph::bufferlist data; data.append(std::string(4096, '1')); expect_get_context(CipherMode::CIPHER_MODE_ENC); - EXPECT_CALL(cryptor, init_context(_, _, _)).WillOnce(Return(-123)); + EXPECT_CALL(*cryptor, init_context(_, _, _)).WillOnce(Return(-123)); ASSERT_EQ(-123, bc->encrypt(&data, 0)); } @@ -132,8 +134,8 @@ TEST_F(TestMockCryptoBlockCrypto, UpdateContextError) { ceph::bufferlist data; data.append(std::string(4096, '1')); expect_get_context(CipherMode::CIPHER_MODE_ENC); - EXPECT_CALL(cryptor, init_context(_, _, _)); - EXPECT_CALL(cryptor, update_context(_, _, _, _)).WillOnce(Return(-123)); + EXPECT_CALL(*cryptor, init_context(_, _, _)); + EXPECT_CALL(*cryptor, update_context(_, _, _, _)).WillOnce(Return(-123)); ASSERT_EQ(-123, bc->encrypt(&data, 0)); } -- 2.39.5