@@ -1118,4 +1118,164 @@ mod tests {
11181118 e. pad_to ( u16:: MAX as usize + 1 , 0 ) ;
11191119 assert_eq ! ( Frame :: decode( & mut e. as_decoder( ) ) , Err ( Error :: TooMuchData ) ) ;
11201120 }
1121+
1122+ #[ test]
1123+ fn dump ( ) {
1124+ let s = |id| StreamId :: from ( id) ;
1125+ assert_eq ! ( Frame :: Padding ( 5 ) . dump( ) , "Padding { len: 5 }" ) ;
1126+ assert_eq ! (
1127+ Frame :: Crypto {
1128+ offset: 1 ,
1129+ data: & [ 2 , 3 ]
1130+ }
1131+ . dump( ) ,
1132+ "Crypto { offset: 1, len: 2 }"
1133+ ) ;
1134+ assert_eq ! (
1135+ Frame :: Stream {
1136+ stream_id: s( 4 ) ,
1137+ offset: 10 ,
1138+ data: & [ 1 ] ,
1139+ fin: true ,
1140+ fill: false
1141+ }
1142+ . dump( ) ,
1143+ "Stream { stream_id: 4, offset: 10, len: 1, fin: true }"
1144+ ) ;
1145+ assert_eq ! (
1146+ Frame :: Stream {
1147+ stream_id: s( 4 ) ,
1148+ offset: 0 ,
1149+ data: & [ 1 , 2 ] ,
1150+ fin: false ,
1151+ fill: true
1152+ }
1153+ . dump( ) ,
1154+ "Stream { stream_id: 4, offset: 0, len: >>2, fin: false }"
1155+ ) ;
1156+ assert_eq ! (
1157+ Frame :: Datagram {
1158+ data: & [ 1 , 2 , 3 ] ,
1159+ fill: false
1160+ }
1161+ . dump( ) ,
1162+ "Datagram { len: 3 }"
1163+ ) ;
1164+ // Remaining frames use Debug format
1165+ assert_eq ! ( Frame :: Ping . dump( ) , "Ping" ) ;
1166+ assert_eq ! (
1167+ Frame :: Ack {
1168+ largest_acknowledged: 1 ,
1169+ ack_delay: 2 ,
1170+ first_ack_range: 0 ,
1171+ ack_ranges: vec![ ] ,
1172+ ecn_count: None
1173+ }
1174+ . dump( ) ,
1175+ "Ack { largest_acknowledged: 1, ack_delay: 2, first_ack_range: 0, ack_ranges: [], ecn_count: None }"
1176+ ) ;
1177+ assert_eq ! (
1178+ Frame :: ResetStream {
1179+ stream_id: s( 1 ) ,
1180+ application_error_code: 2 ,
1181+ final_size: 3
1182+ }
1183+ . dump( ) ,
1184+ "ResetStream { stream_id: StreamId(1), application_error_code: 2, final_size: 3 }"
1185+ ) ;
1186+ assert_eq ! (
1187+ Frame :: StopSending {
1188+ stream_id: s( 1 ) ,
1189+ application_error_code: 2
1190+ }
1191+ . dump( ) ,
1192+ "StopSending { stream_id: StreamId(1), application_error_code: 2 }"
1193+ ) ;
1194+ assert_eq ! (
1195+ Frame :: NewToken { token: & [ 1 ] } . dump( ) ,
1196+ "NewToken { token: [1] }"
1197+ ) ;
1198+ assert_eq ! (
1199+ Frame :: MaxData { maximum_data: 100 } . dump( ) ,
1200+ "MaxData { maximum_data: 100 }"
1201+ ) ;
1202+ assert_eq ! (
1203+ Frame :: MaxStreamData {
1204+ stream_id: s( 1 ) ,
1205+ maximum_stream_data: 100
1206+ }
1207+ . dump( ) ,
1208+ "MaxStreamData { stream_id: StreamId(1), maximum_stream_data: 100 }"
1209+ ) ;
1210+ assert_eq ! (
1211+ Frame :: MaxStreams {
1212+ stream_type: StreamType :: BiDi ,
1213+ maximum_streams: 10
1214+ }
1215+ . dump( ) ,
1216+ "MaxStreams { stream_type: BiDi, maximum_streams: 10 }"
1217+ ) ;
1218+ assert_eq ! (
1219+ Frame :: DataBlocked { data_limit: 50 } . dump( ) ,
1220+ "DataBlocked { data_limit: 50 }"
1221+ ) ;
1222+ assert_eq ! (
1223+ Frame :: StreamDataBlocked {
1224+ stream_id: s( 1 ) ,
1225+ stream_data_limit: 50
1226+ }
1227+ . dump( ) ,
1228+ "StreamDataBlocked { stream_id: StreamId(1), stream_data_limit: 50 }"
1229+ ) ;
1230+ assert_eq ! (
1231+ Frame :: StreamsBlocked {
1232+ stream_type: StreamType :: UniDi ,
1233+ stream_limit: 5
1234+ }
1235+ . dump( ) ,
1236+ "StreamsBlocked { stream_type: UniDi, stream_limit: 5 }"
1237+ ) ;
1238+ assert_eq ! (
1239+ Frame :: NewConnectionId {
1240+ sequence_number: 1 ,
1241+ retire_prior: 0 ,
1242+ connection_id: & [ 1 , 2 ] ,
1243+ stateless_reset_token: Srt :: new( [ 0 ; 16 ] )
1244+ }
1245+ . dump( ) ,
1246+ "NewConnectionId { sequence_number: 1, retire_prior: 0, connection_id: [1, 2], stateless_reset_token: Token([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) }"
1247+ ) ;
1248+ assert_eq ! (
1249+ Frame :: RetireConnectionId { sequence_number: 1 } . dump( ) ,
1250+ "RetireConnectionId { sequence_number: 1 }"
1251+ ) ;
1252+ assert_eq ! (
1253+ Frame :: PathChallenge { data: [ 1 ; 8 ] } . dump( ) ,
1254+ "PathChallenge { data: [1, 1, 1, 1, 1, 1, 1, 1] }"
1255+ ) ;
1256+ assert_eq ! (
1257+ Frame :: PathResponse { data: [ 2 ; 8 ] } . dump( ) ,
1258+ "PathResponse { data: [2, 2, 2, 2, 2, 2, 2, 2] }"
1259+ ) ;
1260+ assert_eq ! (
1261+ Frame :: ConnectionClose {
1262+ error_code: CloseError :: Transport ( 0 ) ,
1263+ frame_type: 0 ,
1264+ reason_phrase: String :: new( )
1265+ }
1266+ . dump( ) ,
1267+ "ConnectionClose { error_code: Transport(0), frame_type: 0, reason_phrase: \" \" }"
1268+ ) ;
1269+ assert_eq ! ( Frame :: HandshakeDone . dump( ) , "HandshakeDone" ) ;
1270+ assert_eq ! (
1271+ Frame :: AckFrequency {
1272+ seqno: 1 ,
1273+ tolerance: 2 ,
1274+ delay: 3 ,
1275+ ignore_order: false
1276+ }
1277+ . dump( ) ,
1278+ "AckFrequency { seqno: 1, tolerance: 2, delay: 3, ignore_order: false }"
1279+ ) ;
1280+ }
11211281}
0 commit comments