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
|
virtual void
|
||||||
notifyAmendmentBlocked() = 0;
|
notifyAmendmentBlocked() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Stop the block handler from repeatedly executing
|
||||||
|
*/
|
||||||
|
virtual void
|
||||||
|
stop() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace etlng
|
} // namespace etlng
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <optional>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
namespace etlng::impl {
|
namespace etlng::impl {
|
||||||
@@ -45,6 +46,11 @@ AmendmentBlockHandler::AmendmentBlockHandler(
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AmendmentBlockHandler::~AmendmentBlockHandler()
|
||||||
|
{
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AmendmentBlockHandler::notifyAmendmentBlocked()
|
AmendmentBlockHandler::notifyAmendmentBlocked()
|
||||||
{
|
{
|
||||||
@@ -53,4 +59,13 @@ AmendmentBlockHandler::notifyAmendmentBlocked()
|
|||||||
operation_.emplace(ctx_.executeRepeatedly(interval_, action_));
|
operation_.emplace(ctx_.executeRepeatedly(interval_, action_));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AmendmentBlockHandler::stop()
|
||||||
|
{
|
||||||
|
if (operation_.has_value()) {
|
||||||
|
operation_->abort();
|
||||||
|
operation_.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace etlng::impl
|
} // namespace etlng::impl
|
||||||
|
|||||||
@@ -56,11 +56,10 @@ public:
|
|||||||
ActionType action = kDEFAULT_AMENDMENT_BLOCK_ACTION
|
ActionType action = kDEFAULT_AMENDMENT_BLOCK_ACTION
|
||||||
);
|
);
|
||||||
|
|
||||||
~AmendmentBlockHandler() override
|
~AmendmentBlockHandler() override;
|
||||||
{
|
|
||||||
if (operation_.has_value())
|
void
|
||||||
operation_.value().abort();
|
stop() override;
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
notifyAmendmentBlocked() override;
|
notifyAmendmentBlocked() override;
|
||||||
|
|||||||
@@ -25,4 +25,5 @@
|
|||||||
|
|
||||||
struct MockAmendmentBlockHandler : etlng::AmendmentBlockHandlerInterface {
|
struct MockAmendmentBlockHandler : etlng::AmendmentBlockHandlerInterface {
|
||||||
MOCK_METHOD(void, notifyAmendmentBlocked, (), (override));
|
MOCK_METHOD(void, notifyAmendmentBlocked, (), (override));
|
||||||
|
MOCK_METHOD(void, stop, (), (override));
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ struct AmendmentBlockHandlerTest : util::prometheus::WithPrometheus, SyncAsioCon
|
|||||||
etl::SystemState state;
|
etl::SystemState state;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(AmendmentBlockHandlerTest, CallTonotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
|
TEST_F(AmendmentBlockHandlerTest, CallToNotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
|
||||||
{
|
{
|
||||||
AmendmentBlockHandler handler{ctx_, state, std::chrono::nanoseconds{1}, actionMock.AsStdFunction()};
|
AmendmentBlockHandler handler{ctx_, state, std::chrono::nanoseconds{1}, actionMock.AsStdFunction()};
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ protected:
|
|||||||
util::async::CoroExecutionContext ctx_;
|
util::async::CoroExecutionContext ctx_;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(AmendmentBlockHandlerNgTests, CallTonotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
|
TEST_F(AmendmentBlockHandlerNgTests, CallToNotifyAmendmentBlockedSetsStateAndRepeatedlyCallsAction)
|
||||||
{
|
{
|
||||||
static constexpr auto kMAX_ITERATIONS = 10uz;
|
static constexpr auto kMAX_ITERATIONS = 10uz;
|
||||||
etlng::impl::AmendmentBlockHandler handler{ctx_, state_, std::chrono::nanoseconds{1}, actionMock_.AsStdFunction()};
|
etlng::impl::AmendmentBlockHandler handler{ctx_, state_, std::chrono::nanoseconds{1}, actionMock_.AsStdFunction()};
|
||||||
@@ -55,6 +55,7 @@ TEST_F(AmendmentBlockHandlerNgTests, CallTonotifyAmendmentBlockedSetsStateAndRep
|
|||||||
|
|
||||||
handler.notifyAmendmentBlocked();
|
handler.notifyAmendmentBlocked();
|
||||||
stop.acquire(); // wait for the counter to reach over kMAX_ITERATIONS
|
stop.acquire(); // wait for the counter to reach over kMAX_ITERATIONS
|
||||||
|
handler.stop();
|
||||||
|
|
||||||
EXPECT_TRUE(state_.isAmendmentBlocked);
|
EXPECT_TRUE(state_.isAmendmentBlocked);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user