Skip to content

Commit d2dcf1d

Browse files
committed
CA-447 Add unit tests for various byte-order situations.
1 parent 2e1a48a commit d2dcf1d

File tree

2 files changed

+132
-22
lines changed

2 files changed

+132
-22
lines changed

tests/test_SourceVITA49.py

Lines changed: 123 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
# along with this program. If not, see http://www.gnu.org/licenses/.
2020
#
2121

22-
DEBUG_LEVEL = 5
22+
DEBUG_LEVEL = 3
2323
LITTLE_ENDIAN=1234
2424
BIG_ENDIAN=4321
2525

@@ -96,9 +96,16 @@ def componentSetup(self):
9696
def connectOutputData(self,portName= "dataShort_out"):
9797
self.dataSink = sb.DataSink()
9898
self.comp.connect(self.dataSink,usesPortName=portName)
99+
100+
def pushSriBigEndian(self,xdelta=1,streamID='TestStreamID',mode=0,kw=[]):
101+
kw.append(CF.DataType("dataRef", ossie.properties.to_tc_value(BIG_ENDIAN, 'string')))
102+
self.pushSRI(xdelta, streamID, mode, kw)
103+
104+
def pushSriLittleEndian(self,xdelta=1,streamID='TestStreamID',mode=0,kw=[]):
105+
kw.append(CF.DataType("dataRef", ossie.properties.to_tc_value(LITTLE_ENDIAN, 'string')))
106+
self.pushSRI(xdelta, streamID, mode, kw)
99107

100108
def pushSRI(self,xdelta=1,streamID='TestStreamID',mode=0,kw=[]):
101-
kw.append(CF.DataType("dataRef", ossie.properties.to_tc_value(BIG_ENDIAN, 'string')))
102109
sri = BULKIO.StreamSRI(hversion=1, xstart=0.0, xdelta=xdelta, xunits=1, subsize=0, ystart=0.0, ydelta=0.0, yunits=0, mode=mode, streamID=streamID, blocking=False, keywords=kw)
103110
self.input_vita49_port.pushSRI(sri,timestamp.now())
104111

@@ -182,28 +189,28 @@ def createVITA49Data(self,streamID="vita49TestData",format=VITA49.DATA_FORMATS.S
182189

183190
return v49
184191

185-
def sendDataandCheck(self,vita49Frame):
192+
def sendDataandCheck(self,vita49Frame, littleEndianPayload=False):
186193

187194
Indata=[x %256 for x in range(self.vector_size)]
188195

189196
# Send Data Packet
190-
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False)
197+
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False, littleEndianContent=littleEndianPayload)
191198
self.writeSocketData(frame)
192199
time.sleep(.1)
193200

194201
# Send Context Packet
195-
frame = vita49Frame.generateVRLFrame(None, force_send_context=True)
202+
frame = vita49Frame.generateVRLFrame(None, force_send_context=True, littleEndianContent=littleEndianPayload)
196203
self.writeSocketData(frame)
197204
time.sleep(.1)
198205

199206
# Send Data Packets
200-
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False)
207+
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False, littleEndianContent=littleEndianPayload)
201208
self.writeSocketData(frame)
202209

203-
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False)
210+
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False, littleEndianContent=littleEndianPayload)
204211
self.writeSocketData(frame)
205212

206-
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False)
213+
frame = vita49Frame.generateVRLFrame(Indata, force_send_context=False, littleEndianContent=littleEndianPayload)
207214
self.writeSocketData(frame)
208215

209216

@@ -329,15 +336,15 @@ def testAttachDetach(self):
329336

330337
self.comp.start()
331338
attachId = self.callAttach(True,0)
332-
self.pushSRI()
339+
self.pushSriBigEndian()
333340
self.input_vita49_port.detach(attachId)
334341

335342
attachId = self.callAttach(True,0)
336-
self.pushSRI()
343+
self.pushSriBigEndian()
337344
self.input_vita49_port.detach(attachId)
338345

339346
attachId = self.callAttach(True,0)
340-
self.pushSRI()
347+
self.pushSriBigEndian()
341348
self.input_vita49_port.detach(attachId)
342349

343350

@@ -346,7 +353,7 @@ def testSRI(self):
346353
self.connectOutputData()
347354

348355

349-
self.pushSRI(xdelta=.0001,mode=1,streamID="testSRIStream", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
356+
self.pushSriBigEndian(xdelta=.0001,mode=1,streamID="testSRIStream", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
350357
attachId = self.callAttach(True,0)
351358
self.comp.start()
352359

@@ -369,15 +376,15 @@ def testSRI(self):
369376

370377

371378
#Change SRI and see if changed on output
372-
self.pushSRI(xdelta=.01,mode=0,streamID="testSRIStream", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
379+
self.pushSriBigEndian(xdelta=.01,mode=0,streamID="testSRIStream", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
373380
time.sleep(.5)
374381
sri = self.dataSink.sri()
375382
self.assertEqual(sri.streamID,"testSRIStream")
376383
self.assertEqual(sri.xdelta,.01)
377384
self.assertEqual(sri.mode,0)
378385

379386
# Update just a keyword
380-
self.pushSRI(xdelta=.01,mode=0,streamID="testSRIStream", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(200000000, 'double'))])
387+
self.pushSriBigEndian(xdelta=.01,mode=0,streamID="testSRIStream", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(200000000, 'double'))])
381388
time.sleep(.5)
382389
sri = self.dataSink.sri()
383390

@@ -396,8 +403,107 @@ def testSRI(self):
396403

397404
self.input_vita49_port.detach(attachId)
398405

399-
def testSendDataSI(self):
406+
def testSendDataBigEndianSI(self):
407+
408+
self.connectOutputData(portName= "dataShort_out")
409+
410+
attachId = self.callAttach(True,0)
411+
self.pushSriBigEndian(xdelta=1/10000,mode=1,streamID="testSendDataSI", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
412+
413+
self.comp.start()
414+
time.sleep(1)
415+
416+
v49 = self.createVITA49Data(streamID="testSendDataSI",format=VITA49.DATA_FORMATS.SI,vector_size=self.vector_size)
417+
self.sendDataandCheck(v49)
418+
419+
420+
print "****Send Detach "
421+
self.input_vita49_port.detach(attachId)
422+
423+
def testSendDataBigEndianCI(self):
424+
425+
self.connectOutputData(portName= "dataShort_out")
426+
attachId = self.callAttach(True,1)
427+
self.pushSriBigEndian(xdelta=1/10000,mode=1,streamID="testSendDataCI", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
428+
429+
self.comp.start()
430+
time.sleep(1)
431+
432+
v49 = self.createVITA49Data(streamID="testSendDataCI",format=VITA49.DATA_FORMATS.CI,vector_size=self.vector_size/2)
433+
self.sendDataandCheck(v49)
434+
435+
436+
print "****Send Detach "
437+
self.input_vita49_port.detach(attachId)
438+
439+
def testSendDataBigEndianSF(self):
440+
441+
self.connectOutputData(portName= "dataFloat_out")
442+
443+
attachId = self.callAttach(True,2)
444+
self.pushSriBigEndian(xdelta=1/10000,mode=1,streamID="testSendDataSF", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
445+
446+
self.comp.start()
447+
time.sleep(1)
448+
449+
v49 = self.createVITA49Data(streamID="testSendDataSF",format=VITA49.DATA_FORMATS.SF,vector_size=self.vector_size)
450+
self.sendDataandCheck(v49)
451+
452+
453+
print "****Send Detach "
454+
self.input_vita49_port.detach(attachId)
455+
456+
def testSendDataLittleEndianSI(self):
457+
458+
self.connectOutputData(portName= "dataShort_out")
459+
460+
attachId = self.callAttach(True,0)
461+
self.pushSriLittleEndian(xdelta=1/10000,mode=1,streamID="testSendDataSI", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
462+
463+
self.comp.start()
464+
time.sleep(1)
465+
466+
v49 = self.createVITA49Data(streamID="testSendDataSI",format=VITA49.DATA_FORMATS.SI,vector_size=self.vector_size)
467+
self.sendDataandCheck(v49, littleEndianPayload=True)
468+
469+
470+
print "****Send Detach "
471+
self.input_vita49_port.detach(attachId)
472+
473+
def testSendDataLittleEndianCI(self):
474+
475+
self.connectOutputData(portName= "dataShort_out")
476+
attachId = self.callAttach(True,1)
477+
self.pushSriLittleEndian(xdelta=1/10000,mode=1,streamID="testSendDataCI", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
478+
479+
self.comp.start()
480+
time.sleep(1)
481+
482+
v49 = self.createVITA49Data(streamID="testSendDataCI",format=VITA49.DATA_FORMATS.CI,vector_size=self.vector_size/2)
483+
self.sendDataandCheck(v49, littleEndianPayload=True)
484+
485+
486+
print "****Send Detach "
487+
self.input_vita49_port.detach(attachId)
488+
489+
def testSendDataLittleEndianSF(self):
490+
491+
self.connectOutputData(portName= "dataFloat_out")
492+
493+
attachId = self.callAttach(True,2)
494+
self.pushSriLittleEndian(xdelta=1/10000,mode=1,streamID="testSendDataSF", kw=[CF.DataType("COL_RF", ossie.properties.to_tc_value(100000000, 'double'))])
495+
496+
self.comp.start()
497+
time.sleep(1)
498+
499+
v49 = self.createVITA49Data(streamID="testSendDataSF",format=VITA49.DATA_FORMATS.SF,vector_size=self.vector_size)
500+
self.sendDataandCheck(v49, littleEndianPayload=True)
501+
502+
503+
print "****Send Detach "
504+
self.input_vita49_port.detach(attachId)
400505

506+
def testSendDataDefaultEndianSI(self):
401507

402508
self.connectOutputData(portName= "dataShort_out")
403509

@@ -414,7 +520,7 @@ def testSendDataSI(self):
414520
print "****Send Detach "
415521
self.input_vita49_port.detach(attachId)
416522

417-
def testSendDataCI(self):
523+
def testSendDataDefaultEndianCI(self):
418524

419525
self.connectOutputData(portName= "dataShort_out")
420526
attachId = self.callAttach(True,1)
@@ -430,7 +536,7 @@ def testSendDataCI(self):
430536
print "****Send Detach "
431537
self.input_vita49_port.detach(attachId)
432538

433-
def testSendDataSF(self):
539+
def testSendDataDefaultEndianSF(self):
434540

435541
self.connectOutputData(portName= "dataFloat_out")
436542

tests/vita49.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def toVITA49Int(self, value, radix=20):
153153
lower = shifted & 0xFFFFFFFF
154154
return upper, lower
155155

156-
def generateVRLFrame(self, data=None, force_send_context=True, packet_max_elements=None):
156+
def generateVRLFrame(self, data=None, force_send_context=True, packet_max_elements=None, littleEndianContent=False):
157157
VRL_FAW = 0x56524C50
158158
NO_CRC = 0x56454E44
159159

@@ -162,7 +162,7 @@ def generateVRLFrame(self, data=None, force_send_context=True, packet_max_elemen
162162
if force_send_context:
163163
content += self.generateContextPacket()
164164
if data != None:
165-
content += self.generateDataPacket(data)
165+
content += self.generateDataPacket(data, littleEndianContent)
166166

167167
#Add header
168168
frame = struct.pack('!I', VRL_FAW)
@@ -230,7 +230,7 @@ def generateContextPacket(self, allowed_cif_fields=CIF.all_fields):
230230
self.setPacketLength(pkt, len(pkt))
231231
return struct.pack('!%dI'%len(pkt), *pkt)
232232

233-
def generateDataPacket(self, data):
233+
def generateDataPacket(self, data, littleEndianContent=False):
234234
pkt = self.generateCommonHeader()
235235

236236

@@ -256,8 +256,12 @@ def generateDataPacket(self, data):
256256
raise RuntimeError("Must provide data that packs to a 32 bit boundary" )
257257

258258
#Byte swap each element and append in
259+
byteOrderFlag = '!' # Network Byte Order, also Big Endian
260+
if littleEndianContent:
261+
byteOrderFlag = '<' # Little Endian
259262
for d in flat_data:
260-
content += struct.pack('!%s'%pack_type, d)
263+
#content += struct.pack('!%s'%pack_type, d)
264+
content += struct.pack(byteOrderFlag+'%s'%pack_type, d)
261265

262266
self.setPacketLength(pkt, len(pkt) + len(content)/4)
263267
return struct.pack('!%dI'%len(pkt), *pkt)+content
@@ -287,4 +291,4 @@ def printData(self, pkt):
287291

288292

289293

290-
294+

0 commit comments

Comments
 (0)