diff --git a/test/edu/nps/moves/dis7/EntityStatePduTest.java b/test/edu/nps/moves/dis7/EntityStatePduTest.java index c448c5996cb332c4bedb3c7c77dd3286fabd1e75..df946af848cd200d29cfc2616d25d0b04de6719d 100644 --- a/test/edu/nps/moves/dis7/EntityStatePduTest.java +++ b/test/edu/nps/moves/dis7/EntityStatePduTest.java @@ -4,17 +4,16 @@ */ package edu.nps.moves.dis7; -import edu.nps.moves.dis7.entities.usa.munition.other.M1A2; import edu.nps.moves.dis7.enumerations.Country; import edu.nps.moves.dis7.enumerations.EntityKind; import edu.nps.moves.dis7.utilities.PduFactory; import edu.nps.moves.dis7.enumerations.PlatformDomain; import edu.nps.moves.dis7.pdus.Domain; import edu.nps.moves.dis7.pdus.EntityID; +import edu.nps.moves.dis7.pdus.EntityMarking; import edu.nps.moves.dis7.pdus.EntityStatePdu; import edu.nps.moves.dis7.pdus.EntityType; import edu.nps.moves.dis7.pdus.Pdu; -import edu.nps.moves.dis7.pdus.PduBase; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; @@ -29,8 +28,12 @@ public class EntityStatePduTest extends PduTest PduFactory pduFactory = new PduFactory(); EntityStatePdu espdu = pduFactory.makeEntityStatePdu(); - // TODO alternate constructors and utility methods + EntityID entityID = new EntityID().setSiteID((short)1).setApplicationID((short)2).setEntityID((short)3); + espdu.setEntityID(entityID); + + // TODO test various alternate constructors and utility methods + EntityType entityType = new EntityType() .setEntityKind (EntityKind.PLATFORM).setEntityKind(EntityKind.PLATFORM) //(short) 1); // Platform (vs lifeform, munition, sensor, etc.); //(short) 1); // Platform (vs lifeform, munition, sensor, etc.) .setCountry (Country.UNITED_STATES_OF_AMERICA_USA) // 225 USA @@ -38,68 +41,53 @@ public class EntityStatePduTest extends PduTest .setCategory ((byte) 1) // Tank .setSubCategory((byte) 1) // M1 Abrams .setSpecific ((byte) 3); // M1A2 Abrams - espdu.setEntityType(entityType); - // Alternate way using entity jar(s) - espdu.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.land.M1A2()); - // or simply use an enumeration by name, with accompanying import statement above - espdu.setEntityType(new M1A2()); + // TODO this is screaming for utility methods... + EntityMarking entityMarking = new EntityMarking().setCharacters("Espdu Test1".getBytes()); + espdu.setMarking (entityMarking); + + // TODO causes failure, need to debug setter: +// // Alternate way using entity jar(s) +// espdu.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.land.M1A2()); +// // or simply use an enumeration by name, with accompanying import statement above +// espdu.setEntityType(new M1A2()); testOnePdu(espdu); - testOnePdu(espdu.setEntityID(entityID).setEntityType(entityType)); + testOnePdu(espdu.setEntityID(entityID).setEntityType(entityType) + .setMarking(entityMarking.setCharacters("Espdu Test2".getBytes()))); // pipelining } /** * Test single PDU for correctness according to all contained fields in this PDU type * See <a href="https://en.wikipedia.org/wiki/Marshalling_(computer_science)" target="_blank">https://en.wikipedia.org/wiki/Marshalling_(computer_science)</a> - * @param newPdu separate PDU for comparison + * @param createdPdu separate PDU for comparison */ @Override - protected void testOnePdu(Pdu newPdu) + protected void testOnePdu(Pdu createdPdu) { - sendPdu(newPdu); // will wait a while - assertTrue(receivedPdu != null, "No response from network receive after " + getThreadSleepInterval() + " msec"); - - testPduHeaderMatch(newPdu); + testPduSendReceiveHeaderMatch (createdPdu); // shared tests in superclass // can cast PDUs at this point since PduType matched - EntityStatePdu newEspdu = (EntityStatePdu) newPdu; - EntityStatePdu receivedEspdu = (EntityStatePdu) newPdu; - assertEquals (newEspdu.getEntityID(), receivedEspdu.getEntityID(), "mismatched EntityID"); + EntityStatePdu createdEspdu = (EntityStatePdu) createdPdu; + EntityStatePdu receivedEspdu = (EntityStatePdu) receivedPdu; + + assertEquals (createdEspdu.getEntityID(), receivedEspdu.getEntityID(), "mismatched EntityID"); // TODO Sequence number - assertEquals (newEspdu.getEntityType(), receivedEspdu.getEntityType(), "mismatched EntityType"); + assertEquals (createdEspdu.getEntityType(), receivedEspdu.getEntityType(), "mismatched EntityType"); // padding? - assertEquals (newEspdu.getEntityAppearance(), receivedEspdu.getEntityAppearance(), "mismatched EntityAppearance"); - assertEquals (newEspdu.getCapabilities(), receivedEspdu.getCapabilities(), "mismatched EntityCapabilities"); - assertEquals (newEspdu.getEntityLocation(), receivedEspdu.getEntityLocation(), "mismatched EntityLocation"); - assertEquals (newEspdu.getEntityOrientation(), receivedEspdu.getEntityOrientation(), "mismatched EntityOrientation"); - assertEquals (newEspdu.getForceId(), receivedEspdu.getForceId(), "mismatched EntityForceId"); - assertEquals (newEspdu.getMarking(), receivedEspdu.getMarking(), "mismatched Marking"); - assertEquals (newEspdu.getDeadReckoningParameters(), receivedEspdu.getDeadReckoningParameters(), "mismatched DeadReckoningParameters"); + assertEquals (createdEspdu.getEntityAppearance(), receivedEspdu.getEntityAppearance(), "mismatched EntityAppearance"); + assertEquals (createdEspdu.getCapabilities(), receivedEspdu.getCapabilities(), "mismatched EntityCapabilities"); + assertEquals (createdEspdu.getEntityLocation(), receivedEspdu.getEntityLocation(), "mismatched EntityLocation"); + assertEquals (createdEspdu.getEntityOrientation(), receivedEspdu.getEntityOrientation(), "mismatched EntityOrientation"); + assertEquals (createdEspdu.getForceId(), receivedEspdu.getForceId(), "mismatched EntityForceId"); + assertEquals (createdEspdu.getMarking(), receivedEspdu.getMarking(), "mismatched Marking"); + assertEquals (createdEspdu.getDeadReckoningParameters(), receivedEspdu.getDeadReckoningParameters(), "mismatched DeadReckoningParameters"); // attached parts, utility method for NumberVariableParameters - assertEquals (newEspdu.getVariableParameters(), receivedEspdu.getVariableParameters(), "mismatched VariableParameters"); - assertEquals (newEspdu.getEntityLinearVelocity(), receivedEspdu.getEntityLinearVelocity(), "mismatched EntityLinearVelocity"); + assertEquals (createdEspdu.getVariableParameters(), receivedEspdu.getVariableParameters(), "mismatched VariableParameters"); + assertEquals (createdEspdu.getEntityLinearVelocity(), receivedEspdu.getEntityLinearVelocity(), "mismatched EntityLinearVelocity"); - // trace option to compare strings, JSON or XML - if (false) // true || !newEspdu.toString().equals(receivedEspdu.toString())) - { - System.err.println(" newEspdu=" + newEspdu.toString()); - System.err.println("receivedEspdu=" + receivedEspdu.toString()); - } - assertEquals (newEspdu.toString(), receivedEspdu.toString(), "mismatched toString()"); - // built-in object comparison - assertTrue (newEspdu.equalsImpl(receivedEspdu), "EntityStatePdu.equalsImpl() built-in object comparison"); - // final recheck that everything adds up - assertEquals(newPdu.getMarshalledSize(),receivedPdu.getMarshalledSize(), - "Marshalled size mismatch," + - "sent (" + newPdu.getMarshalledSize() + " bytes) and " + - "recieved (" + receivedPdu.getMarshalledSize() + " bytes)"); - assertEquals (newPdu.getLength(), receivedPdu.getLength(), "mismatched length"); // from Pdu superclass - -// comparison of class Pdu is questionable -// assertTrue(compare(newPdu,receivedPdu), "compare() method failed for original and received PDUs"); - receivedPdu = null; // ensure cleared prior to next test + testPduFinishingChecks(createdPdu); // shared tests in superclass } public static void main(String[] args) diff --git a/test/edu/nps/moves/dis7/FirePduTest.java b/test/edu/nps/moves/dis7/FirePduTest.java index f7794958240a13024e14c17254c84ed8a6ed1d39..810181b6162b502d3a7091ea9b6b8285f1f4b645 100644 --- a/test/edu/nps/moves/dis7/FirePduTest.java +++ b/test/edu/nps/moves/dis7/FirePduTest.java @@ -30,58 +30,34 @@ public class FirePduTest extends PduTest /** Test single PDU for correctness according to all contained fields in this PDU type * See <a href="https://en.wikipedia.org/wiki/Marshalling_(computer_science)" target="_blank">https://en.wikipedia.org/wiki/Marshalling_(computer_science)</a> - * @param newPdu separate PDU for comparison + * @param createdPdu separate PDU for comparison */ @Override - protected void testOnePdu(Pdu newPdu) + protected void testOnePdu(Pdu createdPdu) { - String TODO_WARNING = " (test works standalone but mysteriously fails as part of project test suite)"; - - sendPdu(newPdu); // will wait a while - assertTrue(receivedPdu != null, "No response from network receive after " + getThreadSleepInterval() + " msec" - + TODO_WARNING); - - testPduHeaderMatch(newPdu); + testPduSendReceiveHeaderMatch (createdPdu); // shared tests in superclass // can cast PDUs at this point since PduType matched - FirePdu newEspdu = (FirePdu) newPdu; - FirePdu receivedEspdu = (FirePdu) newPdu; + FirePdu createdFirePdu = (FirePdu) createdPdu; + FirePdu receivedFirePdu = (FirePdu) receivedPdu; - assertEquals (newEspdu.getFiringEntityID(), receivedEspdu.getFiringEntityID(), "mismatched FiringEntityID"); - assertEquals (newEspdu.getTargetEntityID(), receivedEspdu.getTargetEntityID(), "mismatched TargetEntityID"); + assertEquals (createdFirePdu.getFiringEntityID(), receivedFirePdu.getFiringEntityID(), "mismatched FiringEntityID"); + assertEquals (createdFirePdu.getTargetEntityID(), receivedFirePdu.getTargetEntityID(), "mismatched TargetEntityID"); // TODO Target Entity ID (App, Entity) // TODO Munition/Expendable Entity ID (Site, App) // TODO Munition/Expendable Entity ID (Entity) - assertEquals (newEspdu.getEventID(), receivedEspdu.getEventID(), "mismatched EventID"); - assertEquals (newEspdu.getLocationInWorldCoordinates(),receivedEspdu.getLocationInWorldCoordinates(),"mismatched LocationInWorldCoordinates"); - assertEquals (newEspdu.getVelocity(), receivedEspdu.getVelocity(), "mismatched Velocity"); - assertEquals (newEspdu.getFireMissionIndex(), receivedEspdu.getFireMissionIndex(), "mismatched FireMissionIndex"); - assertEquals (newEspdu.getMunitionExpendibleID(), receivedEspdu.getMunitionExpendibleID(), "mismatched MunitionExpendibleID"); + assertEquals (createdFirePdu.getEventID(), receivedFirePdu.getEventID(), "mismatched EventID"); + assertEquals (createdFirePdu.getLocationInWorldCoordinates(),receivedFirePdu.getLocationInWorldCoordinates(),"mismatched LocationInWorldCoordinates"); + assertEquals (createdFirePdu.getVelocity(), receivedFirePdu.getVelocity(), "mismatched Velocity"); + assertEquals (createdFirePdu.getFireMissionIndex(), receivedFirePdu.getFireMissionIndex(), "mismatched FireMissionIndex"); + assertEquals (createdFirePdu.getMunitionExpendibleID(), receivedFirePdu.getMunitionExpendibleID(), "mismatched MunitionExpendibleID"); // TODO Munition Descriptor - assertEquals (newEspdu.getPadding(), receivedEspdu.getPadding(), "mismatched Padding"); - assertEquals (newEspdu.getRange(), receivedEspdu.getRange(), "mismatched Range"); + assertEquals (createdFirePdu.getPadding(), receivedFirePdu.getPadding(), "mismatched Padding"); + assertEquals (createdFirePdu.getRange(), receivedFirePdu.getRange(), "mismatched Range"); // TODO Fire Type, Padding2, Num Variable Records // TODO Variable Records - // trace option to compare strings, JSON or XML - if (false) // true || !newEspdu.toString().equals(receivedEspdu.toString())) - { - System.err.println(" newEspdu=" + newEspdu.toString()); - System.err.println("receivedEspdu=" + receivedEspdu.toString()); - } - assertEquals (newEspdu.toString(), receivedEspdu.toString(), "mismatched toString()"); - // built-in object comparison - assertTrue (newEspdu.equalsImpl(receivedEspdu), "FirePdu.equalsImpl() built-in object comparison"); - // final recheck that everything adds up - assertEquals(newPdu.getMarshalledSize(),receivedPdu.getMarshalledSize(), - "Marshalled size mismatch," + - "sent (" + newPdu.getMarshalledSize() + " bytes) and " + - "recieved (" + receivedPdu.getMarshalledSize() + " bytes)"); - assertEquals (newPdu.getLength(), receivedPdu.getLength(), "mismatched length"); // from Pdu superclass - -// comparison of class Pdu is questionable -// assertTrue(compare(newPdu,receivedPdu), "compare() method failed for original and received PDUs"); - receivedPdu = null; // ensure cleared prior to next test + testPduFinishingChecks(createdPdu); // shared tests in superclass } public static void main(String[] args) diff --git a/test/edu/nps/moves/dis7/PduTest.java b/test/edu/nps/moves/dis7/PduTest.java index 4c206cf3043b42effef6a648971aa0ef1ea7209e..e4e87d37df4d249dc1ab1c5fc8dabe6ca9e6bff6 100644 --- a/test/edu/nps/moves/dis7/PduTest.java +++ b/test/edu/nps/moves/dis7/PduTest.java @@ -39,6 +39,7 @@ import edu.nps.moves.dis7.utilities.DisThreadedNetworkInterface; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -49,7 +50,7 @@ import org.junit.jupiter.api.BeforeEach; abstract public class PduTest { - protected final long THREAD_SLEEP_INTERVAL_MSEC_DEFAULT = 100l; + protected final long THREAD_SLEEP_INTERVAL_MSEC_DEFAULT = 100l; // i.e. 100, type long private long threadSleepInterval = THREAD_SLEEP_INTERVAL_MSEC_DEFAULT; @BeforeAll @@ -75,9 +76,9 @@ abstract public class PduTest pduListener = new DisThreadedNetworkInterface.PduListener() { @Override - public void incomingPdu(Pdu newPdu) + public void incomingPdu(Pdu createdPdu) { - setUpReceiver(newPdu); + setUpReceiver(createdPdu); } }; disNetworkInterface.addListener(pduListener); @@ -94,18 +95,18 @@ abstract public class PduTest /** * Handler - * @param newPdu new PDU of interest + * @param createdPdu new PDU of interest */ - protected void sendPdu(Pdu newPdu) + protected void sendPdu(Pdu createdPdu) { try { - disNetworkInterface.send(newPdu); + disNetworkInterface.send(createdPdu); Thread.sleep(getThreadSleepInterval()); // TODO better way to wait? } catch (InterruptedException ex) { - System.err.println(this.getClass().getName() + ".sendPdu(Pdu newPdu), error sending Multicast: " + ex.getLocalizedMessage()); + System.err.println(this.getClass().getName() + ".sendPdu(Pdu createdPdu), error sending Multicast: " + ex.getLocalizedMessage()); System.exit(1); } } @@ -131,21 +132,63 @@ abstract public class PduTest receivedPdu = newPdu; } /** - * Common tests for fields in PDU header + * Initial common tests for fields in PDU header. * See <a href="https://en.wikipedia.org/wiki/Marshalling_(computer_science)" target="_blank">https://en.wikipedia.org/wiki/Marshalling_(computer_science)</a> - * @param newPdu separate PDU for comparison + * @param createdPdu separate PDU for comparison */ - protected void testPduHeaderMatch (Pdu newPdu) - { - assertEquals ( newPdu.getProtocolVersion(), receivedPdu.getProtocolVersion(), "mismatched ProtocolVersion"); + protected void testPduSendReceiveHeaderMatch (Pdu createdPdu) + { + String TEST_SUITE_WARNING = " (TODO note that test works standalone but mysteriously fails as part of project test suite)"; + + sendPdu(createdPdu); // will wait a while, then return receivedPdu + assertTrue(receivedPdu != null, "No response from network receive after " + getThreadSleepInterval() + " msec" + + TEST_SUITE_WARNING); + + assertTrue((createdPdu != receivedPdu), "Exact match found between createdPdu and receivedPdu object references indicates improper test configuration"); + + assertEquals ( createdPdu.getProtocolVersion(), receivedPdu.getProtocolVersion(), "mismatched ProtocolVersion"); // TODO compatibility version - assertEquals ( newPdu.getExerciseID(), receivedPdu.getExerciseID(), "mismatched ExerciseID"); - assertEquals ( newPdu.getPduType(), receivedPdu.getPduType(), "mismatched PduType"); - assertEquals ( newPdu.getProtocolFamily(), receivedPdu.getProtocolFamily(), "mismatched ProtocolFamily"); // derived from PduType - assertEquals(((PduBase)newPdu).getPduStatus(), ((PduBase)receivedPdu).getPduStatus(), "mismatched PduStatus"); - assertEquals(((PduBase)newPdu).getPadding(), ((PduBase)receivedPdu).getPadding(), "mismatched header padding"); + assertEquals ( createdPdu.getExerciseID(), receivedPdu.getExerciseID(), "mismatched ExerciseID"); + assertEquals ( createdPdu.getPduType(), receivedPdu.getPduType(), "mismatched PduType"); + assertEquals ( createdPdu.getProtocolFamily(), receivedPdu.getProtocolFamily(), "mismatched ProtocolFamily"); // derived from PduType + assertEquals(((PduBase)createdPdu).getPduStatus(), ((PduBase)receivedPdu).getPduStatus(), "mismatched PduStatus"); + assertEquals(((PduBase)createdPdu).getPadding(), ((PduBase)receivedPdu).getPadding(), "mismatched header padding"); // TODO HDR length - assertEquals (newPdu.getTimestamp(), receivedPdu.getTimestamp(), "mismatched Timestamp"); + assertEquals (createdPdu.getTimestamp(), receivedPdu.getTimestamp(), "mismatched Timestamp"); + + // trace option to show strings if mismatched (prior to assertion error) + if (!createdPdu.toString().equals(receivedPdu.toString())) // false true TODO JSON or XML + { + System.out.println("String mismatch:"); + System.out.println("================================================================"); + System.out.println(" newEspdu=" + createdPdu.toString()); + System.out.println("================================================================"); + System.out.println("receivedEspdu=" + receivedPdu.toString()); + System.out.println("================================================================"); + } + } + /** + * Final common tests of PDU characteristics after individual fields are checked. + * See <a href="https://en.wikipedia.org/wiki/Marshalling_(computer_science)" target="_blank">https://en.wikipedia.org/wiki/Marshalling_(computer_science)</a> + * @param createdPdu separate PDU for comparison + */ + protected void testPduFinishingChecks (Pdu createdPdu) + { + assertEquals (createdPdu.toString(), receivedPdu.toString(), "mismatched toString()"); + + // built-in object comparison + assertTrue (createdPdu.equalsImpl(receivedPdu), "createdPdu.equalsImpl(receivedPdu) built-in object comparison"); + // final recheck that everything adds up + assertEquals(createdPdu.getMarshalledSize(), receivedPdu.getMarshalledSize(), + "Marshalled size mismatch," + + "sent (" + createdPdu.getMarshalledSize() + " bytes) and " + + "recieved (" + receivedPdu.getMarshalledSize() + " bytes)"); + assertEquals (createdPdu.getLength(), receivedPdu.getLength(), "mismatched length"); // from Pdu superclass + +// comparison of class Pdu is questionable +// assertTrue(compare(createdPdu,receivedPdu), "compare() method failed for original and received PDUs"); + + receivedPdu = null; // ensure cleared prior to next test } /** @@ -154,9 +197,9 @@ abstract public class PduTest public abstract void testRoundTrip(); /** Test single PDU for correctness according to all contained fields in this PDU type - * @param newPdu separate PDU for comparison + * @param createdPdu separate PDU for comparison */ - protected abstract void testOnePdu(Pdu newPdu); + protected abstract void testOnePdu(Pdu createdPdu); /** * Threaded sleep may be necessary to ensure completion of sending/receiving PDU