@@ -24,7 +24,6 @@ import (
24
24
"os/exec"
25
25
"path/filepath"
26
26
"regexp"
27
- "runtime"
28
27
"strings"
29
28
"testing"
30
29
"time"
@@ -513,35 +512,197 @@ func TestRunNetworkHost2613(t *testing.T) {
513
512
base .Cmd ("run" , "--rm" , "--add-host" , "foo:1.2.3.4" , testutil .CommonImage , "getent" , "hosts" , "foo" ).AssertOutExactly ("1.2.3.4 foo foo\n " )
514
513
}
515
514
516
- func TestSharedNetworkStack (t * testing.T ) {
517
- if runtime .GOOS != "linux" {
518
- t .Skip ("--network=container:<container name|id> only supports linux now" )
519
- }
520
- base := testutil .NewBase (t )
515
+ func TestSharedNetworkSetup (t * testing.T ) {
516
+ nerdtest .Setup ()
517
+ testCase := & test.Case {
518
+ Require : test .Not (test .Windows ),
519
+ Setup : func (data test.Data , helpers test.Helpers ) {
520
+ data .Set ("containerName1" , data .Identifier ("-container1" ))
521
+ containerName1 := data .Get ("containerName1" )
522
+ helpers .Ensure ("run" , "-d" , "--name" , containerName1 ,
523
+ testutil .NginxAlpineImage )
524
+ },
525
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
526
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ("-container1" ))
527
+ },
528
+ SubTests : []* test.Case {
529
+ {
530
+ Description : "Test network is shared" ,
531
+ NoParallel : true , // The validation involves starting of the main container: container1
532
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
533
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
534
+ },
535
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
536
+ containerName2 := data .Identifier ()
537
+ cmd := helpers .Command ()
538
+ cmd .WithArgs ("run" , "-d" , "--name" , containerName2 ,
539
+ "--network=container:" + data .Get ("containerName1" ),
540
+ testutil .NginxAlpineImage )
541
+ return cmd
542
+ },
543
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
544
+ return & test.Expected {
545
+ Output : func (stdout string , info string , t * testing.T ) {
546
+ containerName2 := data .Identifier ()
547
+ assert .Assert (t , strings .Contains (helpers .Capture ("exec" , containerName2 , "wget" , "-qO-" , "http://127.0.0.1:80" ), testutil .NginxAlpineIndexHTMLSnippet ), info )
548
+ helpers .Ensure ("restart" , data .Get ("containerName1" ))
549
+ helpers .Ensure ("stop" , "--time=1" , containerName2 )
550
+ helpers .Ensure ("start" , containerName2 )
551
+ assert .Assert (t , strings .Contains (helpers .Capture ("exec" , containerName2 , "wget" , "-qO-" , "http://127.0.0.1:80" ), testutil .NginxAlpineIndexHTMLSnippet ), info )
552
+ },
553
+ }
554
+ },
555
+ },
556
+ {
557
+ Description : "Test uts is supported in shared network" ,
558
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
559
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
560
+ },
561
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
562
+ containerName2 := data .Identifier ()
563
+ cmd := helpers .Command ()
564
+ cmd .WithArgs ("run" , "-d" , "--name" , containerName2 , "--uts" , "host" ,
565
+ "--network=container:" + data .Get ("containerName1" ),
566
+ testutil .AlpineImage )
567
+ return cmd
568
+ },
569
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
570
+ return & test.Expected {
571
+ ExitCode : 0 ,
572
+ }
573
+ },
574
+ },
575
+ {
576
+ Description : "Test dns is not supported" ,
577
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
578
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
579
+ },
580
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
581
+ containerName2 := data .Identifier ()
582
+ cmd := helpers .Command ()
583
+ cmd .WithArgs ("run" , "-d" , "--name" , containerName2 , "--dns" , "0.1.2.3" ,
584
+ "--network=container:" + data .Get ("containerName1" ),
585
+ testutil .AlpineImage )
586
+ return cmd
587
+ },
588
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
589
+ if nerdtest .IsDocker () {
590
+ return & test.Expected {
591
+ ExitCode : 125 ,
592
+ }
521
593
522
- containerName := testutil .Identifier (t )
523
- defer base .Cmd ("rm" , "-f" , containerName ).AssertOK ()
524
- base .Cmd ("run" , "-d" , "--name" , containerName ,
525
- testutil .NginxAlpineImage ).AssertOK ()
526
- base .EnsureContainerStarted (containerName )
594
+ }
595
+ return & test.Expected {
596
+ ExitCode : 1 ,
597
+ }
598
+ },
599
+ },
600
+ {
601
+ Description : "Test dns options is not supported" ,
602
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
603
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
604
+ },
605
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
606
+ containerName2 := data .Identifier ()
607
+ cmd := helpers .Command ()
608
+ cmd .WithArgs ("run" , "--name" , containerName2 , "--dns-option" , "attempts:5" ,
609
+ "--network=container:" + data .Get ("containerName1" ),
610
+ testutil .AlpineImage , "cat" , "/etc/resolv.conf" )
611
+ return cmd
612
+ },
613
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
614
+ // The Option doesnt throw an error but is never inserted to the resolv.conf
615
+ return & test.Expected {
616
+ ExitCode : 0 ,
617
+ Output : func (stdout string , info string , t * testing.T ) {
618
+ assert .Assert (t , ! strings .Contains (stdout , "attempts:5" ), info )
619
+ },
620
+ }
621
+ },
622
+ },
623
+ {
624
+ Description : "Test publish is not supported" ,
625
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
626
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
627
+ },
628
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
629
+ containerName2 := data .Identifier ()
630
+ cmd := helpers .Command ()
631
+ cmd .WithArgs ("run" , "-d" , "--name" , containerName2 , "--publish" , "80:8080" ,
632
+ "--network=container:" + data .Get ("containerName1" ),
633
+ testutil .AlpineImage )
634
+ return cmd
635
+ },
636
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
637
+ if nerdtest .IsDocker () {
638
+ return & test.Expected {
639
+ ExitCode : 125 ,
640
+ }
641
+
642
+ }
643
+ return & test.Expected {
644
+ ExitCode : 1 ,
645
+ }
646
+ },
647
+ },
648
+ {
649
+ Description : "Test hostname is not supported" ,
650
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
651
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
652
+ },
653
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
654
+ containerName2 := data .Identifier ()
655
+ cmd := helpers .Command ()
656
+ cmd .WithArgs ("run" , "-d" , "--name" , containerName2 , "--hostname" , "test" ,
657
+ "--network=container:" + data .Get ("containerName1" ),
658
+ testutil .AlpineImage )
659
+ return cmd
660
+ },
661
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
662
+ if nerdtest .IsDocker () {
663
+ return & test.Expected {
664
+ ExitCode : 125 ,
665
+ }
666
+
667
+ }
668
+ return & test.Expected {
669
+ ExitCode : 1 ,
670
+ }
671
+ },
672
+ },
673
+ },
674
+ }
675
+ testCase .Run (t )
676
+ }
527
677
528
- containerNameJoin := testutil .Identifier (t ) + "-network"
529
- defer base .Cmd ("rm" , "-f" , containerNameJoin ).AssertOK ()
530
- base .Cmd ("run" ,
531
- "-d" ,
532
- "--name" , containerNameJoin ,
533
- "--network=container:" + containerName ,
534
- testutil .CommonImage ,
535
- "sleep" , nerdtest .Infinity ).AssertOK ()
536
-
537
- base .Cmd ("exec" , containerNameJoin , "wget" , "-qO-" , "http://127.0.0.1:80" ).
538
- AssertOutContains (testutil .NginxAlpineIndexHTMLSnippet )
539
-
540
- base .Cmd ("restart" , containerName ).AssertOK ()
541
- base .Cmd ("stop" , "--time=1" , containerNameJoin ).AssertOK ()
542
- base .Cmd ("start" , containerNameJoin ).AssertOK ()
543
- base .Cmd ("exec" , containerNameJoin , "wget" , "-qO-" , "http://127.0.0.1:80" ).
544
- AssertOutContains (testutil .NginxAlpineIndexHTMLSnippet )
678
+ func TestSharedNetworkWithNone (t * testing.T ) {
679
+ nerdtest .Setup ()
680
+ testCase := & test.Case {
681
+ Require : test .Not (test .Windows ),
682
+ Setup : func (data test.Data , helpers test.Helpers ) {
683
+ data .Set ("containerName1" , data .Identifier ("-container1" ))
684
+ containerName1 := data .Get ("containerName1" )
685
+ helpers .Ensure ("run" , "-d" , "--name" , containerName1 , "--network" , "none" ,
686
+ testutil .NginxAlpineImage )
687
+ },
688
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
689
+ helpers .Anyhow ("rm" , "-f" , data .Get ("containerName1" ))
690
+ },
691
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
692
+ containerName2 := data .Identifier ()
693
+ cmd := helpers .Command ()
694
+ cmd .WithArgs ("run" , "-d" , "--name" , containerName2 ,
695
+ "--network=container:" + data .Get ("containerName1" ),
696
+ testutil .NginxAlpineImage )
697
+ return cmd
698
+ },
699
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
700
+ return & test.Expected {
701
+ ExitCode : 0 ,
702
+ }
703
+ },
704
+ }
705
+ testCase .Run (t )
545
706
}
546
707
547
708
func TestRunContainerInExistingNetNS (t * testing.T ) {
@@ -669,6 +830,8 @@ func TestHostsFileMounts(t *testing.T) {
669
830
"sh" , "-euxc" , "echo >> /etc/hosts" ).AssertOK ()
670
831
base .Cmd ("run" , "--rm" , "-v" , "/etc/hosts:/etc/hosts" , "--network" , "host" , testutil .CommonImage ,
671
832
"sh" , "-euxc" , "head -n -1 /etc/hosts > temp && cat temp > /etc/hosts" ).AssertOK ()
833
+ base .Cmd ("run" , "--rm" , "--network" , "none" , testutil .CommonImage ,
834
+ "sh" , "-euxc" , "echo >> /etc/hosts" ).AssertOK ()
672
835
673
836
base .Cmd ("run" , "--rm" , testutil .CommonImage ,
674
837
"sh" , "-euxc" , "echo >> /etc/resolv.conf" ).AssertOK ()
@@ -681,6 +844,8 @@ func TestHostsFileMounts(t *testing.T) {
681
844
"sh" , "-euxc" , "echo >> /etc/resolv.conf" ).AssertOK ()
682
845
base .Cmd ("run" , "--rm" , "-v" , "/etc/resolv.conf:/etc/resolv.conf" , "--network" , "host" , testutil .CommonImage ,
683
846
"sh" , "-euxc" , "head -n -1 /etc/resolv.conf > temp && cat temp > /etc/resolv.conf" ).AssertOK ()
847
+ base .Cmd ("run" , "--rm" , "--network" , "host" , testutil .CommonImage ,
848
+ "sh" , "-euxc" , "echo >> /etc/resolv.conf" ).AssertOK ()
684
849
}
685
850
686
851
func TestRunContainerWithStaticIP6 (t * testing.T ) {
@@ -752,3 +917,114 @@ func TestRunContainerWithStaticIP6(t *testing.T) {
752
917
})
753
918
}
754
919
}
920
+
921
+ func TestNoneNetworkHostName (t * testing.T ) {
922
+ nerdtest .Setup ()
923
+ testCase := & test.Case {
924
+ Require : test .Not (test .Windows ),
925
+ Setup : func (data test.Data , helpers test.Helpers ) {
926
+ data .Set ("containerName1" , data .Identifier ())
927
+ },
928
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
929
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
930
+ },
931
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
932
+ return helpers .Command ("run" , "-d" , "--name" , data .Identifier (), "--network" , "none" , testutil .NginxAlpineImage )
933
+ },
934
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
935
+ return & test.Expected {
936
+ Output : func (stdout string , info string , t * testing.T ) {
937
+ hostname := stdout
938
+ if len (hostname ) > 12 {
939
+ hostname = hostname [:12 ]
940
+ }
941
+ assert .Assert (t , strings .Compare (strings .TrimSpace (helpers .Capture ("exec" , data .Identifier (), "cat" , "/etc/hostname" )), hostname ) == 0 , info )
942
+ },
943
+ }
944
+ },
945
+ }
946
+ testCase .Run (t )
947
+ }
948
+
949
+ func TestHostNetworkHostName (t * testing.T ) {
950
+ nerdtest .Setup ()
951
+ testCase := & test.Case {
952
+ Require : test .Not (test .Windows ),
953
+ Setup : func (data test.Data , helpers test.Helpers ) {
954
+ data .Set ("containerName1" , data .Identifier ())
955
+ },
956
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
957
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
958
+ },
959
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
960
+ return helpers .Custom ("cat" , "/etc/hostname" )
961
+ },
962
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
963
+ return & test.Expected {
964
+ Output : func (stdout string , info string , t * testing.T ) {
965
+ hostname := stdout
966
+ assert .Assert (t , strings .Compare (strings .TrimSpace (helpers .Capture ("run" , "--name" , data .Identifier (), "--network" , "host" , testutil .AlpineImage , "cat" , "/etc/hostname" )), strings .TrimSpace (hostname )) == 0 , info )
967
+ },
968
+ }
969
+ },
970
+ }
971
+ testCase .Run (t )
972
+ }
973
+
974
+ func TestNoneNetworkDnsConfigs (t * testing.T ) {
975
+ nerdtest .Setup ()
976
+ testCase := & test.Case {
977
+ Require : test .Not (test .Windows ),
978
+ Setup : func (data test.Data , helpers test.Helpers ) {
979
+ data .Set ("containerName1" , data .Identifier ())
980
+ },
981
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
982
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
983
+ },
984
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
985
+ return helpers .Command ("run" , "-d" , "--name" , data .Identifier (), "--network" , "none" , "--dns" , "0.1.2.3" , "--dns-search" , "example.com" , "--dns-option" , "timeout:3" , "--dns-option" , "attempts:5" , testutil .NginxAlpineImage )
986
+ },
987
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
988
+ return & test.Expected {
989
+ Output : func (stdout string , info string , t * testing.T ) {
990
+ out := helpers .Capture ("exec" , data .Identifier (), "cat" , "/etc/resolv.conf" )
991
+ assert .Assert (t , strings .Contains (out , "0.1.2.3" ), info )
992
+ assert .Assert (t , strings .Contains (out , "example.com" ), info )
993
+ assert .Assert (t , strings .Contains (out , "attempts:5" ), info )
994
+ assert .Assert (t , strings .Contains (out , "timeout:3" ), info )
995
+
996
+ },
997
+ }
998
+ },
999
+ }
1000
+ testCase .Run (t )
1001
+ }
1002
+
1003
+ func TestHostNetworkDnsConfigs (t * testing.T ) {
1004
+ nerdtest .Setup ()
1005
+ testCase := & test.Case {
1006
+ Require : test .Not (test .Windows ),
1007
+ Setup : func (data test.Data , helpers test.Helpers ) {
1008
+ data .Set ("containerName1" , data .Identifier ())
1009
+ },
1010
+ Cleanup : func (data test.Data , helpers test.Helpers ) {
1011
+ helpers .Anyhow ("rm" , "-f" , data .Identifier ())
1012
+ },
1013
+ Command : func (data test.Data , helpers test.Helpers ) test.TestableCommand {
1014
+ return helpers .Command ("run" , "-d" , "--name" , data .Identifier (), "--network" , "host" , "--dns" , "0.1.2.3" , "--dns-search" , "example.com" , "--dns-option" , "timeout:3" , "--dns-option" , "attempts:5" , testutil .NginxAlpineImage )
1015
+ },
1016
+ Expected : func (data test.Data , helpers test.Helpers ) * test.Expected {
1017
+ return & test.Expected {
1018
+ Output : func (stdout string , info string , t * testing.T ) {
1019
+ out := helpers .Capture ("exec" , data .Identifier (), "cat" , "/etc/resolv.conf" )
1020
+ assert .Assert (t , strings .Contains (out , "0.1.2.3" ), info )
1021
+ assert .Assert (t , strings .Contains (out , "example.com" ), info )
1022
+ assert .Assert (t , strings .Contains (out , "attempts:5" ), info )
1023
+ assert .Assert (t , strings .Contains (out , "timeout:3" ), info )
1024
+
1025
+ },
1026
+ }
1027
+ },
1028
+ }
1029
+ testCase .Run (t )
1030
+ }
0 commit comments