|
@@ -5,11 +5,13 @@ import (
|
|
|
"strings"
|
|
|
"testing"
|
|
|
|
|
|
+ "github.com/docker/docker/libnetwork/config"
|
|
|
"github.com/docker/docker/libnetwork/iptables"
|
|
|
"github.com/docker/docker/libnetwork/netlabel"
|
|
|
"github.com/docker/docker/libnetwork/options"
|
|
|
"github.com/docker/docker/libnetwork/testutils"
|
|
|
"gotest.tools/v3/assert"
|
|
|
+ is "gotest.tools/v3/assert/cmp"
|
|
|
)
|
|
|
|
|
|
const (
|
|
@@ -52,46 +54,43 @@ func TestUserChain(t *testing.T) {
|
|
|
defer testutils.SetupTestOSContext(t)()
|
|
|
defer resetIptables(t)
|
|
|
|
|
|
- c, err := New()
|
|
|
- assert.NilError(t, err)
|
|
|
- defer c.Stop()
|
|
|
- c.cfg.DriverCfg["bridge"] = map[string]interface{}{
|
|
|
+ c, err := New(config.OptionDriverConfig("bridge", map[string]any{
|
|
|
netlabel.GenericData: options.Generic{
|
|
|
"EnableIPTables": tc.iptables,
|
|
|
"EnableIP6Tables": tc.iptables,
|
|
|
},
|
|
|
- }
|
|
|
+ }))
|
|
|
+ assert.NilError(t, err)
|
|
|
+ defer c.Stop()
|
|
|
|
|
|
// init. condition, FORWARD chain empty DOCKER-USER not exist
|
|
|
- assert.DeepEqual(t, getRules(t, iptables.IPv4, fwdChainName), []string{"-P FORWARD ACCEPT"})
|
|
|
- assert.DeepEqual(t, getRules(t, iptables.IPv6, fwdChainName), []string{"-P FORWARD ACCEPT"})
|
|
|
+ assert.Check(t, is.DeepEqual(getRules(t, iptable4, fwdChainName), []string{"-P FORWARD ACCEPT"}))
|
|
|
+ assert.Check(t, is.DeepEqual(getRules(t, iptable6, fwdChainName), []string{"-P FORWARD ACCEPT"}))
|
|
|
|
|
|
if tc.insert {
|
|
|
_, err = iptable4.Raw("-A", fwdChainName, "-j", "DROP")
|
|
|
- assert.NilError(t, err)
|
|
|
+ assert.Check(t, err)
|
|
|
_, err = iptable6.Raw("-A", fwdChainName, "-j", "DROP")
|
|
|
- assert.NilError(t, err)
|
|
|
+ assert.Check(t, err)
|
|
|
}
|
|
|
arrangeUserFilterRule()
|
|
|
|
|
|
- assert.DeepEqual(t, getRules(t, iptables.IPv4, fwdChainName), tc.fwdChain)
|
|
|
- assert.DeepEqual(t, getRules(t, iptables.IPv6, fwdChainName), tc.fwdChain)
|
|
|
+ assert.Check(t, is.DeepEqual(getRules(t, iptable4, fwdChainName), tc.fwdChain))
|
|
|
+ assert.Check(t, is.DeepEqual(getRules(t, iptable6, fwdChainName), tc.fwdChain))
|
|
|
if tc.userChain != nil {
|
|
|
- assert.DeepEqual(t, getRules(t, iptables.IPv4, usrChainName), tc.userChain)
|
|
|
- assert.DeepEqual(t, getRules(t, iptables.IPv6, usrChainName), tc.userChain)
|
|
|
+ assert.Check(t, is.DeepEqual(getRules(t, iptable4, usrChainName), tc.userChain))
|
|
|
+ assert.Check(t, is.DeepEqual(getRules(t, iptable6, usrChainName), tc.userChain))
|
|
|
} else {
|
|
|
- _, err := iptable4.Raw("-S", usrChainName)
|
|
|
- assert.Assert(t, err != nil, "ipv4 chain %v: created unexpectedly", usrChainName)
|
|
|
+ _, err = iptable4.Raw("-S", usrChainName)
|
|
|
+ assert.Check(t, is.ErrorContains(err, "No chain/target/match by that name"), "ipv4 chain %v: created unexpectedly", usrChainName)
|
|
|
_, err = iptable6.Raw("-S", usrChainName)
|
|
|
- assert.Assert(t, err != nil, "ipv6 chain %v: created unexpectedly", usrChainName)
|
|
|
+ assert.Check(t, is.ErrorContains(err, "No chain/target/match by that name"), "ipv6 chain %v: created unexpectedly", usrChainName)
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func getRules(t *testing.T, ipVer iptables.IPVersion, chain string) []string {
|
|
|
- iptable := iptables.GetIptable(ipVer)
|
|
|
-
|
|
|
+func getRules(t *testing.T, iptable *iptables.IPTable, chain string) []string {
|
|
|
t.Helper()
|
|
|
output, err := iptable.Raw("-S", chain)
|
|
|
assert.NilError(t, err, "chain %s: failed to get rules", chain)
|