HW CI: rev limiter (#2141)

* test rev limit

* comment, format

* make test work

* check that it goes back to normal

Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
Matthew Kennedy 2020-12-26 14:14:04 -08:00 committed by GitHub
parent 041b84596f
commit b2cb46d724
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 59 additions and 0 deletions

View File

@ -13,6 +13,7 @@ import org.junit.Test;
import static com.rusefi.IoUtil.getEnableCommand;
import static com.rusefi.TestingUtils.*;
import static com.rusefi.config.generated.Fields.*;
import static org.junit.Assert.assertFalse;
/**
* rusEfi firmware simulator functional test suite
@ -93,6 +94,52 @@ public class FunctionalTest extends RusefiTestBase {
}
}
@Test
public void testRevLimiter() {
String msg = "rev limiter";
ecu.setEngineType(ET_FORD_ASPIRE);
ecu.changeRpm(2000);
// Alpha-N mode so that we actually inject some fuel (without mocking tons of sensors)
ecu.sendCommand("set algorithm 5");
// Set tps to 25% - make alpha-n happy
ecu.sendCommand("set_sensor_mock 10 25");
ecu.sendCommand("set rpm_hard_limit 2500");
{
// Check that neither ignition nor injection is cut
EngineChart chart = nextChart();
assertWaveNotNull(chart, EngineChart.SPARK_1);
assertWaveNotNull(chart, EngineChart.INJECTOR_1);
}
// Now go above the hard limiter
ecu.changeRpm(3000);
{
// Check that both ignition and injection are cut
EngineChart chart = nextChart();
// These channels are allowed to have falling edges - aka closing injectors and firing coils
// but not allowed to have rising edges - aka opening injectors and charging coils
assertWaveNoRises(chart, EngineChart.SPARK_1);
assertWaveNoRises(chart, EngineChart.INJECTOR_1);
}
// Check that it recovers when we go back under the limit
ecu.changeRpm(2000);
{
// Check that neither ignition nor injection is cut
EngineChart chart = nextChart();
assertWaveNotNull(chart, EngineChart.SPARK_1);
assertWaveNotNull(chart, EngineChart.INJECTOR_1);
}
}
@Test
public void testCustomEngine() {
ecu.setEngineType(ET_DEFAULT_FRANKENSO);
@ -421,6 +468,18 @@ public class FunctionalTest extends RusefiTestBase {
assertTrue(chart.get(key) != null);
}
private static void assertWaveNoRises(EngineChart chart, String key) {
StringBuilder events = chart.get(key);
// if no events of this type at all, return since this passes the test
if (events == null) {
return;
}
// Assert that there are no up (rise) events in the channel's sequence
assertFalse(events.toString().contains("u"));
}
private EngineChart nextChart() {
return TestingUtils.nextChart(ecu.commandQueue);
}