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

276 lines
9.8 KiB
Java

package jmri.jmrix.mqtt;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import jmri.Consist;
import jmri.DccLocoAddress;
import jmri.InstanceManager;
import jmri.jmrit.consisttool.ConsistPreferencesManager;
import jmri.jmrit.roster.Roster;
import jmri.jmrit.roster.RosterEntry;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* MqttConsistTest.java
*
* Test for the jmri.jmrix.mqtt.MqttConsist class
*
* @author Paul Bender Copyright (C) 2016,2017
*/
public class MqttConsistTest extends jmri.implementation.AbstractConsistTestBase {
@Test
@Override
public void testGetConsistType(){
// MQTT consists default to CS consists.
assertEquals( Consist.CS_CONSIST,c.getConsistType(), "default consist type");
}
@Override
@Test
public void testSetConsistTypeAdvanced(){
c.setConsistType( Consist.ADVANCED_CONSIST);
// make sure an error message is generated.
jmri.util.JUnitAppender.assertErrorMessage("Consist Type Not Supported");
}
@Override
@Test
public void testSetConsistTypeCS(){
c.setConsistType( Consist.CS_CONSIST);
assertEquals( Consist.CS_CONSIST,c.getConsistType(), "default consist type");
}
@Override
@Test
@Disabled("Does not support Advanced consists")
public void checkSizeLimitAdvanced(){
}
@Test
public void checkSizeLimitCS(){
c.setConsistType( Consist.CS_CONSIST);
assertEquals( -1, c.sizeLimit(), "Consist Limit");
}
@Override
@Test
@Disabled("Does not support Advanced consists")
public void checkContainsAdvanced(){
}
@Test
public void checkContainsCS(){
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = new DccLocoAddress(200,true);
DccLocoAddress B = new DccLocoAddress(250,true);
// nothing added, should be false for all.
assertFalse( c.contains(A), "Advanced Consist Contains");
assertFalse( c.contains(B), "Advanced Consist Contains");
// add just A
c.restore(A,true); // use restore here, as it does not send
// any data to the command station
assertTrue( c.contains(A), "Advanced Consist Contains");
assertFalse( c.contains(B), "Advanced Consist Contains");
// then add B
c.restore(B,false);
assertTrue( c.contains(A), "Advanced Consist Contains");
assertTrue( c.contains(B), "Advanced Consist Contains");
}
@Override
@Test
@Disabled("Does not support Advanced consists")
public void checkGetLocoDirectionAdvanced(){
}
@Test
public void checkGetLocoDirectionCS(){
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = new DccLocoAddress(200,true);
DccLocoAddress B = new DccLocoAddress(250,true);
c.restore(A,true); // use restore here, as it does not send
// any data to the command station
c.restore(B,false); // revese direction.
assertTrue( c.getLocoDirection(A), "Direction in Advanced Consist");
assertFalse( c.getLocoDirection(B), "Direction in Advanced Consist");
}
@Override
@Test
@Disabled("Does not support Advanced consists")
public void checkGetSetLocoRosterIDAdvanced(){
}
@Test
public void checkGetSetLocoRosterIDCS() throws IOException,FileNotFoundException {
jmri.util.RosterTestUtil.createTestRoster(new File(Roster.getDefault().getRosterLocation()),"rosterTest.xml");
RosterEntry entry = Roster.getDefault().getEntryForId("ATSF123");
assertNotNull(entry);
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = entry.getDccLocoAddress();
DccLocoAddress B = new DccLocoAddress(250,true);
c.restore(A,true); // use restore here, as it does not send
// any data to the command station
c.restore(B,false); // revese direction.
c.setRosterId(A,"ATSF123");
assertEquals( "ATSF123", c.getRosterId(A), "Roster ID A");
assertNull( c.getRosterId(B), "Roster ID B");
}
@Override
@Test
@Disabled("Does not support Advanced consists")
public void checkRemoveWithGetRosterIDAdvanced(){
}
@Test
public void checkRemoveWithGetRosterIDCS() throws IOException,FileNotFoundException {
jmri.util.RosterTestUtil.createTestRoster(new File(Roster.getDefault().getRosterLocation()),"rosterTest.xml");
RosterEntry entry = Roster.getDefault().getEntryForId("ATSF123");
assertNotNull(entry);
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = entry.getDccLocoAddress();
DccLocoAddress B = new DccLocoAddress(250,true);
c.restore(A,true); // use restore here, as it does not send
// any data to the command station
c.restore(B,false); // revese direction.
c.setRosterId(A,"ATSF123");
assertEquals( "ATSF123", c.getRosterId(A), "Roster ID A");
assertNull( c.getRosterId(B), "Roster ID B");
c.remove(A);
assertFalse( c.contains(A), "Roster A is no longer in consist");
}
@Override
@Test
@Disabled("Does not support Advanced consists")
public void checkAddRemoveWithRosterUpdateAdvanced(){
}
@Test
public void checkAddRemoveWithRosterUpdateCS() throws IOException,FileNotFoundException {
// verify the roster update process is active.
jmri.InstanceManager.getDefault(jmri.jmrit.consisttool.ConsistPreferencesManager.class).setUpdateCV19(true);
jmri.util.RosterTestUtil.createTestRoster(new File(Roster.getDefault().getRosterLocation()),"rosterTest.xml");
RosterEntry entry = Roster.getDefault().getEntryForId("ATSF123");
assertNotNull(entry);
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = entry.getDccLocoAddress();
DccLocoAddress B = new DccLocoAddress(250,true);
c.restore(A,true); // use restore here, as it does not send
// any data to the command station
c.restore(B,false); // revese direction.
c.setRosterId(A,"ATSF123");
assertEquals( "ATSF123", c.getRosterId(A), "Roster ID A");
assertNull( c.getRosterId(B), "Roster ID B");
c.remove(A);
assertFalse( c.contains(A), "Roster A is no longer in consist");
}
@Test
public void testActivateConsist(){
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = new DccLocoAddress(200,true);
DccLocoAddress B = new DccLocoAddress(250,true);
// nothing added, should be false for all.
assertFalse( c.contains(A), "Consist Contains");
assertFalse( c.contains(B), "Consist Contains");
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==1; }, "publish triggered");
assertEquals("track/state", a.getLastTopic());
assertEquals("", new String(a.getLastPayload()));
// add just A
c.add(A,true);
assertTrue( c.contains(A), "Consist Contains");
assertFalse( c.contains(B), "Consist Contains");
// Activate consist
((MqttConsist)c).activate();
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==2; }, "publish triggered");
assertEquals("cab/3/consist", a.getLastTopic());
assertEquals("200", new String(a.getLastPayload()));
// then add B
c.add(B,false);
assertTrue( c.contains(A), "Consist Contains");
assertTrue( c.contains(B), "Consist Contains");
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==3; }, "publish triggered");
assertEquals("cab/3/consist", a.getLastTopic());
assertEquals("200 -250", new String(a.getLastPayload()));
c.remove(A);
assertFalse( c.contains(A), "Consist Contains");
assertTrue( c.contains(B), "Consist Contains");
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==4; }, "publish triggered");
assertEquals("cab/3/consist", a.getLastTopic());
assertEquals("-250", new String(a.getLastPayload()));
((MqttConsist)c).deactivate();
JUnitUtil.waitFor( ()->{ return a.getPublishCount()==5; }, "publish triggered");
assertEquals("cab/3/consist", a.getLastTopic());
assertEquals("", new String(a.getLastPayload()));
}
@Test
public void checkGetLocoDirectionController(){
c.setConsistType(jmri.Consist.CS_CONSIST);
DccLocoAddress A = new DccLocoAddress(200,true);
DccLocoAddress B = new DccLocoAddress(250,true);
c.restore(A,true); // use restore here, as it does not send
c.restore(B,false); // revese direction.
assertTrue( c.getLocoDirection(A), "Direction in Advanced Consist");
assertFalse( c.getLocoDirection(B), "Direction in Advanced Consist");
}
private MqttAdapterScaffold a;
private MqttSystemConnectionMemo memo;
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetProfileManager();
JUnitUtil.initRosterConfigManager();
InstanceManager.setDefault(ConsistPreferencesManager.class,new ConsistPreferencesManager());
// prepare an interface
a = new MqttAdapterScaffold(true);
memo = new MqttSystemConnectionMemo();
memo.setMqttAdapter(a);
c = new MqttConsist(3, memo, "cab/{0}/consist");
}
@AfterEach
@Override
public void tearDown() {
memo.dispose();
memo = null;
a.dispose();
a = null;
c.dispose();
c = null;
JUnitUtil.tearDown();
}
}