github.com/moby/docker@v26.1.3+incompatible/integration/network/dns_test.go (about) 1 package network // import "github.com/docker/docker/integration/network" 2 3 import ( 4 "testing" 5 "time" 6 7 containertypes "github.com/docker/docker/api/types/container" 8 "github.com/docker/docker/integration/internal/container" 9 "github.com/docker/docker/integration/internal/network" 10 "github.com/docker/docker/testutil" 11 "github.com/docker/docker/testutil/daemon" 12 "gotest.tools/v3/assert" 13 is "gotest.tools/v3/assert/cmp" 14 "gotest.tools/v3/poll" 15 "gotest.tools/v3/skip" 16 ) 17 18 func TestDaemonDNSFallback(t *testing.T) { 19 skip.If(t, testEnv.IsRemoteDaemon, "cannot start daemon on remote test run") 20 skip.If(t, testEnv.DaemonInfo.OSType != "linux") 21 skip.If(t, testEnv.IsUserNamespace) 22 ctx := testutil.StartSpan(baseContext, t) 23 24 d := daemon.New(t) 25 d.StartWithBusybox(ctx, t, "-b", "none", "--dns", "127.127.127.1", "--dns", "8.8.8.8") 26 defer d.Stop(t) 27 28 c := d.NewClientT(t) 29 30 network.CreateNoError(ctx, t, c, "test") 31 defer c.NetworkRemove(ctx, "test") 32 33 cid := container.Run(ctx, t, c, container.WithNetworkMode("test"), container.WithCmd("nslookup", "docker.com")) 34 defer c.ContainerRemove(ctx, cid, containertypes.RemoveOptions{Force: true}) 35 36 poll.WaitOn(t, container.IsSuccessful(ctx, c, cid), poll.WithDelay(100*time.Millisecond), poll.WithTimeout(10*time.Second)) 37 } 38 39 // Check that, when the internal DNS server's address is supplied as an external 40 // DNS server, the daemon doesn't start talking to itself. 41 func TestIntDNSAsExtDNS(t *testing.T) { 42 skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot start daemon on Windows test run") 43 skip.If(t, testEnv.IsRemoteDaemon, "cannot start daemon on remote test run") 44 45 ctx := setupTest(t) 46 47 d := daemon.New(t) 48 d.StartWithBusybox(ctx, t) 49 defer d.Stop(t) 50 51 c := d.NewClientT(t) 52 defer c.Close() 53 54 testcases := []struct { 55 name string 56 extServers []string 57 expExitCode int 58 expStdout string 59 }{ 60 { 61 name: "only self", 62 extServers: []string{"127.0.0.11"}, 63 expExitCode: 1, 64 expStdout: "SERVFAIL", 65 }, 66 { 67 name: "self then ext", 68 extServers: []string{"127.0.0.11", "8.8.8.8"}, 69 expExitCode: 0, 70 expStdout: "Non-authoritative answer", 71 }, 72 } 73 74 for _, tc := range testcases { 75 t.Run(tc.name, func(t *testing.T) { 76 ctx := testutil.StartSpan(ctx, t) 77 78 const netName = "testnet" 79 network.CreateNoError(ctx, t, c, netName) 80 defer network.RemoveNoError(ctx, t, c, netName) 81 82 res := container.RunAttach(ctx, t, c, 83 container.WithNetworkMode(netName), 84 container.WithDNS(tc.extServers), 85 container.WithCmd("nslookup", "docker.com"), 86 ) 87 defer c.ContainerRemove(ctx, res.ContainerID, containertypes.RemoveOptions{Force: true}) 88 89 assert.Check(t, is.Equal(res.ExitCode, tc.expExitCode)) 90 assert.Check(t, is.Contains(res.Stdout.String(), tc.expStdout)) 91 }) 92 } 93 }