diff --git a/opendis/record/base.py b/opendis/record/base.py index 735025f..a965713 100644 --- a/opendis/record/base.py +++ b/opendis/record/base.py @@ -82,10 +82,11 @@ def recordLength(self) -> int: @abstractmethod def serialize(self, outputStream: DataOutputStream) -> None: - """Serialize the record to the output stream.""" - super().serialize(outputStream) - outputStream.write_uint32(self.recordType) - outputStream.write_uint32(self.recordLength) + """Serialize the record to the output stream. + + The record header (recordType u32 + recordLength u16, see 6.2.83) + is written by each subclass before its own fields. + """ @abstractmethod def parse(self, # pyright: ignore [reportIncompatibleMethodOverride] diff --git a/opendis/record/radio/__init__.py b/opendis/record/radio/__init__.py index 8667ef5..1543c9a 100644 --- a/opendis/record/radio/__init__.py +++ b/opendis/record/radio/__init__.py @@ -480,6 +480,8 @@ def marshalledSize(self) -> int: def serialize(self, outputStream: DataOutputStream) -> None: super().serialize(outputStream) + outputStream.write_uint32(self.recordType) + outputStream.write_uint16(self.recordLength) outputStream.write_uint16(self.padding1) self.netId.serialize(outputStream) outputStream.write_uint8(self.todTransmitIndicator) diff --git a/tests/test_StandardVariableRecord.py b/tests/test_StandardVariableRecord.py new file mode 100644 index 0000000..cbe260f --- /dev/null +++ b/tests/test_StandardVariableRecord.py @@ -0,0 +1,22 @@ +#!python + +import io +import unittest + +from opendis.stream import DataOutputStream +from opendis.record.warfare import DirectedEnergyDamage + + +class TestStandardVariableRecord(unittest.TestCase): + + def test_serialize_length_matches_marshalledSize(self): + record = DirectedEnergyDamage() + buffer = io.BytesIO() + record.serialize(DataOutputStream(buffer)) + self.assertEqual(record.marshalledSize(), len(buffer.getvalue())) + self.assertEqual(record.recordLength, len(buffer.getvalue())) + self.assertEqual(40, len(buffer.getvalue())) + + +if __name__ == "__main__": + unittest.main()