@@ -37,12 +37,9 @@ impl<NG: Deref<Target=NetworkGraph<L>>, L: Deref> RapidGossipSync<NG, L> where L
37
37
let mut prefix = [ 0u8 ; 4 ] ;
38
38
read_cursor. read_exact ( & mut prefix) ?;
39
39
40
- match prefix {
41
- GOSSIP_PREFIX => { }
42
- _ => {
43
- return Err ( DecodeError :: UnknownVersion . into ( ) ) ;
44
- }
45
- } ;
40
+ if prefix != GOSSIP_PREFIX {
41
+ return Err ( DecodeError :: UnknownVersion . into ( ) ) ;
42
+ }
46
43
47
44
let chain_hash: BlockHash = Readable :: read ( read_cursor) ?;
48
45
let latest_seen_timestamp: u32 = Readable :: read ( read_cursor) ?;
@@ -534,4 +531,39 @@ mod tests {
534
531
assert ! ( after. contains( "619737530008010752" ) ) ;
535
532
assert ! ( after. contains( "783241506229452801" ) ) ;
536
533
}
534
+
535
+ #[ test]
536
+ pub fn update_fails_with_unknown_version ( ) {
537
+ let unknown_version_input = vec ! [
538
+ 76 , 68 , 75 , 2 , 111 , 226 , 140 , 10 , 182 , 241 , 179 , 114 , 193 , 166 , 162 , 70 , 174 , 99 , 247 ,
539
+ 79 , 147 , 30 , 131 , 101 , 225 , 90 , 8 , 156 , 104 , 214 , 25 , 0 , 0 , 0 , 0 , 0 , 97 , 227 , 98 , 218 ,
540
+ 0 , 0 , 0 , 4 , 2 , 22 , 7 , 207 , 206 , 25 , 164 , 197 , 231 , 230 , 231 , 56 , 102 , 61 , 250 , 251 ,
541
+ 187 , 172 , 38 , 46 , 79 , 247 , 108 , 44 , 155 , 48 , 219 , 238 , 252 , 53 , 192 , 6 , 67 , 2 , 36 , 125 ,
542
+ 157 , 176 , 223 , 175 , 234 , 116 , 94 , 248 , 201 , 225 , 97 , 235 , 50 , 47 , 115 , 172 , 63 , 136 ,
543
+ 88 , 216 , 115 , 11 , 111 , 217 , 114 , 84 , 116 , 124 , 231 , 107 , 2 , 158 , 1 , 242 , 121 , 152 , 106 ,
544
+ 204 , 131 , 186 , 35 , 93 , 70 , 216 , 10 , 237 , 224 , 183 , 89 , 95 , 65 , 3 , 83 , 185 , 58 , 138 ,
545
+ 181 , 64 , 187 , 103 , 127 , 68 , 50 , 2 , 201 , 19 , 17 , 138 , 136 , 149 , 185 , 226 , 156 , 137 , 175 ,
546
+ 110 , 32 , 237 , 0 , 217 , 90 , 31 , 100 , 228 , 149 , 46 , 219 , 175 , 168 , 77 , 4 , 143 , 38 , 128 ,
547
+ 76 , 97 , 0 , 0 , 0 , 2 , 0 , 0 , 255 , 8 , 153 , 192 , 0 , 2 , 27 , 0 , 0 , 0 , 1 , 0 , 0 , 255 , 2 , 68 ,
548
+ 226 , 0 , 6 , 11 , 0 , 1 , 2 , 3 , 0 , 0 , 0 , 4 , 0 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 232 , 0 , 0 , 3 , 232 ,
549
+ 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 29 , 129 , 25 , 192 , 255 , 8 , 153 , 192 , 0 , 2 , 27 , 0 , 0 , 60 , 0 , 0 ,
550
+ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 100 , 0 , 0 , 2 , 224 , 0 , 0 , 0 , 0 , 58 , 85 , 116 , 216 , 0 , 29 , 0 ,
551
+ 0 , 0 , 1 , 0 , 0 , 0 , 125 , 0 , 0 , 0 , 0 , 58 , 85 , 116 , 216 , 255 , 2 , 68 , 226 , 0 , 6 , 11 , 0 , 1 ,
552
+ 0 , 0 , 1 ,
553
+ ] ;
554
+
555
+ let block_hash = genesis_block ( Network :: Bitcoin ) . block_hash ( ) ;
556
+ let logger = TestLogger :: new ( ) ;
557
+ let network_graph = NetworkGraph :: new ( block_hash, & logger) ;
558
+ let rapid_sync = RapidGossipSync :: new ( & network_graph) ;
559
+ let update_result = rapid_sync. update_network_graph ( & unknown_version_input[ ..] ) ;
560
+
561
+ assert ! ( update_result. is_err( ) ) ;
562
+
563
+ if let Err ( GraphSyncError :: DecodeError ( DecodeError :: UnknownVersion ) ) = update_result {
564
+ // this is the expected error type
565
+ } else {
566
+ panic ! ( "Unexpected update result: {:?}" , update_result)
567
+ }
568
+ }
537
569
}
0 commit comments