Files
2026-06-17 14:00:51 +02:00

197 lines
7.4 KiB
Java

package jmri.jmrix.can.cbus.simulator;
import jmri.jmrix.can.CanMessage;
import jmri.jmrix.can.CanReply;
import jmri.jmrix.can.CanSystemConnectionMemo;
import jmri.jmrix.can.cbus.CbusConstants;
import jmri.jmrix.can.TrafficControllerScaffold;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
*
* @author Paul Bender Copyright (C) 2017
* @author Steve Young Copyright (c) 2019
*/
public class CbusDummyCSTest {
@Test
public void testCTor() {
CbusDummyCS t = new CbusDummyCS(null);
Assert.assertNotNull("exists",t);
t.dispose();
}
@Test
public void testCTorTC() {
Assert.assertTrue("0 listeners",tc.numListeners()==0);
CbusDummyCS t = new CbusDummyCS(memo);
Assert.assertNotNull("exists",t);
Assert.assertTrue("1 listener",tc.numListeners()==1);
Assert.assertTrue("start 0 sessions",t.getNumberSessions()==0);
Assert.assertTrue("start getDummyType",t.getDummyType()==1);
t.setDelay(7);
Assert.assertEquals("getSetDelay", 7,t.getDelay());
t.dispose();
Assert.assertTrue("0 listeners after dispose",tc.numListeners()==0);
}
@Test
public void testProcessInOutTrackOnOff() {
CbusDummyCS t = new CbusDummyCS(memo);
Assert.assertEquals("start getProcessIn", false,t.getProcessIn());
Assert.assertEquals("start getProcessOut", true,t.getProcessOut());
Assert.assertEquals("start getSendIn", true,t.getSendIn());
Assert.assertEquals("start getSendOut", false,t.getSendOut());
CanMessage m = new CanMessage( new int[]{CbusConstants.CBUS_RTON },0x12 );
CanReply r = new CanReply( new int[]{CbusConstants.CBUS_RTON },0x12 );
t.reply(r);
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>0); }, "reply didn't arrive");
Assert.assertEquals("rton acknowledged out to in", "[5f8] 05",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
Assert.assertEquals("rton not acknowledged in to out", 0,(tc.outbound.size()));
t.setProcessIn(true);
t.setProcessOut(false);
t.setSendIn(false);
t.setSendOut(true);
Assert.assertEquals("getProcessIn", true,t.getProcessIn());
Assert.assertEquals("getProcessOut", false,t.getProcessOut());
Assert.assertEquals("getSendIn", false,t.getSendIn());
Assert.assertEquals("getSendOut", true,t.getSendOut());
m = new CanMessage( new int[]{CbusConstants.CBUS_RTOF },0x12 );
r = new CanReply( new int[]{CbusConstants.CBUS_RTOF },0x12 );
t.reply(r);
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.outbound.size()>0); }, "message didn't arrive");
Assert.assertEquals("rton acknowledged in to out", "[5f8] 04",
tc.outbound.elementAt(tc.outbound.size() - 1).toString());
Assert.assertEquals("rton not increased in to out", 1,(tc.inbound.size()));
Assert.assertEquals("rton acknowledged out to in", "[5f8] 05",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
t.dispose();
}
@Test
public void testProcessASession() {
CbusDummyCS t = new CbusDummyCS(memo);
CanMessage m = new CanMessage( new int[]{CbusConstants.CBUS_RLOC, 0xC4, 0xD2 },0x12 ); // 1234 Long
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>0); }, "reply didn't arrive");
Assert.assertEquals("rton acknowledged", "[5f8] E1 01 C4 D2 80 00 00",
tc.inbound.elementAt(tc.inbound.size() - 1).toString()); // assign session 1
Assert.assertTrue("rloc 1 session",t.getNumberSessions()==1);
m = new CanMessage( new int[]{CbusConstants.CBUS_QLOC, 1 },0x12 ); // query session 1
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>1); }, "reply didn't arrive");
Assert.assertEquals("qloc acknowledged", "[5f8] E1 01 C4 D2 80 00 00",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_DKEEP, 1 },0x12 ); // keep alive session 1
t.message(m);
m = new CanMessage( new int[]{CbusConstants.CBUS_DKEEP, 2 },0x12 ); // keep alive session 2
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>2); }, "error reply 2 didn't arrive");
Assert.assertEquals("dkeep no session", "[5f8] 63 02 00 03",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_DSPD, 1 },0x12 ); // speed dir session 1
t.message(m);
m = new CanMessage( new int[]{CbusConstants.CBUS_DSPD, 2 },0x12 ); // speed dir session 2
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>3); }, "error reply 3 didn't arrive");
Assert.assertEquals("dspd no session", "[5f8] 63 02 00 03",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_QLOC, 2 },0x12 ); // qloc session 2
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>4); }, "error reply 4 didn't arrive");
Assert.assertEquals("qloc no session", "[5f8] 63 02 00 03",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_RLOC, 0xC4, 0xD2 },0x12 ); // rloc existing 2
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>5); }, "error reply 5 didn't arrive");
Assert.assertEquals("rloc existing session", "[5f8] 63 C4 D2 02",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_KLOC, 2 },0x12 ); // kloc session 2
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>6); }, "error reply 6 didn't arrive");
Assert.assertEquals("kloc no session", "[5f8] 63 02 00 03",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_RESTP },0x12 ); // request e stop
t.message(m);
JUnitUtil.waitFor(()->{ return(tc.inbound.size()>7); }, "reply 7 didn't arrive");
Assert.assertEquals("restp no session", "[5f8] 06",
tc.inbound.elementAt(tc.inbound.size() - 1).toString());
m = new CanMessage( new int[]{CbusConstants.CBUS_KLOC, 1 },0x12 ); // kloc kill session 2
t.message(m);
Assert.assertTrue("kloc 0 session",t.getNumberSessions()==0);
t.dispose();
}
private TrafficControllerScaffold tc;
private CanSystemConnectionMemo memo;
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
memo = new CanSystemConnectionMemo();
tc = new TrafficControllerScaffold();
memo.setTrafficController(tc);
}
@AfterEach
public void tearDown() {
tc.terminateThreads();
memo.dispose();
tc = null;
memo = null;
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(CbusDummyCSTest.class);
}