package org.yamcs.xtceproc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.yamcs.RefMdbPacketGenerator.pFixedStringPara1_3_1; import static org.yamcs.RefMdbPacketGenerator.pFixedStringPara1_3_2; import static org.yamcs.RefMdbPacketGenerator.pFixedStringPara1_3_7; import static org.yamcs.RefMdbPacketGenerator.pIntegerPara2_1; import static org.yamcs.RefMdbPacketGenerator.pIntegerPara2_2; import static org.yamcs.RefMdbPacketGenerator.pPrependedSizeStringPara1_3_5; import static org.yamcs.RefMdbPacketGenerator.pPrependedSizeStringPara1_3_6; import static org.yamcs.RefMdbPacketGenerator.pStringFloatFSBPara1_4_4; import static org.yamcs.RefMdbPacketGenerator.pStringFloatPSPara1_4_5; import static org.yamcs.RefMdbPacketGenerator.pStringFloatTSSCPara1_4_3; import static org.yamcs.RefMdbPacketGenerator.pStringIntFixedPara1_5_1; import static org.yamcs.RefMdbPacketGenerator.pStringIntPrePara1_5_4; import static org.yamcs.RefMdbPacketGenerator.pStringIntStrPara1_5_5; import static org.yamcs.RefMdbPacketGenerator.pStringIntTermPara1_5_3; import static org.yamcs.RefMdbPacketGenerator.pTerminatedStringPara1_3_3; import static org.yamcs.RefMdbPacketGenerator.pTerminatedStringPara1_3_4; import java.nio.ByteBuffer; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.yamcs.ConfigurationException; import org.yamcs.ContainerExtractionResult; import org.yamcs.parameter.ParameterValue; import org.yamcs.RefMdbPacketGenerator; import org.yamcs.YConfiguration; import org.yamcs.management.ManagementService; import org.yamcs.parameter.ParameterValueList; import org.yamcs.protobuf.Pvalue.AcquisitionStatus; import org.yamcs.utils.TimeEncoding; import org.yamcs.xtce.Parameter; import org.yamcs.xtce.SequenceContainer; import org.yamcs.xtce.XtceDb; public class XtceTmExtractorTest { private static XtceDb xtcedb; @BeforeClass public static void setUpBeforeClass() throws Exception { YConfiguration.setup("refmdb"); ManagementService.setup(false); XtceDbFactory.reset(); xtcedb=XtceDbFactory.createInstanceByConfig("refmdb"); //xtcedb.print(System.out); } @Test public void testPKT1_1() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb = tmGenerator.generate_PKT1_1(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT11 buffer: "+StringConvertors.arrayToHexString(bb.array())); // System.out.println("received: "+received); ParameterValueList received = tmExtractor.getParameterResult(); Parameter p = xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_1"); ParameterValue pv=received.getLastInserted(p); assertEquals(tmGenerator.pIntegerPara1_1, pv.getEngValue().getUint32Value()); p = xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_1_6"); pv=received.getLastInserted(p); assertEquals(tmGenerator.pIntegerPara1_1_6, pv.getEngValue().getUint32Value()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_1_7")); assertEquals(tmGenerator.pIntegerPara1_1_7, pv.getEngValue().getUint32Value()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_1_8")); assertEquals(tmGenerator.pIntegerPara1_1_8, pv.getEngValue().getUint64Value()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringPara1_1_5")); assertEquals(tmGenerator.pStringPara1_1_5, pv.getEngValue().getStringValue()); } @Test public void testPKT1_2() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_2(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); ParameterValueList received=tmExtractor.getParameterResult(); ParameterValue pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/LEIntegerPara1_2_1")); assertNotNull(pv); assertEquals(tmGenerator.pLEIntegerPara1_2_1, pv.getEngValue().getUint32Value()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/LEIntegerPara1_2_2")); assertNotNull(pv); assertEquals(tmGenerator.pLEIntegerPara1_2_2, pv.getEngValue().getUint32Value()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/LEIntegerPara1_2_3")); assertNotNull(pv); assertEquals(tmGenerator.pLEIntegerPara1_2_3, pv.getEngValue().getUint32Value()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/LEFloatPara1_2_1")); assertNotNull(pv); assertEquals(tmGenerator.pLEFloatPara1_2_1*0.0001672918, pv.getEngValue().getFloatValue(), 1e-8); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/LEFloatPara1_2_2")); assertNotNull(pv); assertEquals(tmGenerator.pLEFloatPara1_2_2, pv.getEngValue().getFloatValue(), 0); assertEquals(pv.getAcquisitionTime()+1500, pv.getExpirationTime()); } @Test public void testPKT1_3StringStructure() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_3(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT13 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals( 13, received.size() ); // Fixed size strings ParameterValue pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/FixedStringPara1_3_1")); assertEquals(pFixedStringPara1_3_1, pv.getEngValue().getStringValue()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/FixedStringPara1_3_2")); assertEquals(pFixedStringPara1_3_2, pv.getEngValue().getStringValue()); // Terminated strings pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/TerminatedStringPara1_3_3")); assertEquals(pTerminatedStringPara1_3_3, pv.getEngValue().getStringValue()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/TerminatedStringPara1_3_4")); assertEquals(pTerminatedStringPara1_3_4, pv.getEngValue().getStringValue()); // Prepended size strings pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/PrependedSizeStringPara1_3_5")); assertEquals(pPrependedSizeStringPara1_3_5, pv.getEngValue().getStringValue()); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/PrependedSizeStringPara1_3_6")); assertEquals(pPrependedSizeStringPara1_3_6, pv.getEngValue().getStringValue()); // Final fixed size string of large space pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/FixedStringPara1_3_7")); assertEquals(pFixedStringPara1_3_7, pv.getEngValue().getStringValue()); } @Test public void testPKT1_4StringFloatStructure() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT14(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT14 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); // Check all the parameters have been parsed assertEquals( 12, received.size() ); ParameterValue pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatFSPara1_4_1")); assertEquals( Float.parseFloat(tmGenerator.pStringFloatFSPara1_4_1 ), pv.getEngValue().getFloatValue(), 0.0001 ); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatTSCPara1_4_2")); assertEquals( Float.parseFloat(tmGenerator.pStringFloatTSCPara1_4_2 ), pv.getEngValue().getFloatValue(), 0.0001 ); pv=received.removeLast(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatTSSCPara1_4_3")); assertEquals( Float.parseFloat( pStringFloatTSSCPara1_4_3 ), pv.getEngValue().getFloatValue(), 0.0001 ); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatTSSCPara1_4_3")); assertEquals( Float.parseFloat(pStringFloatTSSCPara1_4_3 ), pv.getEngValue().getFloatValue(), 0.0001 ); pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatPSPara1_4_5")); assertEquals( Float.parseFloat(pStringFloatPSPara1_4_5 ), pv.getEngValue().getFloatValue(), 0.0001 ); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatFSBPara1_4_4")); assertEquals( Float.parseFloat(pStringFloatFSBPara1_4_4 ), pv.getEngValue().getFloatValue(), 0.0001 ); } @Test public void testPKT1_4InvalidStringFloatStructure() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); tmGenerator.pStringFloatTSCPara1_4_2 = "invalidfloat"; ByteBuffer bb=tmGenerator.generate_PKT14(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT14 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); // Check all the parameters have been parsed assertEquals( 12, received.size() ); ParameterValue pv=received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringFloatTSCPara1_4_2")); assertEquals(AcquisitionStatus.INVALID, pv.getAcquisitionStatus()); } @Test public void testPKT1_5StringIntStructure() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_5(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT15 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); // Check all the parameters have been parsed assertEquals( 11, received.size() ); // Verify correct names ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringIntFixedPara1_5_1")); assertEquals( Integer.parseInt(pStringIntFixedPara1_5_1 ), pv.getEngValue().getUint32Value() ); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringIntTermPara1_5_2")); assertEquals( Integer.parseInt(tmGenerator.pStringIntTermPara1_5_2 ), pv.getEngValue().getUint32Value() ); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringIntTermPara1_5_3")); assertEquals( Integer.parseInt(pStringIntTermPara1_5_3 ), pv.getEngValue().getUint32Value() ); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringIntPrePara1_5_4")); assertEquals( Integer.parseInt(pStringIntPrePara1_5_4 ), pv.getEngValue().getUint32Value() ); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringIntStrPara1_5_5")); assertEquals( Integer.parseInt(pStringIntStrPara1_5_5 ), pv.getEngValue().getUint32Value() ); } @Test public void testPKT1_5InvalidStringIntStructure() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); tmGenerator.pStringIntTermPara1_5_2="invalidint"; ByteBuffer bb=tmGenerator.generate_PKT1_5(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT15 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); // Check all the parameters have been parsed assertEquals( 11, received.size() ); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringIntTermPara1_5_2")); assertEquals( AcquisitionStatus.INVALID, pv.getAcquisitionStatus()); } @Test public void testPKT1_9BooleanValues() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_9(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT19 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(10, received.size()); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/BooleanPara1_9_1")); assertEquals(true, pv.getRawValue().getBooleanValue()); assertEquals(true, pv.getEngValue().getBooleanValue()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/BooleanPara1_9_2")); assertEquals(false, pv.getRawValue().getBooleanValue()); assertEquals(false, pv.getEngValue().getBooleanValue()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/BooleanPara1_9_3")); assertEquals(true, pv.getRawValue().getBooleanValue()); assertEquals(true, pv.getEngValue().getBooleanValue()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/BooleanPara1_9_4")); assertEquals(1, pv.getRawValue().getUint32Value()); assertEquals(true, pv.getEngValue().getBooleanValue()); } @Test public void testContainerSubscriptionPKT1_1() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProviding(xtcedb.getSequenceContainer("/REFMDB/SUBSYS1/PKT1")); ByteBuffer bb = tmGenerator.generate_PKT1_1(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> received=tmExtractor.getContainerResult(); assertEquals(2, received.size()); assertEquals("/REFMDB/ccsds-default", received.get(0).getContainer().getQualifiedName()); assertEquals("/REFMDB/SUBSYS1/PKT1", received.get(1).getContainer().getQualifiedName()); assertEquals("description 1", received.get(1).getContainer().getLongDescription()); bb.position(0); String pkt11 = byteBufferToHexString(bb); // First example, access the received PKT1, as its PKT11 instantiation ContainerExtractionResult pkt1Result = received.get(1); ByteBuffer pkt1Buffer = pkt1Result.getContainerContent(); assertEquals(0, pkt1Buffer.position()); String pkt1 = byteBufferToHexString(pkt1Buffer); assertTrue(pkt11.equals(pkt1)); // Second example, access only parameters in XTCE PKT1 definition pkt1Buffer.position(pkt1Result.getLocationInContainerInBits() / 8); pkt1Buffer.limit(pkt1Buffer.position() + tmGenerator.pkt1Length); String pkt1b = byteBufferToHexString(pkt1Buffer.slice()); assertTrue(pkt11.contains(pkt1b)); assertEquals(tmGenerator.headerLength, pkt11.indexOf(pkt1b) / 2); } @Test public void testPKT1_7FloatStructure() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_7(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); //System.out.println("PKT17 buffer: "+StringConvertors.arrayToHexString(bb.array())); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(11, received.size()); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/FloatPara1_7_1")); assertEquals(-14.928, pv.getEngValue().getFloatValue(), 1e-5); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_7_2")); assertEquals(6, pv.getEngValue().getSint32Value()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_7_3")); assertEquals(-6, pv.getEngValue().getSint32Value()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_7_4")); assertEquals(6, pv.getEngValue().getSint32Value()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_7_5")); assertEquals(-6, pv.getEngValue().getSint32Value()); } @Test public void testPKT1_11_longuint32() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_11(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); ParameterValueList received=tmExtractor.getParameterResult(); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_11_1")); assertEquals(tmGenerator.pIntegerPara1_11_1_unsigned_value/2, pv.getEngValue().getUint32Value()&0xFFFFFFFFL); } @Test public void testPKT1_12_stringenum() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_12(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); ParameterValueList received=tmExtractor.getParameterResult(); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringEnumPara1_12_1")); assertEquals(tmGenerator.pStringEnumPara1_12_1, pv.getRawValue().getStringValue()); assertEquals("value1", pv.getEngValue().getStringValue()); } @Test public void testPKT1_12_invalidstringenum() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); tmGenerator.pStringEnumPara1_12_1="invalidlong"; XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_12(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); ParameterValueList received=tmExtractor.getParameterResult(); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/StringEnumPara1_12_1")); assertEquals(tmGenerator.pStringEnumPara1_12_1, pv.getRawValue().getStringValue()); assertEquals(AcquisitionStatus.INVALID, pv.getAcquisitionStatus()); } @Test public void testPKT3_dynamicSize() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT3(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(17, received.size()); assertEquals(2, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_1")).getRawValue().getUint32Value()); assertEquals(3, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_2")).getRawValue().getUint32Value()); assertEquals(4, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara1_2")).getRawValue().getUint32Value()); assertEquals(5, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para1")).getRawValue().getUint32Value()); assertEquals(6, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para2")).getRawValue().getUint32Value()); assertEquals(61, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para2_1")).getRawValue().getUint32Value()); assertEquals(7, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para1")).getRawValue().getUint32Value()); assertEquals(8, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para2")).getRawValue().getUint32Value()); assertEquals(9, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para1")).getRawValue().getUint32Value()); assertEquals(10, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para2")).getRawValue().getUint32Value()); assertEquals(11, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para3")).getRawValue().getUint32Value()); assertEquals(12, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para4")).getRawValue().getUint32Value()); assertEquals(13, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para3")).getRawValue().getUint32Value()); assertEquals(14, received.removeFirst(xtcedb.getParameter("/REFMDB/SUBSYS1/block_para4")).getRawValue().getUint32Value()); } @Test public void testProcessPacket_startContainer() throws ConfigurationException { RefMdbPacketGenerator tmGenerator = new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor = new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb = tmGenerator.generate_PKT2(); SequenceContainer startContainer = xtcedb.getSequenceContainer("/REFMDB/SUBSYS1/PKT2"); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime(), startContainer); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(2, received.size()); ParameterValue pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara2_1")); assertEquals(pIntegerPara2_1, pv.getEngValue().getUint32Value()); pv = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/IntegerPara2_2")); assertEquals(pIntegerPara2_2, pv.getEngValue().getUint32Value()); } @Test public void testPKT1_List() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_List(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> containers = tmExtractor.getContainerResult(); SequenceContainer container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_List", container.getName()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); } @Test public void testPKT1_AND() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT1_AND(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> containers = tmExtractor.getContainerResult(); SequenceContainer container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_AND", container.getName()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); } @Test public void testPKT1_PKT1_OR() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); // first condition ByteBuffer bb=tmGenerator.generate_PKT1_OR_1(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> containers = tmExtractor.getContainerResult(); SequenceContainer container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_OR", container.getName()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); } @Test public void testPKT1_PKT1_AND_OR() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); // first condition ByteBuffer bb=tmGenerator.generate_PKT1_AND_OR_1(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> containers = tmExtractor.getContainerResult(); SequenceContainer container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_AND_OR", container.getName()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); // second condition bb=tmGenerator.generate_PKT1_AND_OR_2(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); containers = tmExtractor.getContainerResult(); container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_AND_OR", container.getName()); received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); } @Test public void testPKT1_PKT1_OR_AND() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); // or condition 1 ByteBuffer bb=tmGenerator.generate_PKT1(0, 0, (short) 1); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> containers = tmExtractor.getContainerResult(); SequenceContainer container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_OR_AND", container.getName()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); // or condition 3 bb=tmGenerator.generate_PKT1(0, 0, (short) 3); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); containers = tmExtractor.getContainerResult(); container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_OR_AND", container.getName()); received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); // does not match bb=tmGenerator.generate_PKT1(0, 0, (short) 4); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); containers = tmExtractor.getContainerResult(); container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1", container.getName()); received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); } @Test public void testPKT1_PKT1_RANGE() { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); // in range ]0xA, 0xC[ ByteBuffer bb=tmGenerator.generate_PKT1(0, 0, (short) 11); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); List<ContainerExtractionResult> containers = tmExtractor.getContainerResult(); SequenceContainer container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1_RANGE", container.getName()); ParameterValueList received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); // out of range bb=tmGenerator.generate_PKT1(0, 0, (short) 12); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); containers = tmExtractor.getContainerResult(); container = tmExtractor.getContainerResult().get(containers.size() -1).getContainer(); assertEquals("PKT1", container.getName()); received=tmExtractor.getParameterResult(); assertEquals(received.size(), 6); } @Test public void testPKT4_JavaAlgo() throws ConfigurationException { RefMdbPacketGenerator tmGenerator=new RefMdbPacketGenerator(); XtceTmExtractor tmExtractor=new XtceTmExtractor(xtcedb); tmExtractor.startProvidingAll(); ByteBuffer bb=tmGenerator.generate_PKT4(); tmExtractor.processPacket(bb, TimeEncoding.getWallclockTime(), TimeEncoding.getWallclockTime()); ParameterValueList received = tmExtractor.getParameterResult(); assertEquals(4, received.size() ); ParameterValue pv2 = received.getLastInserted(xtcedb.getParameter("/REFMDB/SUBSYS1/FloatPara4_1")); assertNotNull(pv2); assertEquals(3.0, pv2.getEngValue().getFloatValue(), 1e-2); } private String byteBufferToHexString(ByteBuffer bb) { bb.mark(); StringBuilder sb =new StringBuilder(); while(bb.hasRemaining()) { String s=Integer.toString(bb.get()&0xFF,16); if(s.length()==1) sb.append("0"); sb.append(s.toUpperCase()); } bb.reset(); return sb.toString(); } }