mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
More libnetwork windows test fixes
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
This commit is contained in:
parent
4b981436fe
commit
7186fd8a95
13 changed files with 116 additions and 170 deletions
|
@ -1,3 +1,5 @@
|
|||
// +build linux
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
package libnetwork
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/libnetwork/iptables"
|
||||
"github.com/docker/docker/libnetwork/netlabel"
|
||||
"github.com/docker/docker/libnetwork/options"
|
||||
"gotest.tools/v3/assert"
|
||||
)
|
||||
|
||||
const (
|
||||
fwdChainName = "FORWARD"
|
||||
usrChainName = userChain
|
||||
)
|
||||
|
||||
func TestUserChain(t *testing.T) {
|
||||
iptable := iptables.GetIptable(iptables.IPv4)
|
||||
|
||||
nc, err := New()
|
||||
assert.NilError(t, err)
|
||||
|
||||
tests := []struct {
|
||||
iptables bool
|
||||
insert bool // insert other rules to FORWARD
|
||||
fwdChain []string
|
||||
userChain []string
|
||||
}{
|
||||
{
|
||||
iptables: false,
|
||||
insert: false,
|
||||
fwdChain: []string{"-P FORWARD ACCEPT"},
|
||||
},
|
||||
{
|
||||
iptables: true,
|
||||
insert: false,
|
||||
fwdChain: []string{"-P FORWARD ACCEPT", "-A FORWARD -j DOCKER-USER"},
|
||||
userChain: []string{"-N DOCKER-USER", "-A DOCKER-USER -j RETURN"},
|
||||
},
|
||||
{
|
||||
iptables: true,
|
||||
insert: true,
|
||||
fwdChain: []string{"-P FORWARD ACCEPT", "-A FORWARD -j DOCKER-USER", "-A FORWARD -j DROP"},
|
||||
userChain: []string{"-N DOCKER-USER", "-A DOCKER-USER -j RETURN"},
|
||||
},
|
||||
}
|
||||
|
||||
resetIptables(t)
|
||||
for _, tc := range tests {
|
||||
tc := tc
|
||||
t.Run(fmt.Sprintf("iptables=%v,insert=%v", tc.iptables, tc.insert), func(t *testing.T) {
|
||||
c := nc.(*controller)
|
||||
c.cfg.Daemon.DriverCfg["bridge"] = map[string]interface{}{
|
||||
netlabel.GenericData: options.Generic{
|
||||
"EnableIPTables": tc.iptables,
|
||||
},
|
||||
}
|
||||
|
||||
// init. condition, FORWARD chain empty DOCKER-USER not exist
|
||||
assert.DeepEqual(t, getRules(t, fwdChainName), []string{"-P FORWARD ACCEPT"})
|
||||
|
||||
if tc.insert {
|
||||
_, err = iptable.Raw("-A", fwdChainName, "-j", "DROP")
|
||||
assert.NilError(t, err)
|
||||
}
|
||||
arrangeUserFilterRule()
|
||||
|
||||
assert.DeepEqual(t, getRules(t, fwdChainName), tc.fwdChain)
|
||||
if tc.userChain != nil {
|
||||
assert.DeepEqual(t, getRules(t, usrChainName), tc.userChain)
|
||||
} else {
|
||||
_, err := iptable.Raw("-S", usrChainName)
|
||||
assert.Assert(t, err != nil, "chain %v: created unexpectedly", usrChainName)
|
||||
}
|
||||
})
|
||||
resetIptables(t)
|
||||
}
|
||||
}
|
||||
|
||||
func getRules(t *testing.T, chain string) []string {
|
||||
iptable := iptables.GetIptable(iptables.IPv4)
|
||||
|
||||
t.Helper()
|
||||
output, err := iptable.Raw("-S", chain)
|
||||
assert.NilError(t, err, "chain %s: failed to get rules", chain)
|
||||
|
||||
rules := strings.Split(string(output), "\n")
|
||||
if len(rules) > 0 {
|
||||
rules = rules[:len(rules)-1]
|
||||
}
|
||||
return rules
|
||||
}
|
||||
|
||||
func resetIptables(t *testing.T) {
|
||||
iptable := iptables.GetIptable(iptables.IPv4)
|
||||
|
||||
t.Helper()
|
||||
_, err := iptable.Raw("-F", fwdChainName)
|
||||
assert.NilError(t, err)
|
||||
_ = iptable.RemoveExistingChain(usrChainName, "")
|
||||
}
|
|
@ -1,3 +1,5 @@
|
|||
// +build linux
|
||||
|
||||
package iptables
|
||||
|
||||
import (
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// +build linux
|
||||
|
||||
package iptables
|
||||
|
||||
import (
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// +build linux
|
||||
|
||||
package iptables
|
||||
|
||||
import (
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// +build linux
|
||||
|
||||
package iptables
|
||||
|
||||
import (
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// +build linux
|
||||
|
||||
package iptables
|
||||
|
||||
import (
|
||||
|
|
|
@ -27,6 +27,70 @@ import (
|
|||
"github.com/vishvananda/netns"
|
||||
)
|
||||
|
||||
var (
|
||||
origins = netns.None()
|
||||
testns = netns.None()
|
||||
)
|
||||
|
||||
func createGlobalInstance(t *testing.T) {
|
||||
var err error
|
||||
defer close(start)
|
||||
|
||||
origins, err = netns.Get()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if testutils.IsRunningInContainer() {
|
||||
testns = origins
|
||||
} else {
|
||||
testns, err = netns.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
netOption := options.Generic{
|
||||
netlabel.GenericData: options.Generic{
|
||||
"BridgeName": "network",
|
||||
},
|
||||
}
|
||||
|
||||
net1, err := controller.NetworkByName("testhost")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
net2, err := createTestNetwork("bridge", "network2", netOption, nil, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = net1.CreateEndpoint("pep1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = net2.CreateEndpoint("pep2")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = net2.CreateEndpoint("pep3")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if sboxes[first-1], err = controller.NewSandbox(fmt.Sprintf("%drace", first), libnetwork.OptionUseDefaultSandbox()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for thd := first + 1; thd <= last; thd++ {
|
||||
if sboxes[thd-1], err = controller.NewSandbox(fmt.Sprintf("%drace", thd)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestHost(t *testing.T) {
|
||||
sbx1, err := controller.NewSandbox("host_c1",
|
||||
libnetwork.OptionHostname("test1"),
|
||||
|
|
|
@ -8,13 +8,13 @@ import (
|
|||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/libnetwork"
|
||||
"github.com/docker/docker/libnetwork/config"
|
||||
"github.com/docker/docker/libnetwork/datastore"
|
||||
"github.com/docker/docker/libnetwork/driverapi"
|
||||
"github.com/docker/docker/libnetwork/drivers/bridge"
|
||||
"github.com/docker/docker/libnetwork/ipamapi"
|
||||
"github.com/docker/docker/libnetwork/netlabel"
|
||||
"github.com/docker/docker/libnetwork/options"
|
||||
|
@ -23,7 +23,6 @@ import (
|
|||
"github.com/docker/docker/pkg/plugins"
|
||||
"github.com/docker/docker/pkg/reexec"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/vishvananda/netns"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -201,7 +200,7 @@ func TestBridge(t *testing.T) {
|
|||
t.Fatalf("Unexpected format for port mapping in endpoint operational data")
|
||||
}
|
||||
expectedLen := 10
|
||||
if !bridge.IsV6Listenable() {
|
||||
if !isV6Listenable() {
|
||||
expectedLen = 5
|
||||
}
|
||||
if len(pm) != expectedLen {
|
||||
|
@ -209,6 +208,28 @@ func TestBridge(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
var (
|
||||
v6ListenableCached bool
|
||||
v6ListenableOnce sync.Once
|
||||
)
|
||||
|
||||
// This is copied from the bridge driver package b/c the bridge driver is not platform agnostic.
|
||||
func isV6Listenable() bool {
|
||||
v6ListenableOnce.Do(func() {
|
||||
ln, err := net.Listen("tcp6", "[::1]:0")
|
||||
if err != nil {
|
||||
// When the kernel was booted with `ipv6.disable=1`,
|
||||
// we get err "listen tcp6 [::1]:0: socket: address family not supported by protocol"
|
||||
// https://github.com/moby/moby/issues/42288
|
||||
logrus.Debugf("port_mapping: v6Listenable=false (%v)", err)
|
||||
} else {
|
||||
v6ListenableCached = true
|
||||
ln.Close()
|
||||
}
|
||||
})
|
||||
return v6ListenableCached
|
||||
}
|
||||
|
||||
func TestUnknownDriver(t *testing.T) {
|
||||
if !testutils.IsRunningInContainer() {
|
||||
defer testutils.SetupTestOSContext(t)()
|
||||
|
@ -1411,11 +1432,9 @@ func TestValidRemoteDriver(t *testing.T) {
|
|||
}
|
||||
|
||||
var (
|
||||
start = make(chan struct{})
|
||||
done = make(chan chan struct{}, numThreads-1)
|
||||
origins = netns.None()
|
||||
testns = netns.None()
|
||||
sboxes = make([]libnetwork.Sandbox, numThreads)
|
||||
start = make(chan struct{})
|
||||
done = make(chan chan struct{}, numThreads-1)
|
||||
sboxes = make([]libnetwork.Sandbox, numThreads)
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -1426,65 +1445,6 @@ const (
|
|||
debug = false
|
||||
)
|
||||
|
||||
func createGlobalInstance(t *testing.T) {
|
||||
var err error
|
||||
defer close(start)
|
||||
|
||||
origins, err = netns.Get()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if testutils.IsRunningInContainer() {
|
||||
testns = origins
|
||||
} else {
|
||||
testns, err = netns.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
netOption := options.Generic{
|
||||
netlabel.GenericData: options.Generic{
|
||||
"BridgeName": "network",
|
||||
},
|
||||
}
|
||||
|
||||
net1, err := controller.NetworkByName("testhost")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
net2, err := createTestNetwork("bridge", "network2", netOption, nil, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = net1.CreateEndpoint("pep1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = net2.CreateEndpoint("pep2")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
_, err = net2.CreateEndpoint("pep3")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if sboxes[first-1], err = controller.NewSandbox(fmt.Sprintf("%drace", first), libnetwork.OptionUseDefaultSandbox()); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for thd := first + 1; thd <= last; thd++ {
|
||||
if sboxes[thd-1], err = controller.NewSandbox(fmt.Sprintf("%drace", thd)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func debugf(format string, a ...interface{}) {
|
||||
if debug {
|
||||
fmt.Printf(format, a...)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
package libnetwork_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
var specPath = filepath.Join(os.Getenv("programdata"), "docker", "plugins")
|
||||
|
|
|
@ -33,3 +33,11 @@ func (sb *sandbox) deleteHostsEntries(recs []etchosts.Record) {
|
|||
func (sb *sandbox) updateDNS(ipv6Enabled bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sb *sandbox) setupDNS() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sb *sandbox) rebuildDNS() error {
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue