Files
JIMRI/java/test/jmri/jmris/srcp/JmriSRCPThrottleServerTest.java
2026-06-17 14:00:51 +02:00

118 lines
3.9 KiB
Java

package jmri.jmris.srcp;
import jmri.util.JUnitUtil;
import jmri.DccLocoAddress;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.OutputStream;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
/**
* Tests for the jmri.jmris.srcp.JmriSRCPThrottleServer class
*
* @author Paul Bender copyright (C) 2016
*/
public class JmriSRCPThrottleServerTest extends jmri.jmris.AbstractThrottleServerTestBase {
private StringBuilder sb = null;
@Test
@Override
public void requestThrottleTest(){
Throwable thrown = catchThrowable( () -> {
((JmriSRCPThrottleServer)ats).initThrottle(1,42,false,128,28);
confirmThrottleRequestSucceeded();
});
assertThat(thrown).withFailMessage("failed requesting throttle").isNull();
}
/**
* confirm the throttle request succeeded and an appropriate response
* was forwarded to the client.
*/
@Override
public void confirmThrottleRequestSucceeded(){
assertThat(sb.toString()).withFailMessage("Throttle notification sent").endsWith("101 INFO 1 GL 42 N 1 28\n\r");
}
@Test
public void requestThrottleBadBusTest(){
Throwable thrown = catchThrowable( () -> ((JmriSRCPThrottleServer)ats).initThrottle(44,42,false,128,28));
assertThat(thrown).withFailMessage("failed requesting throttle").isNull();
assertThat(sb.toString()).withFailMessage("wrong value").endsWith("412 ERROR wrong value\n\r");
}
/**
* confirm the error status was forwarded to the client.
*/
@Override
public void confirmThrottleErrorStatusSent(){
assertThat(sb.toString()).withFailMessage("called in error").endsWith("499 ERROR unspecified error\n\r");
}
@Test
public void sendStatusStandardTest(){
Throwable thrown = catchThrowable( () -> {
((JmriSRCPThrottleServer)ats).initThrottle(1,42,false,128,28);
ats.sendStatus(new DccLocoAddress(42,false));
});
assertThat(thrown).withFailMessage("failed sending status").isNull();
confirmThrottleErrorStatusSent();
}
@Override
@Test
public void sendStatusTest(){
Throwable thrown = catchThrowable( () -> {
((JmriSRCPThrottleServer)ats).initThrottle(1,42,false,128,28);
confirmThrottleRequestSucceeded();
((JmriSRCPThrottleServer)ats).sendStatus(1,42);
confirmThrottleStatusSent();
});
assertThat(thrown).withFailMessage("failed sending status").isNull();
}
/**
* confirm the throttle status was forwarded to the client.
*/
@Override
public void confirmThrottleStatusSent(){
assertThat(sb.toString()).withFailMessage("throttle status").endsWith("100 INFO 1 GL 42 1 0 126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n\r");
}
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetProfileManager();
// ensure the Internal System Connection memo is available.
jmri.InstanceManager.setDefault(jmri.jmrix.internal.InternalSystemConnectionMemo.class, new jmri.jmrix.internal.InternalSystemConnectionMemo(false));
JUnitUtil.initInternalTurnoutManager();
JUnitUtil.initInternalLightManager();
JUnitUtil.initInternalSensorManager();
JUnitUtil.initDebugThrottleManager();
sb = new StringBuilder();
OutputStream output = new OutputStream() {
@Override
public void write(int b) {
sb.append((char)b);
}
};
java.io.DataInputStream input = new java.io.DataInputStream(System.in);
ats = new JmriSRCPThrottleServer(input,output);
}
@AfterEach
public void tearDown() {
sb = null;
ats = null;
JUnitUtil.tearDown();
}
}