@@ -9,7 +9,6 @@ use std::{
99 path:: Path ,
1010} ;
1111
12- use assert_cmd:: Command ;
1312use chrono:: { DateTime , Utc } ;
1413use expectorate:: assert_contents;
1514use httpmock:: { Method :: POST , Mock , MockServer } ;
@@ -147,8 +146,7 @@ fn test_auth_login_first() {
147146 // Make sure we know how to make non-existent directories.
148147 let config_dir = temp_dir_path. join ( ".config" ) . join ( "oxide" ) ;
149148
150- let cmd = Command :: cargo_bin ( "oxide" )
151- . unwrap ( )
149+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
152150 . env ( "RUST_BACKTRACE" , "1" )
153151 . arg ( "--config-dir" )
154152 . arg ( config_dir. as_os_str ( ) )
@@ -234,8 +232,7 @@ fn test_auth_login_existing_default() {
234232 write_first_config ( temp_dir_path) ;
235233 assert_mode ( & temp_dir_path. join ( "config.toml" ) , 0o644 ) ;
236234
237- let cmd = Command :: cargo_bin ( "oxide" )
238- . unwrap ( )
235+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
239236 . env ( "RUST_BACKTRACE" , "1" )
240237 . arg ( "--profile" )
241238 . arg ( "crystal-palace" )
@@ -281,8 +278,7 @@ fn test_auth_login_existing_no_default() {
281278 write_first_creds ( temp_dir_path) ;
282279 assert_mode ( & temp_dir_path. join ( "credentials.toml" ) , 0o600 ) ;
283280
284- let cmd = Command :: cargo_bin ( "oxide" )
285- . unwrap ( )
281+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
286282 . env ( "RUST_BACKTRACE" , "1" )
287283 . arg ( "--config-dir" )
288284 . arg ( temp_dir_path. as_os_str ( ) )
@@ -340,8 +336,7 @@ fn test_auth_credentials_permissions() {
340336 assert_mode ( & cred_path, 0o644 ) ;
341337
342338 // Validate authenticated credentials
343- let cmd = Command :: cargo_bin ( "oxide" )
344- . unwrap ( )
339+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
345340 . arg ( "--config-dir" )
346341 . arg ( temp_dir_path. as_os_str ( ) )
347342 . arg ( "auth" )
@@ -370,8 +365,7 @@ fn test_auth_login_double() {
370365 let temp_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
371366 let temp_dir_path = temp_dir. path ( ) ;
372367
373- Command :: cargo_bin ( "oxide" )
374- . unwrap ( )
368+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
375369 . env ( "RUST_BACKTRACE" , "1" )
376370 . arg ( "--config-dir" )
377371 . arg ( temp_dir_path. as_os_str ( ) )
@@ -382,8 +376,7 @@ fn test_auth_login_double() {
382376 . arg ( server. url ( "" ) )
383377 . assert ( )
384378 . success ( ) ;
385- let cmd = Command :: cargo_bin ( "oxide" )
386- . unwrap ( )
379+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
387380 . env ( "RUST_BACKTRACE" , "1" )
388381 . arg ( "--config-dir" )
389382 . arg ( temp_dir_path. as_os_str ( ) )
@@ -493,8 +486,7 @@ fn test_cmd_auth_status() {
493486 } ) ;
494487
495488 // Validate authenticated credentials
496- let cmd = Command :: cargo_bin ( "oxide" )
497- . unwrap ( )
489+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
498490 . arg ( "--config-dir" )
499491 . arg ( temp_dir. path ( ) . as_os_str ( ) )
500492 . arg ( "auth" )
@@ -515,8 +507,7 @@ fn test_cmd_auth_status() {
515507 ) ;
516508
517509 // Validate empty `credentials.toml` does not error.
518- Command :: cargo_bin ( "oxide" )
519- . unwrap ( )
510+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
520511 . arg ( "--config-dir" )
521512 . arg ( empty_creds_dir. path ( ) . as_os_str ( ) )
522513 . arg ( "auth" )
@@ -564,8 +555,7 @@ fn test_cmd_auth_status_env() {
564555 ) ;
565556
566557 // Validate authenticated credentials
567- Command :: cargo_bin ( "oxide" )
568- . unwrap ( )
558+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
569559 . arg ( "auth" )
570560 . arg ( "status" )
571561 . env ( "OXIDE_HOST" , server. url ( "" ) )
@@ -578,8 +568,7 @@ fn test_cmd_auth_status_env() {
578568 ) ) ;
579569
580570 // OXIDE_PROFILE also works, uses creds file
581- Command :: cargo_bin ( "oxide" )
582- . unwrap ( )
571+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
583572 . env ( "OXIDE_PROFILE" , "funky-town" )
584573 . arg ( "--config-dir" )
585574 . arg ( temp_dir. path ( ) . as_os_str ( ) )
@@ -593,8 +582,7 @@ fn test_cmd_auth_status_env() {
593582 ) ) ;
594583
595584 // OXIDE_HOST conflicts with OXIDE_PROFILE
596- Command :: cargo_bin ( "oxide" )
597- . unwrap ( )
585+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
598586 . env ( "OXIDE_HOST" , server. url ( "" ) )
599587 . env ( "OXIDE_TOKEN" , "oxide-token-good" )
600588 . env ( "OXIDE_PROFILE" , "ignored" )
@@ -622,8 +610,7 @@ fn test_cmd_auth_status_env() {
622610 } ) ;
623611
624612 // Try invalid credentials.
625- Command :: cargo_bin ( "oxide" )
626- . unwrap ( )
613+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
627614 . arg ( "auth" )
628615 . arg ( "status" )
629616 . env ( "OXIDE_HOST" , server. url ( "" ) )
@@ -655,8 +642,7 @@ fn test_cmd_auth_debug_logging() {
655642 } ) ;
656643 } ) ;
657644
658- let cmd = Command :: cargo_bin ( "oxide" )
659- . unwrap ( )
645+ let cmd = assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
660646 . arg ( "--debug" )
661647 . arg ( "auth" )
662648 . arg ( "status" )
@@ -696,3 +682,26 @@ fn test_cmd_auth_debug_logging() {
696682
697683 oxide_mock. assert ( ) ;
698684}
685+
686+ #[ test]
687+ fn test_cmd_auth_login ( ) {
688+ use predicates:: str;
689+
690+ let temp_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
691+
692+ let bad_url = "sys.oxide.invalid" ;
693+
694+ // Validate connection error details are printed
695+ assert_cmd:: cargo:: cargo_bin_cmd!( "oxide" )
696+ . arg ( "--config-dir" )
697+ . arg ( temp_dir. path ( ) . as_os_str ( ) )
698+ . arg ( "auth" )
699+ . arg ( "login" )
700+ . arg ( "--host" )
701+ . arg ( bad_url)
702+ . assert ( )
703+ . failure ( )
704+ . stderr ( str:: starts_with (
705+ "Request failed: client error: error sending request" ,
706+ ) ) ;
707+ }
0 commit comments