@@ -1436,4 +1436,66 @@ mod tests {
1436
1436
let mut buffer = BytesMut :: new ( ) ;
1437
1437
assert ! ( encoder. encode( input, & mut buffer) . is_err( ) ) ;
1438
1438
}
1439
+
1440
+ /// Test that the `Message::HereIAm { version, .. }` encoding is stable
1441
+ ///
1442
+ /// This encoding is used to check for compatibility, so it cannot change
1443
+ /// even upon protocol version bumps.
1444
+ #[ test]
1445
+ fn here_i_am_version ( ) {
1446
+ let upstairs_id = Uuid :: new_v4 ( ) ;
1447
+ let session_id = Uuid :: new_v4 ( ) ;
1448
+ let m = Message :: HereIAm {
1449
+ version : 123 ,
1450
+ upstairs_id,
1451
+ session_id,
1452
+ gen : 567 ,
1453
+ read_only : true ,
1454
+ encrypted : false ,
1455
+ alternate_versions : vec ! [ 8 , 9 ] ,
1456
+ } ;
1457
+ let encoded = bincode:: serialize ( & m) . unwrap ( ) ;
1458
+ assert_eq ! (
1459
+ & encoded[ 0 ..16 ] ,
1460
+ [
1461
+ 0 , 0 , 0 , 0 , // tag
1462
+ 123 , 0 , 0 , 0 , // version
1463
+ 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , // UUID length
1464
+ ]
1465
+ ) ;
1466
+ assert_eq ! ( & encoded[ 16 ..32 ] , upstairs_id. into_bytes( ) ) ;
1467
+ assert_eq ! ( & encoded[ 32 ..40 ] , [ 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ; // UUID length
1468
+ assert_eq ! ( & encoded[ 40 ..56 ] , session_id. into_bytes( ) ) ;
1469
+ assert_eq ! (
1470
+ & encoded[ 56 ..] ,
1471
+ [
1472
+ 55 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , // gen
1473
+ 1 , // read_only
1474
+ 0 , // encrypted
1475
+ 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , // alternate_versions.len()
1476
+ 8 , 0 , 0 , 0 , // alternate_versions[0]
1477
+ 9 , 0 , 0 , 0 , // alternate_versions[1]
1478
+ ]
1479
+ ) ;
1480
+ }
1481
+
1482
+ /// Test that the `Message::YesItsMe { version, .. }` encoding is stable
1483
+ ///
1484
+ /// This encoding is used to check for compatibility, so it cannot change
1485
+ /// even upon protocol version bumps.
1486
+ #[ test]
1487
+ fn yes_its_me_version ( ) {
1488
+ let m = Message :: YesItsMe {
1489
+ version : 123 ,
1490
+ repair_addr : "127.0.0.1:123" . parse ( ) . unwrap ( ) ,
1491
+ } ;
1492
+ let encoded = bincode:: serialize ( & m) . unwrap ( ) ;
1493
+ assert_eq ! (
1494
+ & encoded[ 0 ..8 ] ,
1495
+ [
1496
+ 1 , 0 , 0 , 0 , // tag
1497
+ 123 , 0 , 0 , 0 // version
1498
+ ]
1499
+ ) ;
1500
+ }
1439
1501
}
0 commit comments