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
|
package main
|
||||||
|
|
||||||
import (
|
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
|
package iptables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
package iptables
|
package iptables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
package iptables
|
package iptables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
package iptables
|
package iptables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
package iptables
|
package iptables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
|
@ -27,6 +27,70 @@ import (
|
||||||
"github.com/vishvananda/netns"
|
"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) {
|
func TestHost(t *testing.T) {
|
||||||
sbx1, err := controller.NewSandbox("host_c1",
|
sbx1, err := controller.NewSandbox("host_c1",
|
||||||
libnetwork.OptionHostname("test1"),
|
libnetwork.OptionHostname("test1"),
|
||||||
|
|
|
@ -8,13 +8,13 @@ import (
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/docker/libnetwork"
|
"github.com/docker/docker/libnetwork"
|
||||||
"github.com/docker/docker/libnetwork/config"
|
"github.com/docker/docker/libnetwork/config"
|
||||||
"github.com/docker/docker/libnetwork/datastore"
|
"github.com/docker/docker/libnetwork/datastore"
|
||||||
"github.com/docker/docker/libnetwork/driverapi"
|
"github.com/docker/docker/libnetwork/driverapi"
|
||||||
"github.com/docker/docker/libnetwork/drivers/bridge"
|
|
||||||
"github.com/docker/docker/libnetwork/ipamapi"
|
"github.com/docker/docker/libnetwork/ipamapi"
|
||||||
"github.com/docker/docker/libnetwork/netlabel"
|
"github.com/docker/docker/libnetwork/netlabel"
|
||||||
"github.com/docker/docker/libnetwork/options"
|
"github.com/docker/docker/libnetwork/options"
|
||||||
|
@ -23,7 +23,6 @@ import (
|
||||||
"github.com/docker/docker/pkg/plugins"
|
"github.com/docker/docker/pkg/plugins"
|
||||||
"github.com/docker/docker/pkg/reexec"
|
"github.com/docker/docker/pkg/reexec"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/vishvananda/netns"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -201,7 +200,7 @@ func TestBridge(t *testing.T) {
|
||||||
t.Fatalf("Unexpected format for port mapping in endpoint operational data")
|
t.Fatalf("Unexpected format for port mapping in endpoint operational data")
|
||||||
}
|
}
|
||||||
expectedLen := 10
|
expectedLen := 10
|
||||||
if !bridge.IsV6Listenable() {
|
if !isV6Listenable() {
|
||||||
expectedLen = 5
|
expectedLen = 5
|
||||||
}
|
}
|
||||||
if len(pm) != expectedLen {
|
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) {
|
func TestUnknownDriver(t *testing.T) {
|
||||||
if !testutils.IsRunningInContainer() {
|
if !testutils.IsRunningInContainer() {
|
||||||
defer testutils.SetupTestOSContext(t)()
|
defer testutils.SetupTestOSContext(t)()
|
||||||
|
@ -1411,11 +1432,9 @@ func TestValidRemoteDriver(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
start = make(chan struct{})
|
start = make(chan struct{})
|
||||||
done = make(chan chan struct{}, numThreads-1)
|
done = make(chan chan struct{}, numThreads-1)
|
||||||
origins = netns.None()
|
sboxes = make([]libnetwork.Sandbox, numThreads)
|
||||||
testns = netns.None()
|
|
||||||
sboxes = make([]libnetwork.Sandbox, numThreads)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -1426,65 +1445,6 @@ const (
|
||||||
debug = false
|
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{}) {
|
func debugf(format string, a ...interface{}) {
|
||||||
if debug {
|
if debug {
|
||||||
fmt.Printf(format, a...)
|
fmt.Printf(format, a...)
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
package libnetwork_test
|
package libnetwork_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
var specPath = filepath.Join(os.Getenv("programdata"), "docker", "plugins")
|
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 {
|
func (sb *sandbox) updateDNS(ipv6Enabled bool) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sb *sandbox) setupDNS() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sb *sandbox) rebuildDNS() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue