@@ -24,7 +24,6 @@ import (
2424 "os/exec"
2525 "path/filepath"
2626 "regexp"
27- "runtime"
2827 "strings"
2928 "testing"
3029 "time"
@@ -513,35 +512,197 @@ func TestRunNetworkHost2613(t *testing.T) {
513512 base .Cmd ("run" , "--rm" , "--add-host" , "foo:1.2.3.4" , testutil .CommonImage , "getent" , "hosts" , "foo" ).AssertOutExactly ("1.2.3.4 foo foo\n " )
514513}
515514
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+ }
521593
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+ }
527677
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 )
545706}
546707
547708func TestRunContainerInExistingNetNS (t * testing.T ) {
@@ -669,6 +830,8 @@ func TestHostsFileMounts(t *testing.T) {
669830 "sh" , "-euxc" , "echo >> /etc/hosts" ).AssertOK ()
670831 base .Cmd ("run" , "--rm" , "-v" , "/etc/hosts:/etc/hosts" , "--network" , "host" , testutil .CommonImage ,
671832 "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 ()
672835
673836 base .Cmd ("run" , "--rm" , testutil .CommonImage ,
674837 "sh" , "-euxc" , "echo >> /etc/resolv.conf" ).AssertOK ()
@@ -681,6 +844,8 @@ func TestHostsFileMounts(t *testing.T) {
681844 "sh" , "-euxc" , "echo >> /etc/resolv.conf" ).AssertOK ()
682845 base .Cmd ("run" , "--rm" , "-v" , "/etc/resolv.conf:/etc/resolv.conf" , "--network" , "host" , testutil .CommonImage ,
683846 "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 ()
684849}
685850
686851func TestRunContainerWithStaticIP6 (t * testing.T ) {
@@ -752,3 +917,114 @@ func TestRunContainerWithStaticIP6(t *testing.T) {
752917 })
753918 }
754919}
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