mirror of
				https://github.com/XRPLF/clio.git
				synced 2025-11-04 11:55:51 +00:00 
			
		
		
		
	fix: ASAN issue with AmendmentBlockHandler test (#2674)
Co-authored-by: Ayaz Salikhov <mathbunnyru@users.noreply.github.com>
This commit is contained in:
		@@ -32,6 +32,12 @@ struct AmendmentBlockHandlerInterface {
 | 
			
		||||
     */
 | 
			
		||||
    virtual void
 | 
			
		||||
    notifyAmendmentBlocked() = 0;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Stop the block handler from repeatedly executing
 | 
			
		||||
     */
 | 
			
		||||
    virtual void
 | 
			
		||||
    stop() = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace etlng
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@
 | 
			
		||||
 | 
			
		||||
#include <chrono>
 | 
			
		||||
#include <functional>
 | 
			
		||||
#include <optional>
 | 
			
		||||
#include <utility>
 | 
			
		||||
 | 
			
		||||
namespace etlng::impl {
 | 
			
		||||
@@ -45,6 +46,11 @@ AmendmentBlockHandler::AmendmentBlockHandler(
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
AmendmentBlockHandler::~AmendmentBlockHandler()
 | 
			
		||||
{
 | 
			
		||||
    stop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
AmendmentBlockHandler::notifyAmendmentBlocked()
 | 
			
		||||
{
 | 
			
		||||
@@ -53,4 +59,13 @@ AmendmentBlockHandler::notifyAmendmentBlocked()
 | 
			
		||||
        operation_.emplace(ctx_.executeRepeatedly(interval_, action_));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
AmendmentBlockHandler::stop()
 | 
			
		||||
{
 | 
			
		||||
    if (operation_.has_value()) {
 | 
			
		||||
        operation_->abort();
 | 
			
		||||
        operation_.reset();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace etlng::impl
 | 
			
		||||
 
 | 
			
		||||
@@ -56,11 +56,10 @@ public:
 | 
			
		||||
        ActionType action = kDEFAULT_AMENDMENT_BLOCK_ACTION
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    ~AmendmentBlockHandler() override
 | 
			
		||||
    {
 | 
			
		||||
        if (operation_.has_value())
 | 
			
		||||
            operation_.value().abort();
 | 
			
		||||
    }
 | 
			
		||||
    ~AmendmentBlockHandler() override;
 | 
			
		||||
 | 
			
		||||
    void
 | 
			
		||||
    stop() override;
 | 
			
		||||
 | 
			
		||||
    void
 | 
			
		||||
    notifyAmendmentBlocked() override;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,4 +25,5 @@
 | 
			
		||||
 | 
			
		||||
struct MockAmendmentBlockHandler : etlng::AmendmentBlockHandlerInterface {
 | 
			
		||||
    MOCK_METHOD(void, notifyAmendmentBlocked, (), (override));
 | 
			
		||||
    MOCK_METHOD(void, stop, (), (override));
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ struct AmendmentBlockHandlerTest : util::prometheus::WithPrometheus, SyncAsioCon
 | 
			
		||||
    etl::SystemState state;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST_F(AmendmentBlockHandlerTest, CallTonotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
 | 
			
		||||
TEST_F(AmendmentBlockHandlerTest, CallToNotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
 | 
			
		||||
{
 | 
			
		||||
    AmendmentBlockHandler handler{ctx_, state, std::chrono::nanoseconds{1}, actionMock.AsStdFunction()};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ protected:
 | 
			
		||||
    util::async::CoroExecutionContext ctx_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST_F(AmendmentBlockHandlerNgTests, CallTonotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
 | 
			
		||||
TEST_F(AmendmentBlockHandlerNgTests, CallToNotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
 | 
			
		||||
{
 | 
			
		||||
    static constexpr auto kMAX_ITERATIONS = 10uz;
 | 
			
		||||
    etlng::impl::AmendmentBlockHandler handler{ctx_, state_, std::chrono::nanoseconds{1}, actionMock_.AsStdFunction()};
 | 
			
		||||
@@ -55,6 +55,7 @@ TEST_F(AmendmentBlockHandlerNgTests, CallTonotifyAmendmentBlockedSetsStateAndRep
 | 
			
		||||
 | 
			
		||||
    handler.notifyAmendmentBlocked();
 | 
			
		||||
    stop.acquire();  // wait for the counter to reach over kMAX_ITERATIONS
 | 
			
		||||
    handler.stop();
 | 
			
		||||
 | 
			
		||||
    EXPECT_TRUE(state_.isAmendmentBlocked);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user