mirror of
https://github.com/XRPLF/clio.git
synced 2025-12-06 17:27:58 +00:00
Add assertion that terminate clio (#994)
Fixes #893. Also added termination handler to print backtrace on crash, so fixes #929.
This commit is contained in:
32
unittests/util/AssertTests.cpp
Normal file
32
unittests/util/AssertTests.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
This file is part of clio: https://github.com/XRPLF/clio
|
||||
Copyright (c) 2023, the clio developers.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
#include <util/Assert.h>
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(AssertTests, assertTrue)
|
||||
{
|
||||
EXPECT_NO_THROW(ASSERT(true, "Should not fail"));
|
||||
}
|
||||
|
||||
TEST(AssertTests, assertFalse)
|
||||
{
|
||||
EXPECT_DEATH({ ASSERT(false, "failure"); }, "failure");
|
||||
}
|
||||
@@ -78,8 +78,7 @@ struct MockPrometheusImpl : PrometheusInterface {
|
||||
}
|
||||
auto* basePtr = it->second.get();
|
||||
auto* metricPtr = dynamic_cast<MetricType*>(basePtr);
|
||||
if (metricPtr == nullptr)
|
||||
throw std::runtime_error("Wrong metric type");
|
||||
ASSERT(metricPtr != nullptr, "Wrong metric type");
|
||||
return *metricPtr;
|
||||
}
|
||||
|
||||
@@ -101,8 +100,7 @@ struct MockPrometheusImpl : PrometheusInterface {
|
||||
}
|
||||
auto* ptr = metrics.emplace(key, std::move(metric)).first->second.get();
|
||||
auto metricPtr = dynamic_cast<MetricType*>(ptr);
|
||||
if (metricPtr == nullptr)
|
||||
throw std::runtime_error("Wrong metric type");
|
||||
ASSERT(metricPtr != nullptr, "Wrong metric type");
|
||||
return *metricPtr;
|
||||
}
|
||||
|
||||
@@ -137,8 +135,7 @@ struct WithMockPrometheus : virtual ::testing::Test {
|
||||
mockPrometheus()
|
||||
{
|
||||
auto* ptr = dynamic_cast<MockPrometheusImpl*>(&PrometheusService::instance());
|
||||
if (ptr == nullptr)
|
||||
throw std::runtime_error("Wrong prometheus type");
|
||||
ASSERT(ptr != nullptr, "Wrong prometheus type");
|
||||
return *ptr;
|
||||
}
|
||||
|
||||
@@ -147,8 +144,7 @@ struct WithMockPrometheus : virtual ::testing::Test {
|
||||
makeMock(std::string name, std::string labelsString)
|
||||
{
|
||||
auto* mockPrometheusPtr = dynamic_cast<MockPrometheusImpl*>(&PrometheusService::instance());
|
||||
if (mockPrometheusPtr == nullptr)
|
||||
throw std::runtime_error("Wrong prometheus type");
|
||||
ASSERT(mockPrometheusPtr != nullptr, "Wrong prometheus type");
|
||||
|
||||
std::string const key = name + labelsString;
|
||||
mockPrometheusPtr->makeMetric<MetricType>(std::move(name), std::move(labelsString));
|
||||
@@ -159,7 +155,7 @@ struct WithMockPrometheus : virtual ::testing::Test {
|
||||
} else if constexpr (std::is_same_v<typename MetricType::ValueType, double>) {
|
||||
return mockPrometheusPtr->counterDoubleImpls[key];
|
||||
}
|
||||
throw std::runtime_error("Wrong metric type");
|
||||
ASSERT(false, "Wrong metric type");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user