@@ -612,25 +612,46 @@ impl Handler for ClientHandler {
612
612
613
613
#[ cfg( test) ]
614
614
mod tests {
615
+ use crate :: client:: * ;
615
616
use core:: time;
616
-
617
+ use dotenv:: dotenv;
618
+ use std:: path:: Path ;
619
+ use std:: sync:: Once ;
617
620
use tokio:: io:: AsyncReadExt ;
621
+ static INIT : Once = Once :: new ( ) ;
622
+
623
+ fn initialize ( ) {
624
+ // Perform your initialization tasks here
625
+ println ! ( "Running initialization code before tests..." ) ;
626
+ // Example: load .env file if we are using non-docker environment
627
+ if is_running_in_docker ( ) {
628
+ println ! ( "Running inside Docker." ) ;
629
+ } else {
630
+ println ! ( "Not running inside Docker. Load env from file" ) ;
631
+ dotenv ( ) . ok ( ) ;
632
+ }
633
+ }
634
+ fn is_running_in_docker ( ) -> bool {
635
+ Path :: new ( "/.dockerenv" ) . exists ( ) || check_cgroup ( )
636
+ }
618
637
619
- use crate :: client:: * ;
638
+ fn check_cgroup ( ) -> bool {
639
+ match std:: fs:: read_to_string ( "/proc/1/cgroup" ) {
640
+ Ok ( contents) => contents. contains ( "docker" ) ,
641
+ Err ( _) => false ,
642
+ }
643
+ }
620
644
621
645
fn env ( name : & str ) -> String {
646
+ INIT . call_once ( || {
647
+ initialize ( ) ;
648
+ } ) ;
622
649
std:: env:: var ( name) . expect (
623
- "Failed to get env var needed for test, make sure to set the following env vars:
624
- ASYNC_SSH2_TEST_HOST_USER
625
- ASYNC_SSH2_TEST_HOST_PW
626
- ASYNC_SSH2_TEST_HOST_IP
627
- ASYNC_SSH2_TEST_HOST_PORT
628
- ASYNC_SSH2_TEST_CLIENT_PROT_PRIV
629
- ASYNC_SSH2_TEST_CLIENT_PRIV
630
- ASYNC_SSH2_TEST_CLIENT_PROT_PASS
631
- ASYNC_SSH2_TEST_SERVER_PUB
632
- ASYNC_SSH2_TEST_UPLOAD_FILE
633
- " ,
650
+ format ! (
651
+ "Failed to get env var needed for test, make sure to set the following env var: {}" ,
652
+ name
653
+ )
654
+ . as_str ( ) ,
634
655
)
635
656
}
636
657
@@ -1036,7 +1057,11 @@ ASYNC_SSH2_TEST_UPLOAD_FILE
1036
1057
ServerCheckMethod :: with_known_hosts_file ( & env ( "ASYNC_SSH2_TEST_KNOWN_HOSTS" ) ) ,
1037
1058
)
1038
1059
. await ;
1039
- assert ! ( client. is_ok( ) ) ;
1060
+ if is_running_in_docker ( ) {
1061
+ assert ! ( client. is_ok( ) ) ;
1062
+ } else {
1063
+ assert ! ( client. is_err( ) ) ; // DNS can't find the docker hostname if the rust running without docker container
1064
+ }
1040
1065
}
1041
1066
1042
1067
#[ tokio:: test]
0 commit comments