@@ -14,20 +14,21 @@ pub(crate) fn fetch_key(host: &str, port: u16) -> Result<String, Error> {
1414 stream. write ( b"Connection: close\r \n " ) ?;
1515 stream. write ( b"\r \n " ) ?;
1616
17- let mut buffer = [ 0u8 ; 65536 ] ;
18- let buffer_size = stream. read ( & mut buffer) ?;
17+ let mut limited_stream = stream. take ( 65536 ) ;
18+ let mut buffer = Vec :: with_capacity ( 65536 ) ;
19+ limited_stream. read_to_end ( & mut buffer) ?;
1920 let mut headers = [ httparse:: EMPTY_HEADER ; 64 ] ;
2021 let mut response = Response :: new ( & mut headers) ;
2122 let Status :: Complete ( size_to_skip) = response
22- . parse ( & buffer[ ..buffer_size ] )
23+ . parse ( & buffer)
2324 . map_err ( |e| IoError :: new ( std:: io:: ErrorKind :: InvalidData , e) ) ?
2425 else {
2526 return Err ( Error :: NotFound ) ;
2627 } ;
2728 if response. code . unwrap ( ) != 200 {
2829 return Err ( Error :: NotFound ) ;
2930 }
30- Ok ( String :: from_utf8_lossy ( & buffer[ size_to_skip..buffer_size ] ) . to_string ( ) )
31+ Ok ( String :: from_utf8_lossy ( & buffer[ size_to_skip..] ) . to_string ( ) )
3132}
3233
3334#[ cfg( test) ]
@@ -43,13 +44,28 @@ mod tests {
4344 let server = Server :: run ( ) ;
4445 server. expect (
4546 Expectation :: matching ( request:: method_path ( "GET" , "/webos_rsa" ) )
46- . respond_with ( status_code ( 404 ) ) ,
47+ . respond_with ( status_code ( 404 ) . body ( "Not Found" ) ) ,
4748 ) ;
4849 let addr = server. addr ( ) ;
4950 let result = fetch_key ( addr. ip ( ) . to_string ( ) . as_str ( ) , addr. port ( ) ) ;
5051 assert ! ( result. is_err( ) ) ;
5152 }
5253
54+ #[ test]
55+ fn fetch_key_success ( ) {
56+ let server = Server :: run ( ) ;
57+ let expected_key =
58+ "-----BEGIN ENCRYPTED PRIVATE KEY-----\n ...\n -----END ENCRYPTED PRIVATE KEY-----\n " ;
59+ server. expect (
60+ Expectation :: matching ( request:: method_path ( "GET" , "/webos_rsa" ) )
61+ . respond_with ( status_code ( 200 ) . body ( expected_key) ) ,
62+ ) ;
63+ let addr = server. addr ( ) ;
64+ let result = fetch_key ( addr. ip ( ) . to_string ( ) . as_str ( ) , addr. port ( ) ) ;
65+ assert ! ( result. is_ok( ) ) ;
66+ assert_eq ! ( result. unwrap( ) , expected_key) ;
67+ }
68+
5369 #[ test]
5470 fn fetch_key_refused ( ) {
5571 let result = fetch_key ( "127.0.0.1" , 9991 ) ;
0 commit comments