191 lines
7.0 KiB
Java
191 lines
7.0 KiB
Java
package jmri.jmris.simpleserver;
|
|
|
|
import java.io.IOException;
|
|
|
|
import jmri.*;
|
|
import jmri.util.JUnitUtil;
|
|
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.catchThrowable;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
|
/**
|
|
* Tests for the jmri.jmris.simpleserver.SimpleSensorServer class
|
|
*
|
|
* @author Paul Bender Copyright (C) 2012,2016
|
|
*/
|
|
public class SimpleSensorServerTest extends jmri.jmris.AbstractSensorServerTestBase {
|
|
|
|
private StringBuilder sb = null;
|
|
|
|
@Test
|
|
public void testConnectionCtor() {
|
|
java.io.DataOutputStream output = new java.io.DataOutputStream(
|
|
new java.io.OutputStream() {
|
|
// null output string drops characters
|
|
// could be replaced by one that checks for specific outputs
|
|
@Override
|
|
public void write(int b) {
|
|
}
|
|
});
|
|
jmri.jmris.JmriConnectionScaffold jcs = new jmri.jmris.JmriConnectionScaffold(output);
|
|
SimpleSensorServer a = new SimpleSensorServer(jcs);
|
|
assertThat(a).isNotNull();
|
|
}
|
|
|
|
// test sending a message.
|
|
@Test
|
|
public void testSendMessage() {
|
|
// NOTE: this test uses reflection to test a private method.
|
|
Throwable thrown = catchThrowable( () -> {
|
|
java.lang.reflect.Method sendMessageMethod;
|
|
sendMessageMethod = ss.getClass().getDeclaredMethod("sendMessage", String.class);
|
|
// override the default permissions.
|
|
sendMessageMethod.setAccessible(true);
|
|
sendMessageMethod.invoke(ss,"Hello World");
|
|
});
|
|
assertThat(thrown).withFailMessage("Exception thrown while invoking message using reflection: {}",thrown).isNull();
|
|
assertThat(sb.toString()).withFailMessage("SendMessage Check").isEqualTo("Hello World");
|
|
}
|
|
|
|
// test sending a message.
|
|
@Test
|
|
public void testSendMessageWithConnection() {
|
|
java.io.DataOutputStream output = new java.io.DataOutputStream(
|
|
new java.io.OutputStream() {
|
|
@Override
|
|
public void write(int b) {
|
|
sb.append((char)b);
|
|
}
|
|
});
|
|
jmri.jmris.JmriConnectionScaffold jcs = new jmri.jmris.JmriConnectionScaffold(output);
|
|
SimpleSensorServer a = new SimpleSensorServer(jcs);
|
|
// NOTE: this test uses reflection to test a private method.
|
|
Throwable thrown = catchThrowable( () -> {
|
|
java.lang.reflect.Method sendMessageMethod;
|
|
sendMessageMethod = a.getClass().getDeclaredMethod("sendMessage", String.class);
|
|
// override the default permissions.
|
|
sendMessageMethod.setAccessible(true);
|
|
sendMessageMethod.invoke(a,"Hello World");
|
|
});
|
|
assertThat(thrown).withFailMessage("Exception thrown while invoking message using reflection: {}",thrown).isNull();
|
|
assertThat(jcs.getOutput()).withFailMessage("SendMessage Check").isEqualTo("Hello World");
|
|
}
|
|
|
|
|
|
// test Parsing an ACTIVE status message.
|
|
@Test
|
|
public void parseActiveStatus() throws JmriException, IOException {
|
|
ss.parseStatus("SENSOR IS1 ACTIVE\n");
|
|
jmri.Sensor sensor = (InstanceManager.getDefault(jmri.SensorManager.class)).getSensor("IS1");
|
|
assertNotNull(sensor);
|
|
assertThat(sensor.getState()).withFailMessage("Parse Active Status Check").isEqualTo(Sensor.ACTIVE);
|
|
// parsing the status also causes a message to return to
|
|
// the client.
|
|
checkSensorActiveSent();
|
|
}
|
|
|
|
// test Parsing an INACTIVE status message.
|
|
@Test
|
|
public void parseInactiveStatus() throws JmriException, IOException {
|
|
ss.parseStatus("SENSOR IS1 INACTIVE\n");
|
|
jmri.Sensor sensor = (InstanceManager.getDefault(jmri.SensorManager.class)).getSensor("IS1");
|
|
assertNotNull(sensor);
|
|
assertThat(sensor.getState()).withFailMessage("Parse Inactive Status Check").isEqualTo(Sensor.INACTIVE);
|
|
// parsing the status also causes a message to return to
|
|
// the client.
|
|
checkSensorInActiveSent();
|
|
}
|
|
|
|
// test Parsing an blank status message.
|
|
@Test
|
|
public void parseBlankStatus() throws JmriException, IOException {
|
|
ss.parseStatus("SENSOR IS1\n");
|
|
// nothing has changed the sensor, so it should be unknown.
|
|
checkSensorUnknownSent();
|
|
// verify the sensor exists, it should have been created with provideSensor.
|
|
assertThat(InstanceManager.getDefault(jmri.SensorManager.class).getSensor("IS1")).isNotNull();
|
|
}
|
|
|
|
// test Parsing an blank status message.
|
|
@Test
|
|
public void parseBlankStatusWithOutNewLine() throws JmriException, IOException {
|
|
ss.parseStatus("SENSOR IS1");
|
|
// nothing has changed the sensor, so it should be unknown.
|
|
checkSensorUnknownSent();
|
|
// verify the sensor exists, it should have been created with provideSensor.
|
|
assertThat(InstanceManager.getDefault(jmri.SensorManager.class).getSensor("IS1")).isNotNull();
|
|
}
|
|
|
|
// test Parsing an other status message.
|
|
@Test
|
|
public void parseOtherStatus() throws JmriException, IOException {
|
|
ss.parseStatus("SENSOR IS1 UNKNOWN\n");
|
|
// this isn't INACTIVE or ACTIVE, so it should be just like blank.
|
|
// nothing has changed the sensor, so it should be unknown.
|
|
checkSensorUnknownSent();
|
|
}
|
|
|
|
/**
|
|
* {@inhertDoc}
|
|
*/
|
|
@Override
|
|
public void checkErrorStatusSent(){
|
|
assertThat(sb.toString()).withFailMessage("sendErrorStatus check").isEqualTo("SENSOR ERROR\n");
|
|
}
|
|
|
|
/**
|
|
* {@inhertDoc}
|
|
*/
|
|
@Override
|
|
public void checkSensorActiveSent(){
|
|
assertThat(sb.toString()).withFailMessage("sendStatus check").isEqualTo("SENSOR IS1 ACTIVE\n");
|
|
}
|
|
|
|
/**
|
|
* {@inhertDoc}
|
|
*/
|
|
@Override
|
|
public void checkSensorInActiveSent(){
|
|
assertThat(sb.toString()).withFailMessage("sendStatus check").isEqualTo("SENSOR IS1 INACTIVE\n");
|
|
}
|
|
|
|
/**
|
|
* {@inhertDoc}
|
|
*/
|
|
@Override
|
|
public void checkSensorUnknownSent(){
|
|
assertThat(sb.toString()).withFailMessage("sendStatus check").isEqualTo("SENSOR IS1 UNKNOWN\n");
|
|
}
|
|
|
|
@BeforeEach
|
|
@Override
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
jmri.util.JUnitUtil.initInternalSensorManager();
|
|
sb = new StringBuilder();
|
|
java.io.DataOutputStream output = new java.io.DataOutputStream(
|
|
new java.io.OutputStream() {
|
|
@Override
|
|
public void write(int b) {
|
|
sb.append((char)b);
|
|
}
|
|
});
|
|
java.io.DataInputStream input = new java.io.DataInputStream(System.in);
|
|
ss = new SimpleSensorServer(input, output);
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
ss.dispose();
|
|
ss = null;
|
|
sb = null;
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
}
|