142 lines
5.6 KiB
Java
142 lines
5.6 KiB
Java
package jmri.jmrix.dcc4pc;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
import jmri.util.JUnitUtil;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
*
|
|
* @author Paul Bender Copyright (C) 2017
|
|
*/
|
|
public class Dcc4PcSensorManagerTest extends jmri.managers.AbstractSensorMgrTestBase {
|
|
|
|
private Dcc4PcReporterManager rm = null;
|
|
|
|
@Override
|
|
public String getSystemName(int i) {
|
|
return "DS0:" + i;
|
|
}
|
|
|
|
@Override
|
|
protected String getASystemNameWithNoPrefix() {
|
|
return "0:1";
|
|
}
|
|
|
|
@Override
|
|
@Test
|
|
public void testDefaultSystemName() {
|
|
// create -- requires module:contact form.
|
|
jmri.Sensor t = l.provideSensor("DS0:" + getNumToTest1());
|
|
// check
|
|
assertNotNull( t, "real object returned ");
|
|
assertEquals( t, l.getBySystemName(getSystemName(getNumToTest1())), "system name correct ");
|
|
}
|
|
|
|
@Override
|
|
@Test
|
|
public void testProvideName() {
|
|
// create -- requires module:contact form.
|
|
jmri.Sensor t = l.provideSensor("DS0:" + getNumToTest1());
|
|
// check
|
|
assertNotNull( t, "real object returned ");
|
|
assertTrue( t == l.getBySystemName(getSystemName(getNumToTest1())), "system name correct ");
|
|
}
|
|
|
|
@Test
|
|
public void checkReceiveRawRailComData() {
|
|
// Raw RailCom message copied from section 9.3 of the
|
|
// DCC4PC omnibus specification.
|
|
// packet contains both occupancy information and RailCom data.
|
|
byte packetData[] = {(byte) 0x0b, (byte) 0x00, (byte) 0x42, (byte) 0x01,
|
|
(byte) 0x3F, (byte) 0xA8, (byte) 0x90, (byte) 0x90, (byte) 0xC0,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x42, (byte) 0x02, (byte) 0xA3,
|
|
(byte) 0xAC, (byte) 0x8B, (byte) 0x69, (byte) 0x4E, (byte) 0xA5,
|
|
(byte) 0x99, (byte) 0x9A, (byte) 0x01, (byte) 0x01, (byte) 0x91,
|
|
(byte) 0x04, (byte) 0x22, (byte) 0x99, (byte) 0xA5, (byte) 0xA3,
|
|
(byte) 0xAC, (byte) 0x81, (byte) 0x42, (byte) 0x03, (byte) 0x3F,
|
|
(byte) 0xBC, (byte) 0x80, (byte) 0x90, (byte) 0xC0, (byte) 0x00,
|
|
(byte) 0x20, (byte) 0x24, (byte) 0x8E, (byte) 0xD4, (byte) 0x4E,
|
|
(byte) 0x59, (byte) 0xA3, (byte) 0xAC};
|
|
Dcc4PcReply rep = new Dcc4PcReply(packetData);
|
|
rep.setOriginalRequest(Dcc4PcMessage.pollBoard(0));
|
|
((Dcc4PcSensorManager) l).addActiveBoard(0, "1", 16, 0);
|
|
l.provideSensor("DS0:1");
|
|
l.provideSensor("DS0:2");
|
|
l.provideSensor("DS0:3");
|
|
l.provideSensor("DS0:4");
|
|
// creae a reporter for DR0:4, because it has railcom data.
|
|
rm.provideReporter("DR0:4");
|
|
((Dcc4PcSensorManager) l).reply(rep);
|
|
JUnitUtil.waitThreadTerminated("Dcc4PCSensor Process Packet for 0");
|
|
|
|
/* Asserts below fail. The Sensor does not go active */
|
|
|
|
// JUnitUtil.waitFor(() -> {
|
|
// return l.provideSensor("DS0:4").getState() == jmri.Sensor.ACTIVE;
|
|
// },"Sensor goes active");
|
|
// Assert.assertEquals("sensor DS0:1 state after packet", jmri.Sensor.INACTIVE, l.provideSensor("DS0:1").getState());
|
|
// Assert.assertEquals("sensor DS0:2 state after packet", jmri.Sensor.INACTIVE, l.provideSensor("DS0:2").getState());
|
|
|
|
// packet above has input 2 (sensor 3) occupied
|
|
//Assert.assertEquals("sensor DS0:3 state after packet",jmri.Sensor.ACTIVE,l.getSensor("DS0:3").getState());
|
|
// packet above has input 3 (sensor 4) occupied with railcom data.
|
|
//Assert.assertEquals("DR0:4 report","",rm.provideReporter("DR0:4").getCurrentReport());
|
|
//Assert.assertEquals("sensor DS0:4 state after packet",jmri.Sensor.ACTIVE,l.getSensor("DS0:4").getState());
|
|
}
|
|
|
|
@Test
|
|
@Disabled("it appears this packet is not yet decoded")
|
|
public void checkReceiveCookedRailComData() {
|
|
// Cooked RailCom message copied from section 9.4 of the
|
|
// DCC4PC omnibus specification.
|
|
// This packet contains occupancy information only.
|
|
byte packetData[] = {(byte) 0x0b, (byte) 0x00, (byte) 0x02, (byte) 0x01, (byte) 0x00};
|
|
Dcc4PcReply rep = new Dcc4PcReply(packetData);
|
|
rep.setOriginalRequest(Dcc4PcMessage.pollBoard(0));
|
|
((Dcc4PcSensorManager) l).addActiveBoard(0, "1", 16, 0);
|
|
l.provideSensor("DS0:1");
|
|
l.provideSensor("DS0:2");
|
|
l.provideSensor("DS0:3");
|
|
l.provideSensor("DS0:4");
|
|
((Dcc4PcSensorManager) l).reply(rep);
|
|
JUnitUtil.waitFor(() -> {
|
|
return l.provideSensor("DS0:3").getState() == jmri.Sensor.ACTIVE;}, "Sensor goes active");
|
|
assertEquals( jmri.Sensor.ACTIVE, l.provideSensor("DS0:3").getState(), "sensor state after packet");
|
|
|
|
}
|
|
|
|
private Dcc4PcSystemConnectionMemo memo = null;
|
|
|
|
@BeforeEach
|
|
@Override
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
Dcc4PcTrafficController tc = new Dcc4PcTrafficController() {
|
|
@Override
|
|
public void sendDcc4PcMessage(Dcc4PcMessage m, Dcc4PcListener reply) {
|
|
}
|
|
};
|
|
memo = new Dcc4PcSystemConnectionMemo(tc);
|
|
memo.configureManagers();
|
|
l = memo.getSensorManager();
|
|
rm = memo.getReporterManager();
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
l.dispose();
|
|
assertNotNull(memo);
|
|
memo.getDcc4PcTrafficController().terminateThreads();
|
|
memo.dispose();
|
|
l = null;
|
|
JUnitUtil.tearDown();
|
|
|
|
}
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(Dcc4PcSensorManagerTest.class);
|
|
}
|