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

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