2155 lines
112 KiB
Java
2155 lines
112 KiB
Java
package jmri.jmrix.loconet.duplexgroup.swing;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
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.assertNotSame;
|
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
import static org.junit.jupiter.api.Assertions.fail;
|
|
|
|
import jmri.jmrix.loconet.LocoNetException;
|
|
import jmri.jmrix.loconet.LocoNetListener;
|
|
import jmri.jmrix.loconet.LocoNetMessage;
|
|
import jmri.jmrix.loconet.duplexgroup.DuplexGroupMessageType;
|
|
import jmri.util.JUnitUtil;
|
|
import jmri.util.junit.annotations.ToDo;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
* Test simple functioning of LnDplxGrpInfoImpl
|
|
*
|
|
* @author Paul Bender Copyright (C) 2016
|
|
* @author B. Milhaupt Copyright (C) 2018
|
|
*/
|
|
public class LnDplxGrpInfoImplTest {
|
|
|
|
private jmri.jmrix.loconet.LocoNetInterfaceScaffold lnis;
|
|
private jmri.jmrix.loconet.LocoNetSystemConnectionMemo memo;
|
|
private LnDplxGrpInfoImpl dpxGrpInfoImpl;
|
|
private boolean propChangeQueryFlag;
|
|
private boolean propChangeReportFlag;
|
|
private boolean propChangeFlag;
|
|
private int propChangeCount;
|
|
|
|
@Test
|
|
public void testCtor() {
|
|
assertNotNull( dpxGrpInfoImpl, "exists");
|
|
assertEquals( 0, dpxGrpInfoImpl.getNumUr92s(),
|
|
"Ctor zeroed number of UR92s");
|
|
assertFalse( dpxGrpInfoImpl.isWaitingForFirstUr92IPLReport(),
|
|
"Ctor cleard 'waiting for IPL query replies' flag");
|
|
assertEquals( 0, dpxGrpInfoImpl.getMessagesHandled(),
|
|
"Ctor has reset 'messagesHandled'");
|
|
|
|
assertEquals( "", dpxGrpInfoImpl.getFetchedDuplexGroupName(),
|
|
"verify initialization of acceptedGroupName");
|
|
assertEquals( "", dpxGrpInfoImpl.getFetchedDuplexGroupChannel(),
|
|
"verify initialization of acceptedGroupChannel");
|
|
assertEquals( "", dpxGrpInfoImpl.getFetchedDuplexGroupPassword(),
|
|
"verify initialization of acceptedGroupPassword");
|
|
assertEquals( "", dpxGrpInfoImpl.getFetchedDuplexGroupId(),
|
|
"verify initialization of acceptedGroupId");
|
|
|
|
lnis.notify(new LocoNetMessage(new int[] {0x81, 0x00}));
|
|
JUnitUtil.fasterWaitFor(()->{
|
|
return dpxGrpInfoImpl.getMessagesHandled() >= 1;},
|
|
"LocoNetListener is registered");
|
|
assertFalse( dpxGrpInfoImpl.isIplQueryTimerRunning(), "IPL Query timer is not running");
|
|
assertFalse( dpxGrpInfoImpl.isDuplexGroupQueryRunning(), "Duplex Group Info Query timer is not running");
|
|
|
|
dpxGrpInfoImpl.dispose();
|
|
|
|
for (LocoNetListener listener : lnis.getListeners()) {
|
|
assertNotSame( listener, dpxGrpInfoImpl, "dispose did not remove listener");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testMiscellaneousStuff() {
|
|
assertFalse( LnDplxGrpInfoImpl.isPasswordLimitedToNumbers(), "limit Password to Numeric-only");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testValidateDuplexGroupName() {
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName(""), "Check Group name: empty string");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName(" "), "Check Group name: 1 character");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("\n"), "Check Group name: only newline");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("\r"), "Check Group name: only linefeed");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("\177"), "Check Group name: 1 oddball character");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("ab"), "Check Group name: 2 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("abc"), "Check Group name: 3 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("abcd"), "Check Group name: 4 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("efghi"), "Check Group name: 5 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("jklmno"), "Check Group name: 6 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("pqrstuv"), "Check Group name: 7 characters");
|
|
assertTrue ( LnDplxGrpInfoImpl.validateGroupName("ZYXWVUTS"), "Check Group name: 8 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName("123456789"), "Check Group name: 9 characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupName(" "), "Check Group name: 10 characters");
|
|
assertTrue ( LnDplxGrpInfoImpl.validateGroupName(" "), "Check Group name: 8 spaces");
|
|
assertTrue ( LnDplxGrpInfoImpl.validateGroupName("\0\0\0\0\0\0\0\0"), "Check Group name: 8 nulls");
|
|
assertTrue( LnDplxGrpInfoImpl.validateGroupName("\n\n\n\n\n\n\n\n"), "Check Group name: 8 newlines");
|
|
assertTrue( LnDplxGrpInfoImpl.validateGroupName("dEadb33F"), "Check Group name: 8 characters - random");
|
|
}
|
|
|
|
@Test
|
|
public void testValidatePassword() {
|
|
char char1, char2, char3, char4;
|
|
char[] chars = new char[4];
|
|
chars[0] = ' ';
|
|
chars[1] = ' ';
|
|
chars[2] = ' ';
|
|
chars[3] = ' ';
|
|
|
|
String testString = "";
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword(testString), "Check Group Password: zero characters");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("A"), "Check Group Password: A");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("A0"), "Check Group Password: A0");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("A0C"), "Check Group Password: A0C");
|
|
assertTrue( LnDplxGrpInfoImpl.validateGroupPassword("A0AA"), "Check Group Password: A0AA");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("a0BB"), "Check Group Password: a0BB");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("AbCB"), "Check Group Password: AbCB");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("A0cB"), "Check Group Password: A0cB");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("A09c"), "Check Group Password: A09c");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("12345"));
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("123456"), "Check Group Password: 123456");
|
|
assertFalse( LnDplxGrpInfoImpl.validateGroupPassword("1234567"), "Check Group Password: 1234567");
|
|
|
|
for (int c1 = 0; c1 < 13; ++ c1) {
|
|
for (int c2 = 0; c2 < 13; ++ c2) {
|
|
for (int c3 = 0; c3 < 13; ++ c3) {
|
|
for (int c4 = 0; c4 < 13; ++ c4) {
|
|
switch (c1) {
|
|
case 0:
|
|
char1 = '0';
|
|
break;
|
|
case 1:
|
|
char1 = '1';
|
|
break;
|
|
case 2:
|
|
char1 = '2';
|
|
break;
|
|
case 3:
|
|
char1 = '3';
|
|
break;
|
|
case 4:
|
|
char1 = '4';
|
|
break;
|
|
case 5:
|
|
char1 = '5';
|
|
break;
|
|
case 6:
|
|
char1 = '6';
|
|
break;
|
|
case 7:
|
|
char1 = '7';
|
|
break;
|
|
case 8:
|
|
char1 = '8';
|
|
break;
|
|
case 9:
|
|
char1 = '9';
|
|
break;
|
|
case 10:
|
|
char1 = 'A';
|
|
break;
|
|
case 13:
|
|
char1 = 'B';
|
|
break;
|
|
case 12:
|
|
default:
|
|
char1 = 'C';
|
|
break;
|
|
}
|
|
|
|
switch (c2) {
|
|
case 0:
|
|
char2 = '0';
|
|
break;
|
|
case 1:
|
|
char2 = '1';
|
|
break;
|
|
case 2:
|
|
char2 = '2';
|
|
break;
|
|
case 3:
|
|
char2 = '3';
|
|
break;
|
|
case 4:
|
|
char2 = '4';
|
|
break;
|
|
case 5:
|
|
char2 = '5';
|
|
break;
|
|
case 6:
|
|
char2 = '6';
|
|
break;
|
|
case 7:
|
|
char2 = '7';
|
|
break;
|
|
case 8:
|
|
char2 = '8';
|
|
break;
|
|
case 9:
|
|
char2 = '9';
|
|
break;
|
|
case 10:
|
|
char2 = 'A';
|
|
break;
|
|
case 13:
|
|
char2 = 'B';
|
|
break;
|
|
case 12:
|
|
default:
|
|
char2 = 'C';
|
|
break;
|
|
}
|
|
|
|
switch (c3) {
|
|
case 0:
|
|
char3 = '0';
|
|
break;
|
|
case 1:
|
|
char3 = '1';
|
|
break;
|
|
case 2:
|
|
char3 = '2';
|
|
break;
|
|
case 3:
|
|
char3 = '3';
|
|
break;
|
|
case 4:
|
|
char3 = '4';
|
|
break;
|
|
case 5:
|
|
char3 = '5';
|
|
break;
|
|
case 6:
|
|
char3 = '6';
|
|
break;
|
|
case 7:
|
|
char3 = '7';
|
|
break;
|
|
case 8:
|
|
char3 = '8';
|
|
break;
|
|
case 9:
|
|
char3 = '9';
|
|
break;
|
|
case 10:
|
|
char3 = 'A';
|
|
break;
|
|
case 13:
|
|
char3 = 'B';
|
|
break;
|
|
case 12:
|
|
default:
|
|
char3 = 'C';
|
|
break;
|
|
}
|
|
switch (c4) {
|
|
case 0:
|
|
char4 = '0';
|
|
break;
|
|
case 1:
|
|
char4 = '1';
|
|
break;
|
|
case 2:
|
|
char4 = '2';
|
|
break;
|
|
case 3:
|
|
char4 = '3';
|
|
break;
|
|
case 4:
|
|
char4 = '4';
|
|
break;
|
|
case 5:
|
|
char4 = '5';
|
|
break;
|
|
case 6:
|
|
char4 = '6';
|
|
break;
|
|
case 7:
|
|
char4 = '7';
|
|
break;
|
|
case 8:
|
|
char4 = '8';
|
|
break;
|
|
case 9:
|
|
char4 = '9';
|
|
break;
|
|
case 10:
|
|
char4 = 'A';
|
|
break;
|
|
case 13:
|
|
char4 = 'B';
|
|
break;
|
|
case 12:
|
|
default:
|
|
char4 = 'C';
|
|
break;
|
|
}
|
|
chars[0] = char1;
|
|
chars[1] = char2;
|
|
chars[2] = char3;
|
|
chars[3] = char4;
|
|
testString = new String(chars);
|
|
assertTrue( LnDplxGrpInfoImpl.validateGroupPassword(testString),
|
|
"Check Group Password: "+testString);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testValidateChannelNumber() {
|
|
for (int i = 0; i < 256; ++i) {
|
|
assertEquals( ((i >=11)&& (i <=26)),
|
|
LnDplxGrpInfoImpl.validateGroupChannel(i),
|
|
"Channel Valid check for channel "+i);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testValidateGroupIDNumber() {
|
|
for (int i = -1; i < 256; ++i) {
|
|
assertEquals( ((i >=0)&& (i <=127)),
|
|
LnDplxGrpInfoImpl.validateGroupID(i),
|
|
"Channel Group ID check for ID "+i);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void checkCreateUr92GroupIdentityQueryPacket() {
|
|
LocoNetMessage m = LnDplxGrpInfoImpl.createUr92GroupIdentityQueryPacket();
|
|
assertEquals( 0xe5, m.getElement(0), "Group Id Query Message: opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Group Id Query Message: byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Group Id Query Message: byte 2");
|
|
assertEquals( 0x08, m.getElement(3), "Group Id Query Message: byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Group Id Query Message: byte 4");
|
|
assertEquals( 0x00, m.getElement(5), "Group Id Query Message: byte 5");
|
|
assertEquals( 0x00, m.getElement(6), "Group Id Query Message: byte 6");
|
|
assertEquals( 0x00, m.getElement(7), "Group Id Query Message: byte 7");
|
|
assertEquals( 0x00, m.getElement(8), "Group Id Query Message: byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Group Id Query Message: byte 9");
|
|
assertEquals( 0x00, m.getElement(10), "Group Id Query Message: byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Group Id Query Message: byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Group Id Query Message: byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Group Id Query Message: byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Group Id Query Message: byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Group Id Query Message: byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Group Id Query Message: byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Group Id Query Message: byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Group Id Query Message: byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Group Id Query Message: byte 19");
|
|
}
|
|
|
|
@Test
|
|
public void checkCreateSetUr92GroupNamePacket() {
|
|
char[] cs = new char[8];
|
|
for (int i = 0; i < 8; ++i) {
|
|
cs[i] = '0';
|
|
}
|
|
String testString;
|
|
String testStringA = new String(cs);
|
|
LocoNetMessage m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringA),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringA+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringA+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringA+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringA+": byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Name to "+testStringA+": byte 4");
|
|
assertEquals( '0', m.getElement(5), "Set Group Name to "+testStringA+": byte 5");
|
|
assertEquals( '0', m.getElement(6), "Set Group Name to "+testStringA+": byte 6");
|
|
assertEquals( '0', m.getElement(7), "Set Group Name to "+testStringA+": byte 7");
|
|
assertEquals( '0', m.getElement(8), "Set Group Name to "+testStringA+": byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Name to "+testStringA+": byte 9");
|
|
assertEquals( '0', m.getElement(10), "Set Group Name to "+testStringA+": byte 10");
|
|
assertEquals( '0', m.getElement(11), "Set Group Name to "+testStringA+": byte 11");
|
|
assertEquals( '0', m.getElement(12), "Set Group Name to "+testStringA+": byte 12");
|
|
assertEquals( '0', m.getElement(13), "Set Group Name to "+testStringA+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringA+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringA+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringA+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringA+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringA+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringA+": byte 19");
|
|
|
|
String testStringB = "DEADBeef";
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringB),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringB+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringB+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringB+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringB+": byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Name to "+testStringB+": byte 4");
|
|
assertEquals( 'D', m.getElement(5), "Set Group Name to "+testStringB+": byte 5");
|
|
assertEquals( 'E', m.getElement(6), "Set Group Name to "+testStringB+": byte 6");
|
|
assertEquals( 'A', m.getElement(7), "Set Group Name to "+testStringB+": byte 7");
|
|
assertEquals( 'D', m.getElement(8), "Set Group Name to "+testStringB+": byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Name to "+testStringB+": byte 9");
|
|
assertEquals( 'B', m.getElement(10), "Set Group Name to "+testStringB+": byte 10");
|
|
assertEquals( 'e', m.getElement(11), "Set Group Name to "+testStringB+": byte 11");
|
|
assertEquals( 'e', m.getElement(12), "Set Group Name to "+testStringB+": byte 12");
|
|
assertEquals( 'f', m.getElement(13), "Set Group Name to "+testStringB+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringB+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringB+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringB+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringB+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringB+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringB+": byte 19");
|
|
|
|
|
|
Exception ex = assertThrows( LocoNetException.class,
|
|
() -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket("EADBeef"),
|
|
"should have failed account short group name string()");
|
|
assertNotNull(ex);
|
|
|
|
ex = assertThrows( LocoNetException.class,
|
|
() -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket("DEADBeef2"),
|
|
"should have failed account long group name string()");
|
|
assertNotNull(ex);
|
|
|
|
ex = assertThrows( LocoNetException.class,
|
|
() -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(""),
|
|
"should have failed account short group name string()");
|
|
assertNotNull(ex);
|
|
|
|
ex = assertThrows( LocoNetException.class,
|
|
() -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket("1"),
|
|
"should have failed account short group name string()");
|
|
assertNotNull(ex);
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[0] = 128;
|
|
String testStringC = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringC),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringC+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringC+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringC+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringC+": byte 3");
|
|
assertEquals( 0x01, m.getElement(4), "Set Group Name to "+testStringC+": byte 4");
|
|
assertEquals( 0x00, m.getElement(5), "Set Group Name to "+testStringC+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringC+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringC+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringC+": byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Name to "+testStringC+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringC+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringC+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringC+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringC+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringC+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringC+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringC+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringC+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringC+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringC+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[1] = 129;
|
|
String testStringD = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringD),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringD+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringD+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringD+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringD+": byte 3");
|
|
assertEquals( 0x02, m.getElement(4), "Set Group Name to "+testStringD+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringD+": byte 5");
|
|
assertEquals( 0x01, m.getElement(6), "Set Group Name to "+testStringD+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringD+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringD+": byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Name to "+testStringD+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringD+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringD+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringD+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringD+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringD+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringD+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringD+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringD+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringD+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringD+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[2] = 129;
|
|
String testStringE = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringE),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringE+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringE+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringE+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringE+": byte 3");
|
|
assertEquals( 0x04, m.getElement(4), "Set Group Name to "+testStringE+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringE+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringE+": byte 6");
|
|
assertEquals( 0x01, m.getElement(7), "Set Group Name to "+testStringE+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringE+": byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Name to "+testStringE+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringE+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringE+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringE+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringE+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringE+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringE+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringE+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringE+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringE+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringE+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[3] = 130;
|
|
String testStringF = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringF),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringF+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringF+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringF+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringF+": byte 3");
|
|
assertEquals( 0x08, m.getElement(4), "Set Group Name to "+testStringF+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringF+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringF+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringF+": byte 7");
|
|
assertEquals( 0x02, m.getElement(8), "Set Group Name to "+testStringF+": byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Name to "+testStringF+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringF+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringF+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringF+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringF+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringF+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringF+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringF+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringF+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringF+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringF+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[4] = 132;
|
|
String testStringG = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringG),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringG+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringG+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringG+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringG+": byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Name to "+testStringG+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringG+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringG+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringG+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringG+": byte 8");
|
|
assertEquals( 0x01, m.getElement(9), "Set Group Name to "+testStringG+": byte 9");
|
|
assertEquals( 0x04, m.getElement(10), "Set Group Name to "+testStringG+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringG+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringG+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringG+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringG+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringG+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringG+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringG+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringG+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringG+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[5] = 136;
|
|
String testStringH = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringH),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringH+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringH+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringH+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringH+": byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Name to "+testStringH+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringH+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringH+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringH+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringH+": byte 8");
|
|
assertEquals( 0x02, m.getElement(9), "Set Group Name to "+testStringH+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringH+": byte 10");
|
|
assertEquals( 0x08, m.getElement(11), "Set Group Name to "+testStringH+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringH+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringH+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringH+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringH+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringH+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringH+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringH+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringH+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[6] = 128+16;
|
|
String testStringI = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringI),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringI+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringI+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringI+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringI+": byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Name to "+testStringI+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringI+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringI+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringI+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringI+": byte 8");
|
|
assertEquals( 0x04, m.getElement(9), "Set Group Name to "+testStringI+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringI+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringI+": byte 11");
|
|
assertEquals( 0x10, m.getElement(12), "Set Group Name to "+testStringI+": byte 12");
|
|
assertEquals( 'l', m.getElement(13), "Set Group Name to "+testStringI+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringI+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringI+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringI+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringI+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringI+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringI+": byte 19");
|
|
|
|
testString = "fiducial";
|
|
cs = testString.toCharArray();
|
|
cs[7] = 128+32;
|
|
String testStringJ = new String(cs);
|
|
m = assertDoesNotThrow( () -> LnDplxGrpInfoImpl.createSetUr92GroupNamePacket(testStringJ),
|
|
"failed account exception thrown by createSetUr92GroupNamePacket()");
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Name to "+testStringJ+": opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Name to "+testStringJ+": byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Set Group Name to "+testStringJ+": byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Name to "+testStringJ+": byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Name to "+testStringJ+": byte 4");
|
|
assertEquals( 'f', m.getElement(5), "Set Group Name to "+testStringJ+": byte 5");
|
|
assertEquals( 'i', m.getElement(6), "Set Group Name to "+testStringJ+": byte 6");
|
|
assertEquals( 'd', m.getElement(7), "Set Group Name to "+testStringJ+": byte 7");
|
|
assertEquals( 'u', m.getElement(8), "Set Group Name to "+testStringJ+": byte 8");
|
|
assertEquals( 0x08, m.getElement(9), "Set Group Name to "+testStringJ+": byte 9");
|
|
assertEquals( 'c', m.getElement(10), "Set Group Name to "+testStringJ+": byte 10");
|
|
assertEquals( 'i', m.getElement(11), "Set Group Name to "+testStringJ+": byte 11");
|
|
assertEquals( 'a', m.getElement(12), "Set Group Name to "+testStringJ+": byte 12");
|
|
assertEquals( 0x20, m.getElement(13), "Set Group Name to "+testStringJ+": byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Name to "+testStringJ+": byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Name to "+testStringJ+": byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Name to "+testStringJ+": byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Name to "+testStringJ+": byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Name to "+testStringJ+": byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Name to "+testStringJ+": byte 19");
|
|
}
|
|
|
|
@Test
|
|
public void testCreateSetUr92GroupChannelPacket() {
|
|
LocoNetMessage m = new LocoNetMessage(20);
|
|
for (int ch = 0; ch < 256; ++ch) {
|
|
try {
|
|
m = LnDplxGrpInfoImpl.createSetUr92GroupChannelPacket(ch);
|
|
} catch ( LocoNetException e) {
|
|
if ((ch >= 11) && (ch <= 26)) {
|
|
fail("unexpected exception when creating packet to set channel "+ch, e);
|
|
}
|
|
}
|
|
if ((ch >= 11) && (ch <= 26)) {
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Channel to "+ch+" Message opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Channel to "+ch+" Message byte 1");
|
|
assertEquals( 0x02, m.getElement(2), "Set Group Channel to "+ch+" Message byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Channel to "+ch+" Message byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Channel to "+ch+" Message byte 4");
|
|
assertEquals( ch, m.getElement(5), "Set Group Channel to "+ch+" Message byte 5");
|
|
assertEquals( 0x00, m.getElement(6), "Set Group Channel to "+ch+" Message byte 6");
|
|
assertEquals( 0x00, m.getElement(7), "Set Group Channel to "+ch+" Message byte 7");
|
|
assertEquals( 0x00, m.getElement(8), "Set Group Channel to "+ch+" Message byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Channel to "+ch+" Message byte 9");
|
|
assertEquals( 0x00, m.getElement(10), "Set Group Channel to "+ch+" Message byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Set Group Channel to "+ch+" Message byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Set Group Channel to "+ch+" Message byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Set Group Channel to "+ch+" Message byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Channel to "+ch+" Message byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Channel to "+ch+" Message byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Channel to "+ch+" Message byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Channel to "+ch+" Message byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Channel to "+ch+" Message byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Channel to "+ch+" Message byte 19");
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testCreateSetUr92GroupPasswordPacket() {
|
|
LocoNetMessage m;
|
|
char c0, c1, c2, c3;
|
|
char[] conversion = new char[13];
|
|
conversion[0] = '0';
|
|
conversion[1] = '1';
|
|
conversion[2] = '2';
|
|
conversion[3] = '3';
|
|
conversion[4] = '4';
|
|
conversion[5] = '5';
|
|
conversion[6] = '6';
|
|
conversion[7] = '7';
|
|
conversion[8] = '8';
|
|
conversion[9] = '9';
|
|
conversion[10] = '9'+1;
|
|
conversion[11] = '9'+2;
|
|
conversion[12] = '9'+3;
|
|
char[] conversion2 = new char[13];
|
|
conversion2[0] = '0';
|
|
conversion2[1] = '1';
|
|
conversion2[2] = '2';
|
|
conversion2[3] = '3';
|
|
conversion2[4] = '4';
|
|
conversion2[5] = '5';
|
|
conversion2[6] = '6';
|
|
conversion2[7] = '7';
|
|
conversion2[8] = '8';
|
|
conversion2[9] = '9';
|
|
conversion2[10] = 'A';
|
|
conversion2[11] = 'B';
|
|
conversion2[12] = 'C';
|
|
|
|
char[] chars = new char[4];
|
|
for (int d0 = 0; d0 < 13; ++d0) {
|
|
for (int d1 = 0; d1 < 13; ++d1) {
|
|
for (int d2 = 0; d2 < 13; ++d2) {
|
|
for (int d3 = 0; d3 < 13; ++d3) {
|
|
c0 = conversion[d0];
|
|
c1 = conversion[d1];
|
|
c2 = conversion[d2];
|
|
c3 = conversion[d3];
|
|
chars[0] = conversion2[d0];
|
|
chars[1] = conversion2[d1];
|
|
chars[2] = conversion2[d2];
|
|
chars[3] = conversion2[d3];
|
|
String testString = new String(chars);
|
|
m = assertDoesNotThrow( () ->
|
|
LnDplxGrpInfoImpl.createSetUr92GroupPasswordPacket(testString),
|
|
"unexpected exception when creating packet to set password to "+d0+"/"+d1+"/"+d2+"/"+d3);
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group Password to "+testString+" Message opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group Password to "+testString+" Message byte 1");
|
|
assertEquals( 0x07, m.getElement(2), "Set Group Password to "+testString+" Message byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group Password to "+testString+" Message byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group Password to "+testString+" Message byte 4");
|
|
assertEquals( c0, m.getElement(5), "Set Group Password to "+testString+" Message byte 5");
|
|
assertEquals( c1, m.getElement(6), "Set Group Password to "+testString+" Message byte 6");
|
|
assertEquals( c2, m.getElement(7), "Set Group Password to "+testString+" Message byte 7");
|
|
assertEquals( c3, m.getElement(8), "Set Group Password to "+testString+" Message byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group Password to "+testString+" Message byte 9");
|
|
assertEquals( 0x00, m.getElement(10), "Set Group Password to "+testString+" Message byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Set Group Password to "+testString+" Message byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Set Group Password to "+testString+" Message byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Set Group Password to "+testString+" Message byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group Password to "+testString+" Message byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group Password to "+testString+" Message byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group Password to "+testString+" Message byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group Password to "+testString+" Message byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group Password to "+testString+" Message byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group Password to "+testString+" Message byte 19");
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testCreateSetUr92GroupIDPacket() {
|
|
LocoNetMessage m = new LocoNetMessage(20);
|
|
for (int d0 = -1; d0 < 256; ++d0) {
|
|
m.setElement(1, 9876);
|
|
try {
|
|
m = LnDplxGrpInfoImpl.createSetUr92GroupIDPacket(Integer.toString(d0));
|
|
} catch (jmri.jmrix.loconet.LocoNetException e) {
|
|
assertTrue( (d0 < 0)|| (d0 > 127), "expect exception only when range is outside of rante [0 to 127]");
|
|
}
|
|
if ((d0 >= 0) && (d0 < 128)) {
|
|
assertEquals( 0xe5, m.getElement(0), "Set Group ID to "+d0+" Message opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Set Group ID to "+d0+" Message byte 1");
|
|
assertEquals( 0x04, m.getElement(2), "Set Group ID to "+d0+" Message byte 2");
|
|
assertEquals( 0x00, m.getElement(3), "Set Group ID to "+d0+" Message byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Set Group ID to "+d0+" Message byte 4");
|
|
assertEquals( d0 & 0x7f, m.getElement(5), "Set Group ID to "+d0+" Message byte 5");
|
|
assertEquals( 0x00, m.getElement(6), "Set Group ID to "+d0+" Message byte 6");
|
|
assertEquals( 0x00, m.getElement(7), "Set Group ID to "+d0+" Message byte 7");
|
|
assertEquals( 0x00, m.getElement(8), "Set Group ID to "+d0+" Message byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Set Group ID to "+d0+" Message byte 9");
|
|
assertEquals( 0x00, m.getElement(10), "Set Group ID to "+d0+" Message byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Set Group ID to "+d0+" Message byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Set Group ID to "+d0+" Message byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Set Group ID to "+d0+" Message byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Set Group ID to "+d0+" Message byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Set Group ID to "+d0+" Message byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Set Group ID to "+d0+" Message byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Set Group ID to "+d0+" Message byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Set Group ID to "+d0+" Message byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Set Group ID to "+d0+" Message byte 19");
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testIsDuplexGroupMessage() {
|
|
LocoNetMessage m = new LocoNetMessage(20);
|
|
|
|
m.setElement(1, 0x14);
|
|
m.setElement(2, 2);
|
|
m.setElement(3, 8);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, 0);
|
|
m.setElement(6, 0);
|
|
m.setElement(7, 0);
|
|
m.setElement(8, 0);
|
|
m.setElement(9, 0);
|
|
m.setElement(10, 0);
|
|
m.setElement(11, 0);
|
|
m.setElement(12, 0);
|
|
m.setElement(13, 0);
|
|
m.setElement(14, 0);
|
|
m.setElement(15, 0);
|
|
m.setElement(16, 0);
|
|
m.setElement(17, 0);
|
|
m.setElement(18, 0);
|
|
m.setElement(19, 0);
|
|
for (int d0 = 0; d0 < 256; ++d0) {
|
|
m.setElement(0, d0);
|
|
assertEquals( (d0 == 0xe5), LnDplxGrpInfoImpl.isDuplexGroupMessage(m),
|
|
"checking isDuplexGroupMessage for opcode "+d0);
|
|
}
|
|
m.setElement(0, 0xe5);
|
|
for (int d1 = 0; d1 < 256; ++d1) {
|
|
m.setElement(1, d1);
|
|
assertEquals( (d1 == 0x14), LnDplxGrpInfoImpl.isDuplexGroupMessage(m),
|
|
"checking isDuplexGroupMessage for byte 1 "+d1);
|
|
}
|
|
m.setElement(1, 0x14);
|
|
for (int d2 = 0; d2 < 256; ++d2) {
|
|
m.setElement(2, d2);
|
|
assertEquals( (d2 == 2) || (d2 == 3) || (d2 == 4) || (d2 == 7),
|
|
LnDplxGrpInfoImpl.isDuplexGroupMessage(m),
|
|
"checking isDuplexGroupMessage for byte 2="+d2);
|
|
}
|
|
m.setElement(2, 0x2);
|
|
for (int d3 = 0; d3 < 256; ++d3) {
|
|
m.setElement(3, d3);
|
|
assertEquals( (d3 == 0) || (d3 == 8) || (d3 == 0x10),
|
|
LnDplxGrpInfoImpl.isDuplexGroupMessage(m),
|
|
"checking isDuplexGroupMessage for byte 3 "+d3);
|
|
}
|
|
m.setElement(3, 0);
|
|
for (int index = 4; index < 20; ++index) {
|
|
m.setElement(index-1, 0);
|
|
for (int i = 0; i < 16; ++i) {
|
|
int val = JUnitUtil.getRandom().nextInt(256);
|
|
m.setElement(index, val);
|
|
|
|
assertTrue( LnDplxGrpInfoImpl.isDuplexGroupMessage(m),
|
|
"checking isDuplexGroupMessge for byte " + index +
|
|
" as value " + val);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testGetDupGrpIdentityMsgType() {
|
|
// public static final DuplexGroupMessageType getDuplexGroupIdentityMessageType(LocoNetMessage m) {
|
|
// where DuplexGroupMessageType is comprised of:
|
|
// NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
// DUPLEX_GROUP_NAME_ETC_REPORT_MESSAGE,
|
|
// DUPLEX_GROUP_NAME_QUERY_MESSAGE,
|
|
// DUPLEX_GROUP_NAME_WRITE_MESSAGE, // b2=3, b3=0
|
|
// DUPLEX_GROUP_PASSWORD_REPORT_MESSAGE,
|
|
// DUPLEX_GROUP_PASSWORD_QUERY_MESSAGE,
|
|
// DUPLEX_GROUP_PASSWORD_WRITE_MESSAGE, // b2=7, b3=0
|
|
// DUPLEX_GROUP_CHANNEL_REPORT_MESSAGE,
|
|
// DUPLEX_GROUP_CHANNEL_QUERY_MESSAGE,
|
|
// DUPLEX_GROUP_CHANNEL_WRITE_MESSAGE, // b2=2, b3=0
|
|
// DUPLEX_GROUP_ID_REPORT_MESSAGE,
|
|
// DUPLEX_GROUP_ID_QUERY_MESSAGE,
|
|
// DUPLEX_GROUP_ID_WRITE_MESSAGE; // b2=4, B3=0
|
|
// }
|
|
|
|
LocoNetMessage m = new LocoNetMessage(2);
|
|
m.setElement(0, 0x81);
|
|
m.setElement(1, 0);
|
|
DuplexGroupMessageType mt;
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: 2 byte");
|
|
|
|
m = new LocoNetMessage(19);
|
|
m.setElement(0, 0xe5);
|
|
m.setElement(1, 0x13);
|
|
for (int i=2; i< 19;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: 19 byte");
|
|
|
|
m = new LocoNetMessage(21);
|
|
m.setElement(0, 0xe5);
|
|
m.setElement(1, 0x15);
|
|
for (int i=2; i< 21;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: 21 byte");
|
|
|
|
m = new LocoNetMessage(20);
|
|
m.setElement(0, 0xe5);
|
|
m.setElement(1, 0x13);
|
|
for (int i=2; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: 20 byte with 19-byte length value");
|
|
|
|
m.setElement(1, 0x16);
|
|
for (int i=2; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: 20 byte with 22-byte length value");
|
|
|
|
m.setElement(1, 0x14);
|
|
m.setElement(2, 0);
|
|
for (int i=3; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: byte 2="+m.getElement(2)+" not a Duplex value");
|
|
|
|
m.setElement(2, 1);
|
|
for (int i=3; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: byte 2="+m.getElement(2)+" not a Duplex value");
|
|
|
|
m.setElement(2, 5);
|
|
for (int i=3; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: byte 2="+m.getElement(2)+" not a Duplex value");
|
|
|
|
m.setElement(2, 6);
|
|
for (int i=3; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: byte 2="+m.getElement(2)+" not a Duplex value");
|
|
|
|
m.setElement(2, 8);
|
|
for (int i=3; i< 20;++i) { m.setElement(i, 0);}
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt, "not a duplex message: byte 2="+m.getElement(2)+" not a Duplex value");
|
|
|
|
m.setElement(2, 9);
|
|
for (int i=4; i< 20;++i) { m.setElement(i, 0);}
|
|
for (int i=0; i < 128; ++i) {
|
|
m.setElement(3, i);
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
assertEquals(
|
|
DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt,
|
|
"not a duplex message: byte 2="+m.getElement(2)+" not a Duplex value");
|
|
}
|
|
|
|
m.setElement(2, 2);
|
|
for (int i=0; i < 128; ++i) {
|
|
m.setElement(3, i);
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
switch (i) {
|
|
case 0:
|
|
assertEquals(
|
|
DuplexGroupMessageType.DUPLEX_GROUP_CHANNEL_WRITE_MESSAGE,
|
|
mt,
|
|
"duplex channel message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 8:
|
|
assertEquals(
|
|
DuplexGroupMessageType.DUPLEX_GROUP_CHANNEL_QUERY_MESSAGE,
|
|
mt,
|
|
"duplex channel message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 16:
|
|
assertEquals(
|
|
DuplexGroupMessageType.DUPLEX_GROUP_CHANNEL_REPORT_MESSAGE,
|
|
mt,
|
|
"duplex channel message: byte 4="+m.getElement(2)+" implies a Duplex message");
|
|
break;
|
|
default:
|
|
assertEquals(
|
|
DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt,
|
|
"not a duplex channel message: byte 4="+m.getElement(2)+" not a Duplex value");
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
m.setElement(2, 3);
|
|
for (int i=0; i < 128; ++i) {
|
|
m.setElement(3, i);
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
switch (i) {
|
|
case 0:
|
|
assertEquals(
|
|
DuplexGroupMessageType.DUPLEX_GROUP_NAME_WRITE_MESSAGE,
|
|
mt,
|
|
"duplex name message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 8:
|
|
assertEquals(
|
|
DuplexGroupMessageType.DUPLEX_GROUP_NAME_QUERY_MESSAGE,
|
|
mt,
|
|
"duplex name message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 16:
|
|
assertEquals(
|
|
DuplexGroupMessageType.DUPLEX_GROUP_NAME_ETC_REPORT_MESSAGE,
|
|
mt,
|
|
"duplex name message: byte 4="+m.getElement(2)+" implies a Duplex message");
|
|
break;
|
|
default:
|
|
assertEquals(
|
|
DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE,
|
|
mt,
|
|
"not a duplex name message: byte 4="+m.getElement(2)+" not a Duplex value");
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
m.setElement(2, 4);
|
|
for (int i=0; i < 128; ++i) {
|
|
m.setElement(3, i);
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
switch (i) {
|
|
case 0:
|
|
assertEquals( DuplexGroupMessageType.DUPLEX_GROUP_ID_WRITE_MESSAGE, mt,
|
|
"duplex ID message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 8:
|
|
assertEquals( DuplexGroupMessageType.DUPLEX_GROUP_ID_QUERY_MESSAGE, mt,
|
|
"duplex ID message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 16:
|
|
assertEquals( DuplexGroupMessageType.DUPLEX_GROUP_ID_REPORT_MESSAGE, mt,
|
|
"duplex id message: byte 4="+m.getElement(2)+" implies a Duplex message");
|
|
break;
|
|
default:
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE, mt,
|
|
"not a duplex id message: byte 4="+m.getElement(2)+" not a Duplex value");
|
|
break;
|
|
}
|
|
}
|
|
|
|
m.setElement(2, 7);
|
|
for (int i=0; i < 128; ++i) {
|
|
m.setElement(3, i);
|
|
mt = LnDplxGrpInfoImpl.getDuplexGroupIdentityMessageType(m);
|
|
switch (i) {
|
|
case 0:
|
|
assertEquals( DuplexGroupMessageType.DUPLEX_GROUP_PASSWORD_WRITE_MESSAGE, mt,
|
|
"duplex password message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 8:
|
|
assertEquals( DuplexGroupMessageType.DUPLEX_GROUP_PASSWORD_QUERY_MESSAGE, mt,
|
|
"duplex password message: byte 4="+m.getElement(4)+" implies a Duplex message");
|
|
break;
|
|
case 16:
|
|
assertEquals( DuplexGroupMessageType.DUPLEX_GROUP_PASSWORD_REPORT_MESSAGE, mt,
|
|
"duplex password message: byte 4="+m.getElement(2)+" implies a Duplex message");
|
|
break;
|
|
default:
|
|
assertEquals( DuplexGroupMessageType.NOT_A_DUPLEX_GROUP_MESSAGE, mt,
|
|
"not a duplex password message: byte 4="+m.getElement(2)+" not a Duplex value");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
public void testHandleMessageDuplexInfoReport() {
|
|
java.beans.PropertyChangeListener l = (java.beans.PropertyChangeEvent e) -> {
|
|
switch (e.getPropertyName()) {
|
|
case "DPLXPCK_STAT_LN_UPDATE":
|
|
// log.warn("prop change query seen");
|
|
propChangeQueryFlag = true;
|
|
break;
|
|
case "DPLXPCK_NAME_UPDATE": // prop change update seen
|
|
case "DPLX_PC_STAT_LN_UPDATE_IF_NOT_CURRENTLY_ERROR": // prop change update if not currently error seen
|
|
propChangeReportFlag = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
propChangeFlag = true;
|
|
propChangeCount++;
|
|
};
|
|
|
|
dpxGrpInfoImpl.addPropertyChangeListener(l);
|
|
propChangeCount = 0;
|
|
propChangeReportFlag = false;
|
|
propChangeQueryFlag = false;
|
|
|
|
assertFalse( propChangeFlag, "did not see property change flag yet");
|
|
assertFalse( propChangeReportFlag, "did not see property change flag yet");
|
|
assertFalse( propChangeQueryFlag, "did not see property change flag yet");
|
|
assertEquals( 0, propChangeCount, "no prop change listener firings yet");
|
|
|
|
assertFalse( dpxGrpInfoImpl.isAwaitingDuplexGroupReportMessage(),
|
|
"not yet waiting for Duplex Group Name, etc. Report");
|
|
dpxGrpInfoImpl.queryDuplexGroupIdentity();
|
|
assertTrue( dpxGrpInfoImpl.isAwaitingDuplexGroupReportMessage(),
|
|
"Now waiting for Duplex Group Name, etc. Report");
|
|
|
|
|
|
|
|
assertTrue( propChangeReportFlag, "did see initial property change Report flag");
|
|
assertEquals( 9, propChangeCount, "Did see a bunch of invalidation prop changes");
|
|
|
|
propChangeCount = 0;
|
|
propChangeReportFlag = false;
|
|
|
|
LocoNetMessage rcvMsg = lnis.outbound.get(0);
|
|
dpxGrpInfoImpl.message(rcvMsg); // echo the transmitted message back to the sender
|
|
|
|
int ch = 4;
|
|
int id = 131;
|
|
String name = "\231\032\033\034\035\036\237\140";
|
|
String pass="0200";
|
|
LocoNetMessage m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket(name, pass, ch, id);
|
|
assertTrue( dpxGrpInfoImpl.isAwaitingDuplexGroupReportMessage(),
|
|
"Now waiting (2) for Duplex Group Name, etc. Report");
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertFalse( dpxGrpInfoImpl.isAwaitingDuplexGroupReportMessage(),
|
|
"No longer waiting for Duplex Group Name, etc. Report");
|
|
assertEquals( 12, propChangeCount, "Expected 11 prop change events");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
assertFalse( dpxGrpInfoImpl.isAwaitingDuplexGroupReportMessage(), "No longer (2) waiting for Duplex Group Name, etc. Report");
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 2, propChangeCount, "Expected exactly 2 prop change events, one count, one detail");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(6, m.getElement(6)^1);
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 3, propChangeCount, "Expected exactly 3 prop change event");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(6, m.getElement(6)^1);
|
|
m.setElement(15, m.getElement(15)^1);
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 3, propChangeCount, "Expected exactly 3 prop change event");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(15, m.getElement(15)^1);
|
|
m.setElement(17, m.getElement(17)^1);
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 3, propChangeCount, "Expected exactly 3 prop change event");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(17, m.getElement(17)^1);
|
|
m.setElement(18, m.getElement(18)^1);
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 3, propChangeCount, "Expected exactly 3 prop change event");
|
|
|
|
JUnitUtil.waitFor(1300);
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(17, m.getElement(17)^1);
|
|
m.setElement(18, m.getElement(18)^1);
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 3, propChangeCount, "Expected exactly 3 prop change event");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(17, m.getElement(17)^1);
|
|
m.setElement(18, m.getElement(18)^1);
|
|
m.setElement(6, m.getElement(6)^1);
|
|
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == true;},"message received");
|
|
assertEquals( 3, propChangeCount, "Expected exactly 3 prop change event");
|
|
assertFalse( dpxGrpInfoImpl.isIplQueryTimerRunning(), "Query Timer no longer running");
|
|
|
|
propChangeCount = 0;
|
|
propChangeFlag = false;
|
|
propChangeQueryFlag = false;
|
|
propChangeReportFlag = false;
|
|
|
|
m.setElement(0, m.getElement(0) ^ 1);
|
|
dpxGrpInfoImpl.message(m); // transmit the reply
|
|
JUnitUtil.fasterWaitFor(()->{return propChangeFlag == false;},"message received");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void checkCreateUr92GroupNameReportPacket() {
|
|
int ch = 7, id = 4;
|
|
String name = "AbcdeFgh", pass="ABC0";
|
|
LocoNetMessage m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket(name, pass, ch, id);
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Group Id Query Message: opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Group Id Query Message: byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Group Id Query Message: byte 2");
|
|
assertEquals( 0x10, m.getElement(3), "Group Id Query Message: byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Group Id Query Message: byte 4");
|
|
assertEquals( 0x41, m.getElement(5), "Group Id Query Message: byte 5");
|
|
assertEquals( 0x62, m.getElement(6), "Group Id Query Message: byte 6");
|
|
assertEquals( 0x63, m.getElement(7), "Group Id Query Message: byte 7");
|
|
assertEquals( 0x64, m.getElement(8), "Group Id Query Message: byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Group Id Query Message: byte 9");
|
|
assertEquals( 0x65, m.getElement(10), "Group Id Query Message: byte 10");
|
|
assertEquals( 0x46, m.getElement(11), "Group Id Query Message: byte 11");
|
|
assertEquals( 0x67, m.getElement(12), "Group Id Query Message: byte 12");
|
|
assertEquals( 0x68, m.getElement(13), "Group Id Query Message: byte 13");
|
|
assertEquals( 0x03, m.getElement(14), "Group Id Query Message: byte 14");
|
|
assertEquals( 0x2b, m.getElement(15), "Group Id Query Message: byte 15");
|
|
assertEquals( 0x40, m.getElement(16), "Group Id Query Message: byte 16");
|
|
assertEquals( 0x7, m.getElement(17), "Group Id Query Message: byte 17");
|
|
assertEquals( 0x4, m.getElement(18), "Group Id Query Message: byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Group Id Query Message: byte 19");
|
|
|
|
ch = 0; id = 7;
|
|
name = "\0\0\0\0\0\0\0\0"; pass="733B";
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket(name, pass, ch, id);
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Group Id Query Message: opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Group Id Query Message: byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Group Id Query Message: byte 2");
|
|
assertEquals( 0x10, m.getElement(3), "Group Id Query Message: byte 3");
|
|
assertEquals( 0x00, m.getElement(4), "Group Id Query Message: byte 4");
|
|
assertEquals( 0x0, m.getElement(5), "Group Id Query Message: byte 5");
|
|
assertEquals( 0x0, m.getElement(6), "Group Id Query Message: byte 6");
|
|
assertEquals( 0x0, m.getElement(7), "Group Id Query Message: byte 7");
|
|
assertEquals( 0x0, m.getElement(8), "Group Id Query Message: byte 8");
|
|
assertEquals( 0x00, m.getElement(9), "Group Id Query Message: byte 9");
|
|
assertEquals( 0x0, m.getElement(10), "Group Id Query Message: byte 10");
|
|
assertEquals( 0x0, m.getElement(11), "Group Id Query Message: byte 11");
|
|
assertEquals( 0x0, m.getElement(12), "Group Id Query Message: byte 12");
|
|
assertEquals( 0x0, m.getElement(13), "Group Id Query Message: byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Group Id Query Message: byte 14");
|
|
assertEquals( 0x73, m.getElement(15), "Group Id Query Message: byte 15");
|
|
assertEquals( 0x3b, m.getElement(16), "Group Id Query Message: byte 16");
|
|
assertEquals( 0x0, m.getElement(17), "Group Id Query Message: byte 17");
|
|
assertEquals( 0x7, m.getElement(18), "Group Id Query Message: byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Group Id Query Message: byte 19");
|
|
|
|
ch = 129; id = 2;
|
|
name = "\200\201\202\203\204\205\206\207"; pass="0001";
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket(name, pass, ch, id);
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Group Id Query Message: opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Group Id Query Message: byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Group Id Query Message: byte 2");
|
|
assertEquals( 0x10, m.getElement(3), "Group Id Query Message: byte 3");
|
|
assertEquals( 0x0f, m.getElement(4), "Group Id Query Message: byte 4");
|
|
assertEquals( 0x00, m.getElement(5), "Group Id Query Message: byte 5");
|
|
assertEquals( 0x01, m.getElement(6), "Group Id Query Message: byte 6");
|
|
assertEquals( 0x02, m.getElement(7), "Group Id Query Message: byte 7");
|
|
assertEquals( 0x03, m.getElement(8), "Group Id Query Message: byte 8");
|
|
assertEquals( 0x0f, m.getElement(9), "Group Id Query Message: byte 9");
|
|
assertEquals( 0x04, m.getElement(10), "Group Id Query Message: byte 10");
|
|
assertEquals( 0x05, m.getElement(11), "Group Id Query Message: byte 11");
|
|
assertEquals( 0x06, m.getElement(12), "Group Id Query Message: byte 12");
|
|
assertEquals( 0x07, m.getElement(13), "Group Id Query Message: byte 13");
|
|
assertEquals( 0x04, m.getElement(14), "Group Id Query Message: byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Group Id Query Message: byte 15");
|
|
assertEquals( 0x01, m.getElement(16), "Group Id Query Message: byte 16");
|
|
assertEquals( 0x1, m.getElement(17), "Group Id Query Message: byte 17");
|
|
assertEquals( 0x2, m.getElement(18), "Group Id Query Message: byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Group Id Query Message: byte 19");
|
|
|
|
ch = 4; id = 131;
|
|
name = "\231\032\033\034\035\036\237\140"; pass="0200";
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket(name, pass, ch, id);
|
|
|
|
assertEquals( 0xe5, m.getElement(0), "Group Id Query Message: opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Group Id Query Message: byte 1");
|
|
assertEquals( 0x03, m.getElement(2), "Group Id Query Message: byte 2");
|
|
assertEquals( 0x10, m.getElement(3), "Group Id Query Message: byte 3");
|
|
assertEquals( 0x01, m.getElement(4), "Group Id Query Message: byte 4");
|
|
assertEquals( 0x19, m.getElement(5), "Group Id Query Message: byte 5");
|
|
assertEquals( 0x1a, m.getElement(6), "Group Id Query Message: byte 6");
|
|
assertEquals( 0x1b, m.getElement(7), "Group Id Query Message: byte 7");
|
|
assertEquals( 0x1c, m.getElement(8), "Group Id Query Message: byte 8");
|
|
assertEquals( 0x04, m.getElement(9), "Group Id Query Message: byte 9");
|
|
assertEquals( 0x1d, m.getElement(10), "Group Id Query Message: byte 10");
|
|
assertEquals( 0x1e, m.getElement(11), "Group Id Query Message: byte 11");
|
|
assertEquals( 0x1f, m.getElement(12), "Group Id Query Message: byte 12");
|
|
assertEquals( 0x60, m.getElement(13), "Group Id Query Message: byte 13");
|
|
assertEquals( 0x08, m.getElement(14), "Group Id Query Message: byte 14");
|
|
assertEquals( 0x02, m.getElement(15), "Group Id Query Message: byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Group Id Query Message: byte 16");
|
|
assertEquals( 0x4, m.getElement(17), "Group Id Query Message: byte 17");
|
|
assertEquals( 0x3, m.getElement(18), "Group Id Query Message: byte 18");
|
|
assertEquals( 0x00, m.getElement(19), "Group Id Query Message: byte 19");
|
|
|
|
}
|
|
|
|
|
|
@Test
|
|
public void testCreatePasswordMessage() {
|
|
LocoNetMessage m = LnDplxGrpInfoImpl.createUr92GroupPasswordReportPacket("1234");
|
|
assertEquals( 0xe5, m.getOpCode(), "Opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Byte 01");
|
|
assertEquals( 0x07, m.getElement(2), "Byte 02");
|
|
assertEquals( 0x10, m.getElement(3), "Byte 03");
|
|
assertEquals( 0x00, m.getElement(4), "Byte 04");
|
|
assertEquals( 0x31, m.getElement(5), "Byte 05");
|
|
assertEquals( 0x32, m.getElement(6), "Byte 06");
|
|
assertEquals( 0x33, m.getElement(7), "Byte 07");
|
|
assertEquals( 0x34, m.getElement(8), "Byte 08");
|
|
assertEquals( 0x00, m.getElement(9), "Byte 09");
|
|
assertEquals( 0x00, m.getElement(10), "Byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Byte 18");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupPasswordReportPacket("123A");
|
|
assertEquals( 0xe5, m.getOpCode(), "Opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Byte 01");
|
|
assertEquals( 0x07, m.getElement(2), "Byte 02");
|
|
assertEquals( 0x10, m.getElement(3), "Byte 03");
|
|
assertEquals( 0x00, m.getElement(4), "Byte 04");
|
|
assertEquals( 0x31, m.getElement(5), "Byte 05");
|
|
assertEquals( 0x32, m.getElement(6), "Byte 06");
|
|
assertEquals( 0x33, m.getElement(7), "Byte 07");
|
|
assertEquals( 0x41, m.getElement(8), "Byte 08");
|
|
assertEquals( 0x00, m.getElement(9), "Byte 09");
|
|
assertEquals( 0x00, m.getElement(10), "Byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Byte 18");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupPasswordReportPacket("12C0");
|
|
assertEquals( 0xe5, m.getOpCode(), "Opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Byte 01");
|
|
assertEquals( 0x07, m.getElement(2), "Byte 02");
|
|
assertEquals( 0x10, m.getElement(3), "Byte 03");
|
|
assertEquals( 0x00, m.getElement(4), "Byte 04");
|
|
assertEquals( 0x31, m.getElement(5), "Byte 05");
|
|
assertEquals( 0x32, m.getElement(6), "Byte 06");
|
|
assertEquals( 0x43, m.getElement(7), "Byte 07");
|
|
assertEquals( 0x30, m.getElement(8), "Byte 08");
|
|
assertEquals( 0x00, m.getElement(9), "Byte 09");
|
|
assertEquals( 0x00, m.getElement(10), "Byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Byte 18");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupPasswordReportPacket("9B00");
|
|
assertEquals( 0xe5, m.getOpCode(), "Opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Byte 01");
|
|
assertEquals( 0x07, m.getElement(2), "Byte 02");
|
|
assertEquals( 0x10, m.getElement(3), "Byte 03");
|
|
assertEquals( 0x00, m.getElement(4), "Byte 04");
|
|
assertEquals( 0x39, m.getElement(5), "Byte 05");
|
|
assertEquals( 0x42, m.getElement(6), "Byte 06");
|
|
assertEquals( 0x30, m.getElement(7), "Byte 07");
|
|
assertEquals( 0x30, m.getElement(8), "Byte 08");
|
|
assertEquals( 0x00, m.getElement(9), "Byte 09");
|
|
assertEquals( 0x00, m.getElement(10), "Byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Byte 18");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupPasswordReportPacket("A999");
|
|
assertEquals( 0xe5, m.getOpCode(), "Opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Byte 01");
|
|
assertEquals( 0x07, m.getElement(2), "Byte 02");
|
|
assertEquals( 0x10, m.getElement(3), "Byte 03");
|
|
assertEquals( 0x00, m.getElement(4), "Byte 04");
|
|
assertEquals( 0x41, m.getElement(5), "Byte 05");
|
|
assertEquals( 0x39, m.getElement(6), "Byte 06");
|
|
assertEquals( 0x39, m.getElement(7), "Byte 07");
|
|
assertEquals( 0x39, m.getElement(8), "Byte 08");
|
|
assertEquals( 0x00, m.getElement(9), "Byte 09");
|
|
assertEquals( 0x00, m.getElement(10), "Byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Byte 18");
|
|
|
|
String password = "\250\200\150\100";
|
|
m = LnDplxGrpInfoImpl.createUr92GroupPasswordReportPacket(password);
|
|
assertEquals( 0xe5, m.getOpCode(), "Opcode");
|
|
assertEquals( 0x14, m.getElement(1), "Byte 01");
|
|
assertEquals( 0x07, m.getElement(2), "Byte 02");
|
|
assertEquals( 0x10, m.getElement(3), "Byte 03");
|
|
assertEquals( 0x0c, m.getElement(4), "Byte 04");
|
|
assertEquals( 0x28, m.getElement(5), "Byte 05");
|
|
assertEquals( 0x00, m.getElement(6), "Byte 06");
|
|
assertEquals( 0x68, m.getElement(7), "Byte 07");
|
|
assertEquals( 0x40, m.getElement(8), "Byte 08");
|
|
assertEquals( 0x00, m.getElement(9), "Byte 09");
|
|
assertEquals( 0x00, m.getElement(10), "Byte 10");
|
|
assertEquals( 0x00, m.getElement(11), "Byte 11");
|
|
assertEquals( 0x00, m.getElement(12), "Byte 12");
|
|
assertEquals( 0x00, m.getElement(13), "Byte 13");
|
|
assertEquals( 0x00, m.getElement(14), "Byte 14");
|
|
assertEquals( 0x00, m.getElement(15), "Byte 15");
|
|
assertEquals( 0x00, m.getElement(16), "Byte 16");
|
|
assertEquals( 0x00, m.getElement(17), "Byte 17");
|
|
assertEquals( 0x00, m.getElement(18), "Byte 18");
|
|
|
|
}
|
|
|
|
@ToDo("Fix test, JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 2;}); ")
|
|
// @edu.umd.cs.findbugs.annotations.SuppressFBWarnings( value = "DB_DUPLICATE_SWITCH_CLAUSES",
|
|
// justification = "keep seperate property changes")
|
|
@Test
|
|
public void testCountAndQuery() {
|
|
|
|
JUnitUtil.fasterWaitFor(()->{return (!dpxGrpInfoImpl.isDuplexGroupQueryRunning());},"dpxGrpInfoImpl not running");
|
|
|
|
java.beans.PropertyChangeListener l = (java.beans.PropertyChangeEvent e) -> {
|
|
// log.warn("prop change query seen[{}]", e.getPropertyName());
|
|
switch (e.getPropertyName()) {
|
|
case "DPLXPCK_STAT_LN_UPDATE":
|
|
propChangeQueryFlag = true;
|
|
break;
|
|
case "DPLXPCK_NAME_UPDATE":
|
|
case "DPLX_PC_STAT_LN_UPDATE_IF_NOT_CURRENTLY_ERROR":
|
|
propChangeReportFlag = true;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
propChangeFlag = true;
|
|
propChangeCount++;
|
|
};
|
|
|
|
dpxGrpInfoImpl.addPropertyChangeListener(l);
|
|
propChangeCount = 0;
|
|
propChangeReportFlag = false;
|
|
propChangeQueryFlag = false;
|
|
assertEquals( 0, propChangeCount, "propChangeCount is reset to 0");
|
|
|
|
lnis.outbound.removeAllElements(); // clear any possible previous loconet traffic
|
|
|
|
assertEquals( 0, propChangeCount, "propChangeCount is reset to 0");
|
|
assertFalse( dpxGrpInfoImpl.isWaitingForFirstUr92IPLReport(),
|
|
"LDGII is not yet waiting for second UR92 Group report (1)");
|
|
lnis.outbound.removeAllElements();
|
|
assertEquals( 0, propChangeCount, "propChangeCount is reset to 0");
|
|
assertEquals( 0, dpxGrpInfoImpl.getNumUr92s(), "Num UR92s is zero");
|
|
assertEquals( 0, lnis.outbound.size(), "LNIS outbound queue is empty");
|
|
assertEquals( 0, propChangeCount, "propChangeCount is reset to 0");
|
|
dpxGrpInfoImpl.countUr92sAndQueryDuplexIdentityInfo();
|
|
assertEquals( 21, propChangeCount, "propChangeCount is now 21");
|
|
JUnitUtil.waitFor(()->{return !lnis.outbound.isEmpty();}, "UR92 IPL query not received");
|
|
|
|
assertEquals( 21, propChangeCount, "propChangeCount is now 21");
|
|
assertEquals( 1, lnis.outbound.size(), "LNIS outbound queue has one message");
|
|
|
|
assertTrue( dpxGrpInfoImpl.isWaitingForFirstUr92IPLReport(), "LDGII is not yet waiting for second UR92 Group report (2)");
|
|
lnis.sendTestMessage(lnis.outbound.elementAt(lnis.outbound.size()-1));
|
|
|
|
LocoNetMessage m2 = LnIPLImplementation.createIplUr92QueryPacket();
|
|
LocoNetMessage m = lnis.outbound.firstElement();
|
|
assertEquals( m2.getNumDataElements(), m.getNumDataElements(),
|
|
"LocoNet message has same number of bytes as UR92 IPL Query message");
|
|
|
|
for (int i = 0; i < m2.getNumDataElements(); ++i) {
|
|
assertEquals( m2.getElement(i), m.getElement(i),
|
|
"Received LocoNet message byte "+i+" equals corresponding UR92 IPL Query Message byte");
|
|
}
|
|
lnis.sendTestMessage(m2);
|
|
|
|
assertEquals( 21, propChangeCount, "expect propChangeCount of 21");
|
|
propChangeCount = 0;
|
|
|
|
m = new LocoNetMessage(20);
|
|
m.setOpCode(0xE5);
|
|
m.setElement(1, 0x14);
|
|
m.setElement(2, 0x0F);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, 92);
|
|
m.setElement(6, 24);
|
|
m.setElement(7, 0);
|
|
m.setElement(8, 0);
|
|
m.setElement(9, 0);
|
|
m.setElement(10, 0);
|
|
m.setElement(11, 0);
|
|
m.setElement(12, 0);
|
|
m.setElement(13, 0);
|
|
m.setElement(14, 0);
|
|
m.setElement(15, 0);
|
|
m.setElement(16, 0);
|
|
m.setElement(17, 0);
|
|
m.setElement(18, 0);
|
|
m.setElement(19, 0);
|
|
assertEquals( 0, propChangeCount, "expect propChangeCount of 0");
|
|
lnis.sendLocoNetMessage(m);
|
|
assertEquals( 0, dpxGrpInfoImpl.getNumUr92s(), "Num UR92s is zero");
|
|
assertEquals( 2, lnis.outbound.size(), "2 messages transmitted thus far");
|
|
|
|
assertEquals( 0, propChangeCount, "expect propChangeCount of 0");
|
|
|
|
dpxGrpInfoImpl.message(lnis.outbound.elementAt(1)); // return the LocoNet echo to the class
|
|
assertEquals( 1, propChangeCount, "expect propChangeCount of 1");
|
|
JUnitUtil.waitFor(()->{return dpxGrpInfoImpl.getNumUr92s() > 0;}, "UR92 IPL reply not received");
|
|
assertEquals( 1, dpxGrpInfoImpl.getNumUr92s(), "got 1 UR92 IPL report");
|
|
|
|
assertFalse( dpxGrpInfoImpl.isWaitingForFirstUr92IPLReport(),
|
|
"LDGII is no longer waiting for second UR92 IPL report (3)");
|
|
|
|
JUnitUtil.waitFor(()->{return lnis.outbound.size() == 3;}, "UR92 group query not received?");
|
|
|
|
assertFalse( dpxGrpInfoImpl.isWaitingForFirstUr92IPLReport(), "LDGII is no longer waiting for UR92 IPL replies (4)");
|
|
JUnitUtil.waitFor(()->{return lnis.outbound.size() == 3;},"wait for lnis outbound 3");
|
|
assertEquals( 0xe5, lnis.outbound.elementAt(2).getOpCode(), "message is Duplex Group Info Query - opcode");
|
|
assertEquals( 0x14, lnis.outbound.elementAt(2).getElement(1), "message is Duplex Group Info Query - b1");
|
|
assertEquals( 3, lnis.outbound.elementAt(2).getElement(2), "message is Duplex Group Info Query - b2");
|
|
assertEquals( 8, lnis.outbound.elementAt(2).getElement(3), "message is Duplex Group Info Query - b3");
|
|
|
|
dpxGrpInfoImpl.message(lnis.outbound.elementAt(2)); // echo the Duplex Group Info Query message
|
|
assertFalse( dpxGrpInfoImpl.isWaitingForFirstUr92IPLReport(), "LDGII is no longer waiting for UR92 IPL replies (5)");
|
|
|
|
assertEquals( 13, propChangeCount, "expect propChangeCount of 13");
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket("Digitrax", "1234", 12, 65);
|
|
lnis.sendTestMessage(m);
|
|
|
|
assertEquals( 24, propChangeCount, "expect propChangeCount of 24");
|
|
|
|
assertEquals( 3, lnis.outbound.size(), "num outbound");
|
|
|
|
assertEquals( 1, dpxGrpInfoImpl.getNumUr92s(), "got the UR92 reply info");
|
|
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 2;},
|
|
// "2022 June - does not get to 2, was " + dpxGrpInfoImpl.getNumUr92s());
|
|
|
|
JUnitUtil.waitFor( () -> propChangeCount > 26, "wait for 27");
|
|
assertEquals( 27, propChangeCount, "expect propChangeCount of 27");
|
|
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 3;}, "Does not get to 3");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket("Dcgitrax", "1234", 12, 65);
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 4;}, "Does not get to 4");
|
|
assertEquals( 32, propChangeCount, "expect propChangeCount of 32");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket("Digitrax", "1034", 12, 65);
|
|
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 5;}, "Does not get to 5");
|
|
assertEquals( 35, propChangeCount, "expect propChangeCount of 35");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket("Digitrax", "1234", 13, 65);
|
|
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 6;}, "Does not get to 6");
|
|
assertEquals( 38, propChangeCount, "expect propChangeCount of 38");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket("Digitrax", "1234", 12, 7);
|
|
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 7;}, "Does not get to 7");
|
|
assertEquals( 41, propChangeCount, "expect propChangeCount of 41");
|
|
|
|
m = LnDplxGrpInfoImpl.createUr92GroupNameReportPacket("Digitrax", "1234", 12, 65);
|
|
|
|
lnis.sendTestMessage(m);
|
|
// JUnitUtil.fasterWaitFor(()->{return dpxGrpInfoImpl.getNumUr92s() == 8;}, "Does not get to 8");
|
|
|
|
assertEquals( 43, propChangeCount, "expect propChangeCount of 43");
|
|
|
|
JUnitUtil.fasterWaitFor(()->{return (!dpxGrpInfoImpl.isDuplexGroupQueryRunning());},"dpxGrpInfoImpl not running");
|
|
|
|
propChangeCount = 0;
|
|
propChangeReportFlag = false;
|
|
propChangeQueryFlag = false;
|
|
|
|
assertEquals( 0, propChangeCount, "propChangeCount is reset to 0");
|
|
dpxGrpInfoImpl.countUr92sAndQueryDuplexIdentityInfo();
|
|
assertEquals( 21, propChangeCount, "propChangeCount is now 21");
|
|
dpxGrpInfoImpl.countUr92sAndQueryDuplexIdentityInfo();
|
|
assertEquals( 22, propChangeCount, "propChangeCount is now 22");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testCreateDupGrpChReportMessage() {
|
|
LocoNetMessage m;
|
|
for (int ii = 0; ii < 256; ++ii) {
|
|
int i = ii;
|
|
m = LnDplxGrpInfoImpl.createUr92GroupChannelReportPacket(i);
|
|
assertEquals( 0xe5, m.getOpCode(), () -> "iteration "+i+"Group Channel Report Packet Opcode is 0xe5");
|
|
assertEquals( 0x14, m.getElement(1), () -> "iteration "+i+"Group Channel Report Packet Byte 1 is 0x14");
|
|
assertEquals( 0x2, m.getElement(2), () -> "iteration "+i+"Group Channel Report Packet Byte 2 is 0x2");
|
|
assertEquals( 0x10, m.getElement(3), () -> "iteration "+i+"Group Channel Report Packet Byte 3 is 0x10");
|
|
assertEquals( (i > 127) ? 1 : 0, m.getElement(4),
|
|
() -> "iteration "+i+"Group Channel Report Packet Byte 4 is "+ ((i > 127) ? 1 : 0));
|
|
assertEquals( i & 0x7F, m.getElement(5),
|
|
() -> "iteration "+i+"Group Channel Report Packet Byte 5 is " + (i & 0x7f));
|
|
assertEquals( 0x0, m.getElement(6), () -> "iteration "+i+"Group Channel Report Packet Byte 6 is 0x0");
|
|
assertEquals( 0x0, m.getElement(7), () -> "iteration "+i+"Group Channel Report Packet Byte 7 is 0x0");
|
|
assertEquals( 0x0, m.getElement(8), () -> "iteration "+i+"Group Channel Report Packet Byte 8 is 0x0");
|
|
assertEquals( 0x0, m.getElement(9), () -> "iteration "+i+"Group Channel Report Packet Byte 9 is 0x0");
|
|
assertEquals( 0x0, m.getElement(10), () -> "iteration "+i+"Group Channel Report Packet Byte 10 is 0x0");
|
|
assertEquals( 0x0, m.getElement(11), () -> "iteration "+i+"Group Channel Report Packet Byte 11 is 0x0");
|
|
assertEquals( 0x0, m.getElement(12), () -> "iteration "+i+"Group Channel Report Packet Byte 12 is 0x0");
|
|
assertEquals( 0x0, m.getElement(13), () -> "iteration "+i+"Group Channel Report Packet Byte 13 is 0x0");
|
|
assertEquals( 0x0, m.getElement(14), () -> "iteration "+i+"Group Channel Report Packet Byte 14 is 0x0");
|
|
assertEquals( 0x0, m.getElement(15), () -> "iteration "+i+"Group Channel Report Packet Byte 15 is 0x0");
|
|
assertEquals( 0x0, m.getElement(16), () -> "iteration "+i+"Group Channel Report Packet Byte 16 is 0x0");
|
|
assertEquals( 0x0, m.getElement(17), () -> "iteration "+i+"Group Channel Report Packet Byte 17 is 0x0");
|
|
assertEquals( 0x0, m.getElement(18), () -> "iteration "+i+"Group Channel Report Packet Byte 18 is 0x0");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testCreateDupGrpIDReportMessage() {
|
|
LocoNetMessage m;
|
|
for (int ii = 0; ii < 256; ++ii) {
|
|
int i = ii;
|
|
m = LnDplxGrpInfoImpl.createUr92GroupIdReportPacket(i);
|
|
assertEquals( 0xe5, m.getOpCode(), () -> "iteration "+i+"Group ID Report Packet Opcode is 0xe5");
|
|
assertEquals( 0x14, m.getElement(1), () -> "iteration "+i+"Group ID Report Packet Byte 1 is 0x14");
|
|
assertEquals( 0x4, m.getElement(2), () -> "iteration "+i+"Group ID Report Packet Byte 2 is 0x4");
|
|
assertEquals( 0x10, m.getElement(3), () -> "iteration "+i+"Group ID Report Packet Byte 3 is 0x10");
|
|
assertEquals( (i > 127) ? 1 : 0, m.getElement(4),
|
|
() -> "iteration "+i+"Group ID Report Packet Byte 4 is "+ ((i > 127) ? 1 : 0));
|
|
assertEquals( i & 0x7F, m.getElement(5),
|
|
() -> "iteration "+i+"Group ID Report Packet Byte 5 is " + (i & 0x7f));
|
|
assertEquals( 0x0, m.getElement(6), () -> "iteration "+i+"Group ID Report Packet Byte 6 is 0x0");
|
|
assertEquals( 0x0, m.getElement(7), () -> "iteration "+i+"Group ID Report Packet Byte 7 is 0x0");
|
|
assertEquals( 0x0, m.getElement(8), () -> "iteration "+i+"Group ID Report Packet Byte 8 is 0x0");
|
|
assertEquals( 0x0, m.getElement(9), () -> "iteration "+i+"Group ID Report Packet Byte 9 is 0x0");
|
|
assertEquals( 0x0, m.getElement(10), () -> "iteration "+i+"Group ID Report Packet Byte 10 is 0x0");
|
|
assertEquals( 0x0, m.getElement(11), () -> "iteration "+i+"Group ID Report Packet Byte 11 is 0x0");
|
|
assertEquals( 0x0, m.getElement(12), () -> "iteration "+i+"Group ID Report Packet Byte 12 is 0x0");
|
|
assertEquals( 0x0, m.getElement(13), () -> "iteration "+i+"Group ID Report Packet Byte 13 is 0x0");
|
|
assertEquals( 0x0, m.getElement(14), () -> "iteration "+i+"Group ID Report Packet Byte 14 is 0x0");
|
|
assertEquals( 0x0, m.getElement(15), () -> "iteration "+i+"Group ID Report Packet Byte 15 is 0x0");
|
|
assertEquals( 0x0, m.getElement(16), () -> "iteration "+i+"Group ID Report Packet Byte 16 is 0x0");
|
|
assertEquals( 0x0, m.getElement(17), () -> "iteration "+i+"Group ID Report Packet Byte 17 is 0x0");
|
|
assertEquals( 0x0, m.getElement(18), () -> "iteration "+i+"Group ID Report Packet Byte 18 is 0x0");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testExtractDuplexGroupPassword() {
|
|
char[] conversion2 = new char[13];
|
|
conversion2[0] = '0';
|
|
conversion2[1] = '1';
|
|
conversion2[2] = '2';
|
|
conversion2[3] = '3';
|
|
conversion2[4] = '4';
|
|
conversion2[5] = '5';
|
|
conversion2[6] = '6';
|
|
conversion2[7] = '7';
|
|
conversion2[8] = '8';
|
|
conversion2[9] = '9';
|
|
conversion2[10] = 'A';
|
|
conversion2[11] = 'B';
|
|
conversion2[12] = 'C';
|
|
|
|
LocoNetMessage m = new LocoNetMessage(20);
|
|
m.setElement(0, 0xe5);
|
|
m.setElement(1, 0x14);
|
|
for (int i=2; i<20;++i) {
|
|
m.setElement(i, 0);
|
|
}
|
|
String testString;
|
|
String result;
|
|
for (int i=0; i<13; ++i) {
|
|
testString = conversion2[i]+"000";
|
|
m.setElement(2, 3);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(14, (i>7)?1:0);
|
|
m.setElement(15, (i & 7) << 4);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals(testString, result,
|
|
"Group Name etc Report "+m+"first char iteration "+i);
|
|
|
|
m.setElement(2, 3);
|
|
m.setElement(3, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertNull( result, "Group Name etc Write first char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals(testString, result,
|
|
"Group Pw Write "+m+"first char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Pw Report "+m+"first char iteration "+i);
|
|
}
|
|
|
|
for (int i=0; i<13; ++i) {
|
|
testString = "0"+conversion2[i]+"00";
|
|
m.setElement(2, 3);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(14, 0);
|
|
m.setElement(15, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Name etc Report "+m+"second char iteration "+i);
|
|
|
|
m.setElement(3, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertNull( result, "Group Name Write "+m+"second char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, 0);
|
|
m.setElement(6, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Pw Write "+m+"second char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0x10);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result,
|
|
"Group Pw Report "+m+"second char iteration "+i);
|
|
}
|
|
|
|
for (int i=0; i<13; ++i) {
|
|
testString = "00"+conversion2[i]+"0";
|
|
m.setElement(2, 3);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(14, (i>7)?2:0);
|
|
m.setElement(15, 0);
|
|
m.setElement(16, (i & 7) << 4);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result,
|
|
"Group Name etc Report "+m+"third char iteration "+i);
|
|
|
|
m.setElement(3, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertNull( result, "Group Name Write "+m+"third char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, 0);
|
|
m.setElement(6, 0);
|
|
m.setElement(7, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Pw Write "+m+"third char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0x10);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Pw Report "+m+"third char iteration "+i);
|
|
}
|
|
|
|
for (int i=0; i<13; ++i) {
|
|
testString = "000"+conversion2[i];
|
|
m.setElement(2, 3);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(14, 0);
|
|
m.setElement(15, 0);
|
|
m.setElement(16, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Name etc Report "+m+"fourth char iteration "+i);
|
|
|
|
m.setElement(3, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertNull( result, "Group Name Write "+m+"fourth char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0);
|
|
m.setElement(4, 0);
|
|
m.setElement(5, 0);
|
|
m.setElement(6, 0);
|
|
m.setElement(7, 0);
|
|
m.setElement(8, i);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Pw Write "+m+"fourth char iteration "+i);
|
|
|
|
m.setElement(2, 7);
|
|
m.setElement(3, 0x10);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertEquals( testString, result, "Group Pw Report "+m+"fourth char iteration "+i);
|
|
}
|
|
|
|
m = new LocoNetMessage(2);
|
|
m.setOpCode(0x81);
|
|
m.setElement(1, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupPassword(m);
|
|
assertNull( result, "Group Pw Report "+m);
|
|
}
|
|
|
|
|
|
@Test
|
|
public void testExtractDuplexGroupChannel() {
|
|
int result;
|
|
|
|
LocoNetMessage m = new LocoNetMessage(20);
|
|
|
|
m.setOpCode(0xe5);
|
|
m.setElement(1,0x14);
|
|
m.setElement(2, 0x2);
|
|
m.setElement(3, 0x10);
|
|
|
|
for (int i = 4; i < 0x14; ++i){
|
|
m.setElement(i, 0);
|
|
}
|
|
|
|
for (int ii = 0; ii < 256; ++ii) {
|
|
int i = ii;
|
|
m.setElement(2, 2);
|
|
m.setElement(4, (i>127) ? 1:0);
|
|
m.setElement(5, i&0x7f);
|
|
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( i, result, () -> "iteration "+i+" extracted channel");
|
|
|
|
m.setElement(2, 3);
|
|
m.setElement(14, (i>127) ? 4:0);
|
|
m.setElement(17, (i&0x7f));
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( i, result, "extracted channel should be invalid for name operation");
|
|
}
|
|
|
|
int expectedResult = -1;
|
|
m.setElement(2, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( expectedResult, result,
|
|
"extracted channel should be invalid for invalid operation");
|
|
|
|
m.setElement(2, 4);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( expectedResult, result,
|
|
"etracted channel should be invalid for password operation");
|
|
|
|
m.setElement(2, 7);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( expectedResult, result,
|
|
"etracted channel should be invalid for ID operation");
|
|
|
|
m = new LocoNetMessage(2);
|
|
m.setOpCode(0x82);
|
|
m.setElement(1, 0);
|
|
assertEquals( expectedResult, LnDplxGrpInfoImpl.extractDuplexGroupChannel(m),
|
|
"interpret bad channel message");
|
|
}
|
|
|
|
@Test
|
|
public void testExtractDuplexGroupID() {
|
|
int result;
|
|
int exceptionalResult = -1;
|
|
|
|
LocoNetMessage m = new LocoNetMessage(20);
|
|
|
|
m.setOpCode(0xe5);
|
|
m.setElement(1,0x14);
|
|
|
|
for (int i = 4; i < 0x14; ++i){
|
|
m.setElement(i, 0);
|
|
}
|
|
|
|
for (int ii = 0; ii < 256; ++ii) {
|
|
int i = ii;
|
|
m.setElement(2, 0x4);
|
|
m.setElement(3, 0);
|
|
m.setElement(4, (i>127) ? 1:0);
|
|
m.setElement(5, i&0x7f);
|
|
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupID(m);
|
|
assertEquals( i, result, () -> "iteration "+i+" ID write operation");
|
|
|
|
m.setElement(3, 0x10);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupID(m);
|
|
assertEquals( i, result, () -> "iteration "+i+" ID report operation");
|
|
|
|
m.setElement(2, 3);
|
|
m.setElement(3, 0x10);
|
|
m.setElement(14, (i>127) ? 8:0);
|
|
m.setElement(18, (i&0x7f));
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupID(m);
|
|
assertEquals( i, result, () -> "iteration "+i+" ID from group name etc read operation");
|
|
|
|
m.setElement(3, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupID(m);
|
|
assertEquals( exceptionalResult, result,() -> "iteration "+i+" ID from group name etc write operation");
|
|
}
|
|
|
|
m.setElement(2, 0);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( exceptionalResult, result, "extracted channel should be invalid for invalid operation");
|
|
|
|
m.setElement(2, 4);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( exceptionalResult, result, "etracted channel should be invalid for password operation");
|
|
|
|
m.setElement(2, 7);
|
|
result = LnDplxGrpInfoImpl.extractDuplexGroupChannel(m);
|
|
assertEquals( exceptionalResult, result, "etracted channel should be invalid for ID operation");
|
|
|
|
m = new LocoNetMessage(2);
|
|
m.setOpCode(0x82);
|
|
m.setElement(1, 0);
|
|
assertEquals( exceptionalResult, LnDplxGrpInfoImpl.extractDuplexGroupChannel(m),
|
|
"interpret bad channel message");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testExtractDuplexGroupName() {
|
|
LocoNetMessage m = new LocoNetMessage(0x14);
|
|
assertNull( LnDplxGrpInfoImpl.extractDuplexGroupName(m), "expect null for empty message");
|
|
}
|
|
|
|
@Test
|
|
public void testSetDuplexGroupName() {
|
|
|
|
LocoNetException e = assertThrows( LocoNetException.class,
|
|
() -> dpxGrpInfoImpl.setDuplexGroupName(""),
|
|
"got an exception as intended");
|
|
assertNotNull(e);
|
|
|
|
lnis.outbound.removeAllElements();
|
|
assertEquals( 0, lnis.outbound.size(), "outbound queue is empty");
|
|
assertDoesNotThrow( () -> dpxGrpInfoImpl.setDuplexGroupName("deadBeeF"),
|
|
"got an unexpected exception");
|
|
|
|
assertEquals( 1, lnis.outbound.size(), "outbound queue is not empty");
|
|
assertEquals( 0xe5, lnis.outbound.get(0).getOpCode(), "outbound queue opcode is correct");
|
|
assertEquals( 0x14, lnis.outbound.get(0).getElement(1), "outbound queue byte 1 is correct");
|
|
assertEquals( 0x03, lnis.outbound.get(0).getElement(2), "outbound queue byte 2 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(3), "outbound queue byte 3 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(4), "outbound queue byte 4 is correct");
|
|
assertEquals( 'd', lnis.outbound.get(0).getElement(5), "outbound queue byte 5 is correct");
|
|
assertEquals( 'e', lnis.outbound.get(0).getElement(6), "outbound queue byte 6 is correct");
|
|
assertEquals( 'a', lnis.outbound.get(0).getElement(7), "outbound queue byte 7 is correct");
|
|
assertEquals( 'd', lnis.outbound.get(0).getElement(8), "outbound queue byte 8 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(9), "outbound queue byte 9 is correct");
|
|
assertEquals( 'B', lnis.outbound.get(0).getElement(10), "outbound queue byte 10 is correct");
|
|
assertEquals( 'e', lnis.outbound.get(0).getElement(11), "outbound queue byte 11 is correct");
|
|
assertEquals( 'e', lnis.outbound.get(0).getElement(12), "outbound queue byte 12 is correct");
|
|
assertEquals( 'F', lnis.outbound.get(0).getElement(13), "outbound queue byte 13 is correct");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testSetDuplexGroupChannel() {
|
|
|
|
LocoNetException e = assertThrows( LocoNetException.class,
|
|
() -> dpxGrpInfoImpl.setDuplexGroupChannel(-1),
|
|
"got an exception as intended");
|
|
assertNotNull(e);
|
|
|
|
lnis.outbound.removeAllElements();
|
|
assertEquals( 0, lnis.outbound.size(), "outbound queue is empty");
|
|
assertDoesNotThrow( () -> dpxGrpInfoImpl.setDuplexGroupChannel(13),
|
|
"got an unexpected exception");
|
|
|
|
assertEquals( 1, lnis.outbound.size(), "outbound queue is not empty");
|
|
assertEquals( 0xe5, lnis.outbound.get(0).getOpCode(), "outbound queue opcode is correct");
|
|
assertEquals( 0x14, lnis.outbound.get(0).getElement(1), "outbound queue byte 1 is correct");
|
|
assertEquals( 0x02, lnis.outbound.get(0).getElement(2), "outbound queue byte 2 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(3), "outbound queue byte 3 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(4), "outbound queue byte 4 is correct");
|
|
assertEquals( 13, lnis.outbound.get(0).getElement(5), "outbound queue byte 5 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(6), "outbound queue byte 6 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(7), "outbound queue byte 7 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(8), "outbound queue byte 8 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(9), "outbound queue byte 9 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(10), "outbound queue byte 10 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(11), "outbound queue byte 11 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(12), "outbound queue byte 12 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(13), "outbound queue byte 13 is correct");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testSetDuplexGroupID() {
|
|
|
|
LocoNetException e = assertThrows( LocoNetException.class,
|
|
() -> dpxGrpInfoImpl.setDuplexGroupId("999"),
|
|
"got an exception as intended");
|
|
assertNotNull(e);
|
|
|
|
lnis.outbound.removeAllElements();
|
|
assertEquals( 0, lnis.outbound.size(), "outbound queue is empty");
|
|
assertDoesNotThrow( () -> dpxGrpInfoImpl.setDuplexGroupId("7"),
|
|
"got an unexpected exception");
|
|
|
|
assertEquals( 1, lnis.outbound.size(), "outbound queue is not empty");
|
|
assertEquals( 0xe5, lnis.outbound.get(0).getOpCode(), "outbound queue opcode is correct");
|
|
assertEquals( 0x14, lnis.outbound.get(0).getElement(1), "outbound queue byte 1 is correct");
|
|
assertEquals( 0x04, lnis.outbound.get(0).getElement(2), "outbound queue byte 2 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(3), "outbound queue byte 3 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(4), "outbound queue byte 4 is correct");
|
|
assertEquals( 7, lnis.outbound.get(0).getElement(5), "outbound queue byte 5 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(6), "outbound queue byte 6 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(7), "outbound queue byte 7 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(8), "outbound queue byte 8 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(9), "outbound queue byte 9 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(10), "outbound queue byte 10 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(11), "outbound queue byte 11 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(12), "outbound queue byte 12 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(13), "outbound queue byte 13 is correct");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testSetDuplexGroupPassword() {
|
|
|
|
LocoNetException e = assertThrows( LocoNetException.class,
|
|
() -> dpxGrpInfoImpl.setDuplexGroupPassword("abcd"),
|
|
"got an exception as intended");
|
|
assertNotNull(e);
|
|
|
|
lnis.outbound.removeAllElements();
|
|
assertEquals( 0, lnis.outbound.size(), "outbound queue is empty");
|
|
assertDoesNotThrow( () -> dpxGrpInfoImpl.setDuplexGroupPassword("0123"),
|
|
"got an unexpected exception");
|
|
|
|
assertEquals( 1, lnis.outbound.size(), "outbound queue is not empty");
|
|
assertEquals( 0xe5, lnis.outbound.get(0).getOpCode(), "outbound queue opcode is correct");
|
|
assertEquals( 0x14, lnis.outbound.get(0).getElement(1), "outbound queue byte 1 is correct");
|
|
assertEquals( 0x07, lnis.outbound.get(0).getElement(2), "outbound queue byte 2 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(3), "outbound queue byte 3 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(4), "outbound queue byte 4 is correct");
|
|
assertEquals( '0', lnis.outbound.get(0).getElement(5), "outbound queue byte 5 is correct");
|
|
assertEquals( '1', lnis.outbound.get(0).getElement(6), "outbound queue byte 6 is correct");
|
|
assertEquals( '2', lnis.outbound.get(0).getElement(7), "outbound queue byte 7 is correct");
|
|
assertEquals( '3', lnis.outbound.get(0).getElement(8), "outbound queue byte 8 is correct");
|
|
assertEquals( 0x00, lnis.outbound.get(0).getElement(9), "outbound queue byte 9 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(10), "outbound queue byte 10 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(11), "outbound queue byte 11 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(12), "outbound queue byte 12 is correct");
|
|
assertEquals( 0, lnis.outbound.get(0).getElement(13), "outbound queue byte 13 is correct");
|
|
|
|
}
|
|
|
|
|
|
|
|
// Yet To Be Tested:
|
|
// public void actionPerformed(java.awt.event.ActionEvent e) {
|
|
// public void actionPerformed(java.awt.event.ActionEvent e) {
|
|
// public static Integer extractDuplexGroupChannel(LocoNetMessage m) {
|
|
// public static Integer extractDuplexGroupID(LocoNetMessage m) {
|
|
// public void message(LocoNetMessage m) {
|
|
// public void queryDuplexGroupIdentity() {
|
|
// public void setDuplexGroupChannel(Integer dgc) throws jmri.jmrix.loconet.LocoNetException {
|
|
// public void setDuplexGroupPassword(String dgp) throws jmri.jmrix.loconet.LocoNetException {
|
|
// public void setDuplexGroupId(String dgi) throws jmri.jmrix.loconet.LocoNetException {
|
|
// public int getMessagesHandled() {
|
|
// public boolean isIplQueryTimerRunning() {
|
|
// public boolean isDuplexGroupQueryRunning() {
|
|
// public void connect(jmri.jmrix.loconet.LnTrafficController t) {
|
|
// public void dispose() {
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
|
|
JUnitUtil.resetProfileManager();
|
|
|
|
memo = new jmri.jmrix.loconet.LocoNetSystemConnectionMemo();
|
|
lnis = new jmri.jmrix.loconet.LocoNetInterfaceScaffold(memo);
|
|
memo.setLnTrafficController(lnis);
|
|
|
|
memo.configureCommandStation(jmri.jmrix.loconet.LnCommandStationType.COMMAND_STATION_DCS100,false,false,false,false,false);
|
|
// memo.configureManagers(); // Skip this step, else autonomous loconet traffic is generated!
|
|
jmri.InstanceManager.store(memo,jmri.jmrix.loconet.LocoNetSystemConnectionMemo.class);
|
|
|
|
dpxGrpInfoImpl = new LnDplxGrpInfoImpl(memo);
|
|
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
dpxGrpInfoImpl.dispose();
|
|
dpxGrpInfoImpl = null;
|
|
lnis = null;
|
|
memo.dispose();
|
|
memo=null;
|
|
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(LnDplxGrpInfoImplTest.class);
|
|
}
|