Files
JIMRI/java/test/jmri/jmrix/dcc4pc/Dcc4PcSensorManagerTest.java
T
2026-06-17 14:00:51 +02:00

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);
}