@@ -1009,14 +1009,30 @@ def test_named_data_segments(self) -> None:
1009
1009
EXAMPLE_HEADER_DATA : bytes = (
1010
1010
# Magic bytes
1011
1011
b"eh00"
1012
- # uint32_t header size (little endian)
1012
+ # uint32_t header size (little endian). 0x20 --> 32 bytes.
1013
1013
+ b"\x20 \x00 \x00 \x00 "
1014
1014
# uint64_t program size
1015
1015
+ b"\x44 \x33 \x44 \x33 \x22 \x11 \x22 \x11 "
1016
1016
# uint64_t segment base offset
1017
1017
+ b"\x88 \x77 \x88 \x77 \x66 \x55 \x66 \x55 "
1018
1018
# uint64_t segment data size
1019
1019
+ b"\x22 \x33 \x22 \x33 \x44 \x55 \x44 \x55 "
1020
+ # Padding; provide at least NUM_HEAD_BYTES for the header.
1021
+ + b"\x99 " * (_ExtendedHeader .NUM_HEAD_BYTES - 32 )
1022
+ )
1023
+
1024
+ # Minimum fields in an extended header (no segment data size).
1025
+ EXAMPLE_HEADER_DATA_MIN : bytes = (
1026
+ # Magic bytes
1027
+ b"eh00"
1028
+ # uint32_t header size (little endian). 0x18 --> 24 bytes.
1029
+ + b"\x18 \x00 \x00 \x00 "
1030
+ # uint64_t program size
1031
+ + b"\x44 \x33 \x44 \x33 \x22 \x11 \x22 \x11 "
1032
+ # uint64_t segment base offset
1033
+ + b"\x88 \x77 \x88 \x77 \x66 \x55 \x66 \x55 "
1034
+ # Padding; provide at least NUM_HEAD_BYTES for the header.
1035
+ + b"\x99 " * (_ExtendedHeader .NUM_HEAD_BYTES - 24 )
1020
1036
)
1021
1037
1022
1038
@@ -1028,7 +1044,7 @@ def test_to_bytes(self) -> None:
1028
1044
segment_data_size = EXAMPLE_SEGMENT_DATA_SIZE ,
1029
1045
)
1030
1046
self .assertTrue (eh .is_valid ())
1031
- self .assertEqual (eh .to_bytes (), EXAMPLE_HEADER_DATA )
1047
+ self .assertEqual (eh .to_bytes (), EXAMPLE_HEADER_DATA [ 0 : 32 ] )
1032
1048
1033
1049
def test_to_bytes_with_non_defaults (self ) -> None :
1034
1050
eh = _ExtendedHeader (
@@ -1045,11 +1061,11 @@ def test_to_bytes_with_non_defaults(self) -> None:
1045
1061
1046
1062
# But still produces a valid output header, since to_bytes() ignores
1047
1063
# magic and length.
1048
- self .assertEqual (eh .to_bytes (), EXAMPLE_HEADER_DATA )
1064
+ self .assertEqual (eh .to_bytes (), EXAMPLE_HEADER_DATA [ 0 : 32 ] )
1049
1065
1050
1066
def test_from_bytes_valid (self ) -> None :
1051
1067
# Parse the serialized extended header.
1052
- eh = _ExtendedHeader .from_bytes (EXAMPLE_HEADER_DATA )
1068
+ eh = _ExtendedHeader .from_bytes (EXAMPLE_HEADER_DATA [ 0 : 32 ] )
1053
1069
1054
1070
# This is a valid header: good magic and length.
1055
1071
self .assertTrue (eh .is_valid ())
@@ -1060,6 +1076,20 @@ def test_from_bytes_valid(self) -> None:
1060
1076
self .assertEqual (eh .segment_base_offset , EXAMPLE_SEGMENT_BASE_OFFSET )
1061
1077
self .assertEqual (eh .segment_data_size , EXAMPLE_SEGMENT_DATA_SIZE )
1062
1078
1079
+ def test_from_bytes_minimum (self ) -> None :
1080
+ # Parse the serialized extended header.
1081
+ eh = _ExtendedHeader .from_bytes (EXAMPLE_HEADER_DATA_MIN )
1082
+
1083
+ # This is a valid header: good magic and length.
1084
+ self .assertTrue (eh .is_valid ())
1085
+
1086
+ self .assertEqual (eh .magic , _ExtendedHeader .EXPECTED_MAGIC )
1087
+ self .assertEqual (eh .length , _ExtendedHeader .MINIMUM_LENGTH )
1088
+ self .assertEqual (eh .program_size , EXAMPLE_PROGRAM_SIZE )
1089
+ self .assertEqual (eh .segment_base_offset , EXAMPLE_SEGMENT_BASE_OFFSET )
1090
+ # Does not contain segment_data_size; should be 0
1091
+ self .assertEqual (eh .segment_data_size , 0 )
1092
+
1063
1093
def test_from_bytes_with_more_data_than_necessary (self ) -> None :
1064
1094
# Pass in more data than necessary to parse the header.
1065
1095
header_data_with_suffix = EXAMPLE_HEADER_DATA + b"\x55 " * 16
@@ -1167,4 +1197,5 @@ def test_from_bytes_invalid_length(self) -> None:
1167
1197
self .assertEqual (eh .length , 16 )
1168
1198
self .assertEqual (eh .program_size , EXAMPLE_PROGRAM_SIZE )
1169
1199
self .assertEqual (eh .segment_base_offset , EXAMPLE_SEGMENT_BASE_OFFSET )
1170
- self .assertEqual (eh .segment_data_size , EXAMPLE_SEGMENT_DATA_SIZE )
1200
+ # Length cut short; segment_data_size parsed as 0.
1201
+ self .assertEqual (eh .segment_data_size , 0 )
0 commit comments