@@ -3,7 +3,7 @@ use pretty_assertions::assert_eq;
3
3
use serde:: Deserialize ;
4
4
5
5
use crate :: {
6
- client:: options:: { ClientOptions , StreamAddress } ,
6
+ client:: options:: { ClientOptions , ClientOptionsParser , StreamAddress } ,
7
7
error:: ErrorKind ,
8
8
selection_criteria:: { ReadPreference , SelectionCriteria } ,
9
9
test:: run_spec_test,
@@ -332,3 +332,37 @@ async fn run_uri_options_spec_tests() {
332
332
async fn run_connection_string_spec_tests ( ) {
333
333
run_spec_test ( & [ "connection-string" ] , run_test) . await ;
334
334
}
335
+
336
+ async fn parse_uri ( option : & str , suggestion : Option < & str > ) {
337
+ match ClientOptionsParser :: parse ( & format ! ( "mongodb://host:27017/?{}=test" , option) )
338
+ . as_ref ( )
339
+ . map_err ( |e| e. as_ref ( ) )
340
+ {
341
+ Ok ( _) => panic ! ( "expected error for option {}" , option) ,
342
+ Err ( ErrorKind :: ArgumentError { message, .. } ) => {
343
+ match suggestion {
344
+ Some ( s) => assert ! ( message. contains( s) ) ,
345
+ None => assert ! ( !message. contains( "similar" ) ) ,
346
+ } ;
347
+ }
348
+ Err ( e) => panic ! ( "expected ArgumentError, but got {:?}" , e) ,
349
+ }
350
+ }
351
+
352
+ #[ cfg_attr( feature = "tokio-runtime" , tokio:: test) ]
353
+ #[ cfg_attr( feature = "async-std-runtime" , async_std:: test) ]
354
+ async fn parse_unknown_options ( ) {
355
+ parse_uri ( "invalidoption" , None ) . await ;
356
+ parse_uri ( "x" , None ) . await ;
357
+ parse_uri ( "max" , None ) . await ;
358
+ parse_uri ( "tlstimeout" , None ) . await ;
359
+ parse_uri ( "waitqueuetimeout" , Some ( "waitqueuetimeoutms" ) ) . await ;
360
+ parse_uri ( "retry_reads" , Some ( "retryreads" ) ) . await ;
361
+ parse_uri ( "poolsize" , Some ( "maxpoolsize" ) ) . await ;
362
+ parse_uri (
363
+ "tlspermitinvalidcertificates" ,
364
+ Some ( "tlsallowinvalidcertificates" ) ,
365
+ )
366
+ . await ;
367
+ parse_uri ( "maxstalenessms" , Some ( "maxstalenessseconds" ) ) . await ;
368
+ }
0 commit comments