mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 01:39:30 +02:00
Merge pull request #1510 from jonny5532/feature/battery-can-aliveness-test
Tweak CAN still-alive tests to more reliably construct batteries
This commit is contained in:
commit
bf7d10c825
2 changed files with 35 additions and 10 deletions
|
@ -55,6 +55,7 @@ void setup_can_shunt();
|
||||||
#include "VOLVO-SPA-HYBRID-BATTERY.h"
|
#include "VOLVO-SPA-HYBRID-BATTERY.h"
|
||||||
|
|
||||||
void setup_battery(void);
|
void setup_battery(void);
|
||||||
|
Battery* create_battery(BatteryType type);
|
||||||
|
|
||||||
extern uint16_t user_selected_max_pack_voltage_dV;
|
extern uint16_t user_selected_max_pack_voltage_dV;
|
||||||
extern uint16_t user_selected_min_pack_voltage_dV;
|
extern uint16_t user_selected_min_pack_voltage_dV;
|
||||||
|
|
|
@ -37,10 +37,10 @@ class BatteryTestFixture : public testing::Test {
|
||||||
BatteryType type;
|
BatteryType type;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check that the parsed logs correctly trigger an overvoltage event.
|
// Check that the CAN aliveness timeout isn't being renewed by bogus CAN frames
|
||||||
class StillAliveTimeoutTest : public BatteryTestFixture {
|
class TestNotStillAlive : public BatteryTestFixture {
|
||||||
public:
|
public:
|
||||||
explicit StillAliveTimeoutTest(BatteryType type) : BatteryTestFixture(type) {}
|
explicit TestNotStillAlive(BatteryType type) : BatteryTestFixture(type) {}
|
||||||
void TestBody() override {
|
void TestBody() override {
|
||||||
// check if battery is a CanBattery subclass
|
// check if battery is a CanBattery subclass
|
||||||
auto* battery = dynamic_cast<CanBattery*>(::battery);
|
auto* battery = dynamic_cast<CanBattery*>(::battery);
|
||||||
|
@ -65,17 +65,41 @@ class StillAliveTimeoutTest : public BatteryTestFixture {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool IsValidCanBattery(BatteryType type) {
|
||||||
|
if (type == BatteryType::TestFake) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need some minimal setup or the battery constructors may segfault
|
||||||
|
datalayer = DataLayer();
|
||||||
|
// This leaks memory (but not much...)
|
||||||
|
init_hal();
|
||||||
|
|
||||||
|
auto* tmp_battery = create_battery(type);
|
||||||
|
if (tmp_battery == nullptr) {
|
||||||
|
// Not a valid battery type
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto* as_can_battery = dynamic_cast<CanBattery*>(tmp_battery);
|
||||||
|
if (as_can_battery == nullptr) {
|
||||||
|
// Failed to cast to CanBattery, so it's not a CAN battery
|
||||||
|
delete tmp_battery;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
delete tmp_battery;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void RegisterStillAliveTests() {
|
void RegisterStillAliveTests() {
|
||||||
for (int i = 2; i < 42; i++) {
|
for (int i = 0; i < (int)BatteryType::Highest; i++) {
|
||||||
if ((BatteryType)i == BatteryType::TestFake) {
|
if (!IsValidCanBattery((BatteryType)i)) {
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ((BatteryType)i == BatteryType::DalyBms) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string test_name = ("TestStillAliveTimeout" + snake_case_to_camel_case(name_for_battery_type((BatteryType)i)));
|
std::string test_name = ("TestNotStillAlive" + snake_case_to_camel_case(name_for_battery_type((BatteryType)i)));
|
||||||
testing::RegisterTest("StillAliveTests", test_name.c_str(), nullptr, nullptr, __FILE__, __LINE__,
|
testing::RegisterTest("StillAliveTests", test_name.c_str(), nullptr, nullptr, __FILE__, __LINE__,
|
||||||
[=]() -> BatteryTestFixture* { return new StillAliveTimeoutTest((BatteryType)i); });
|
[=]() -> BatteryTestFixture* { return new TestNotStillAlive((BatteryType)i); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue