libnetwork_test: remove in-container special case

The SetupTestOSContext calls were made conditional in
https://github.com/moby/libnetwork/pull/148 to work around limitations
in runtime.LockOSThread() which existed before Go 1.10. This workaround
is no longer necessary now that runtime.UnlockOSThread() needs to be
called an equal number of times before the goroutine is unlocked from
the OS thread.

Unfortunately some tests break when SetupTestOSContext is not skipped.
(Evidently this code path has not been exercised in a long time.) A
newly-created network namespace is very barebones: it contains a
loopback interface in the down state and little else. Even pinging
localhost does not work inside of a brand new namespace. Set the
loopback interface to up during namespace setup so that tests which
need to use the loopback interface can do so.

Signed-off-by: Cory Snider <csnider@mirantis.com>
This commit is contained in:
Cory Snider 2022-11-04 21:27:38 -04:00
parent e2a89b7ad1
commit 07be7b087d
8 changed files with 53 additions and 135 deletions

View file

@ -180,9 +180,7 @@ func getIPv4Data(t *testing.T, iface string) []driverapi.IPAMData {
}
func TestCreateFullOptions(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
config := &configuration{
@ -236,9 +234,7 @@ func TestCreateFullOptions(t *testing.T) {
}
func TestCreateNoConfig(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
netconfig := &networkConfiguration{BridgeName: DefaultBridgeName}
@ -251,9 +247,7 @@ func TestCreateNoConfig(t *testing.T) {
}
func TestCreateFullOptionsLabels(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
config := &configuration{
@ -359,9 +353,7 @@ func TestCreateFullOptionsLabels(t *testing.T) {
}
func TestCreate(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
@ -387,9 +379,7 @@ func TestCreate(t *testing.T) {
}
func TestCreateFail(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
@ -407,9 +397,7 @@ func TestCreateFail(t *testing.T) {
}
func TestCreateMultipleNetworks(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
@ -617,9 +605,7 @@ func TestQueryEndpointInfoHairpin(t *testing.T) {
}
func testQueryEndpointInfo(t *testing.T, ulPxyEnabled bool) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
config := &configuration{
@ -720,9 +706,7 @@ func getPortMapping() []types.PortBinding {
}
func TestLinkContainers(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
iptable := iptables.GetIptable(iptables.IPv4)
@ -876,9 +860,7 @@ func TestLinkContainers(t *testing.T) {
}
func TestValidateConfig(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
// Test mtu
c := networkConfiguration{Mtu: -2}
@ -949,9 +931,7 @@ func TestValidateConfig(t *testing.T) {
}
func TestSetDefaultGw(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()
@ -1095,9 +1075,7 @@ func TestCreateWithExistingBridge(t *testing.T) {
}
func TestCreateParallel(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
d := newDriver()

View file

@ -13,9 +13,7 @@ import (
)
func TestHostsEntries(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
expectedHostsFile := `127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback

View file

@ -562,9 +562,7 @@ func TestServiceVIPReuse(t *testing.T) {
func TestIpamReleaseOnNetDriverFailures(t *testing.T) {
skip.If(t, runtime.GOOS == "windows", "test only works on linux")
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
cfgOptions, err := OptionBoltdbWithRandomDBFile()
if err != nil {

View file

@ -62,13 +62,9 @@ func createGlobalInstance(t *testing.T) {
t.Fatal(err)
}
if testutils.IsRunningInContainer() {
testns = origins
} else {
testns, err = netns.New()
if err != nil {
t.Fatal(err)
}
testns, err = netns.New()
if err != nil {
t.Fatal(err)
}
netOption := options.Generic{
@ -207,9 +203,7 @@ func TestHost(t *testing.T) {
// Testing IPV6 from MAC address
func TestBridgeIpv6FromMac(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
netlabel.GenericData: options.Generic{
@ -283,9 +277,7 @@ func checkSandbox(t *testing.T, info libnetwork.EndpointInfo) {
}
func TestEndpointJoin(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
// Create network 1 and add 2 endpoint: ep11, ep12
netOption := options.Generic{
@ -459,9 +451,7 @@ func TestExternalKey(t *testing.T) {
}
func externalKeyTest(t *testing.T, reexec bool) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
netlabel.GenericData: options.Generic{
@ -621,9 +611,7 @@ func reexecSetKey(key string, containerID string, controllerID string) error {
}
func TestEnableIPv6(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
tmpResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\nnameserver 2001:4860:4860::8888\n")
expectedResolvConf := []byte("search pommesfrites.fr\nnameserver 127.0.0.11\nnameserver 2001:4860:4860::8888\noptions ndots:0\n")
@ -699,9 +687,7 @@ func TestEnableIPv6(t *testing.T) {
}
func TestResolvConfHost(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
tmpResolvConf := []byte("search localhost.net\nnameserver 127.0.0.1\nnameserver 2001:4860:4860::8888\n")
@ -775,9 +761,7 @@ func TestResolvConfHost(t *testing.T) {
}
func TestResolvConf(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
tmpResolvConf1 := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\nnameserver 2001:4860:4860::8888\n")
tmpResolvConf2 := []byte("search pommesfrites.fr\nnameserver 112.34.56.78\nnameserver 2001:4860:4860::8888\n")
@ -1069,9 +1053,7 @@ func TestParallel2(t *testing.T) {
}
func TestBridge(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
netlabel.EnableIPv6: true,

View file

@ -145,9 +145,7 @@ func TestNull(t *testing.T) {
}
func TestUnknownDriver(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
_, err := createTestNetwork("unknowndriver", "testnetwork", options.Generic{}, nil, nil)
if err == nil {
@ -172,9 +170,7 @@ func TestNilRemoteDriver(t *testing.T) {
}
func TestNetworkName(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
netlabel.GenericData: options.Generic{
@ -208,9 +204,7 @@ func TestNetworkName(t *testing.T) {
}
func TestNetworkType(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
netlabel.GenericData: options.Generic{
@ -234,9 +228,7 @@ func TestNetworkType(t *testing.T) {
}
func TestNetworkID(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
netlabel.GenericData: options.Generic{
@ -260,9 +252,7 @@ func TestNetworkID(t *testing.T) {
}
func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
"BridgeName": "testnetwork",
@ -301,9 +291,7 @@ func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
}
func TestNetworkConfig(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
// Verify config network cannot inherit another config network
_, err := controller.NewNetwork("bridge", "config_network0", "",
@ -403,9 +391,7 @@ func TestNetworkConfig(t *testing.T) {
}
func TestUnknownNetwork(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
"BridgeName": "testnetwork",
@ -435,9 +421,7 @@ func TestUnknownNetwork(t *testing.T) {
}
func TestUnknownEndpoint(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
"BridgeName": "testnetwork",
@ -477,9 +461,7 @@ func TestUnknownEndpoint(t *testing.T) {
}
func TestNetworkEndpointsWalkers(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
// Create network 1 and add 2 endpoint: ep11, ep12
netOption := options.Generic{
@ -607,9 +589,7 @@ func TestNetworkEndpointsWalkers(t *testing.T) {
}
func TestDuplicateEndpoint(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
netOption := options.Generic{
netlabel.GenericData: options.Generic{
@ -656,9 +636,7 @@ func TestDuplicateEndpoint(t *testing.T) {
}
func TestControllerQuery(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
// Create network 1
netOption := options.Generic{
@ -758,9 +736,7 @@ func TestControllerQuery(t *testing.T) {
}
func TestNetworkQuery(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
// Create network 1 and add 2 endpoint: ep11, ep12
netOption := options.Generic{
@ -907,9 +883,7 @@ func (f *fakeSandbox) DisableService() error {
}
func TestEndpointDeleteWithActiveContainer(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
netlabel.GenericData: options.Generic{
@ -982,9 +956,7 @@ func TestEndpointDeleteWithActiveContainer(t *testing.T) {
}
func TestEndpointMultipleJoins(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
n, err := createTestNetwork(bridgeNetType, "testmultiple", options.Generic{
netlabel.GenericData: options.Generic{
@ -1056,9 +1028,7 @@ func TestEndpointMultipleJoins(t *testing.T) {
}
func TestLeaveAll(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
netlabel.GenericData: options.Generic{
@ -1121,9 +1091,7 @@ func TestLeaveAll(t *testing.T) {
}
func TestContainerInvalidLeave(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
netlabel.GenericData: options.Generic{
@ -1187,9 +1155,7 @@ func TestContainerInvalidLeave(t *testing.T) {
}
func TestEndpointUpdateParent(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{
netlabel.GenericData: options.Generic{

View file

@ -82,9 +82,7 @@ func TestSandboxAddEmpty(t *testing.T) {
// // If different priorities are specified, internal option and ipv6 addresses mustn't influence endpoint order
func TestSandboxAddMultiPrio(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
opts := [][]NetworkOption{
{NetworkOptionEnableIPv6(true), NetworkOptionIpam(ipamapi.DefaultIPAM, "", nil, []*IpamConf{{PreferredPool: "fe90::/64"}}, nil)},
@ -169,9 +167,7 @@ func TestSandboxAddMultiPrio(t *testing.T) {
}
func TestSandboxAddSamePrio(t *testing.T) {
if !testutils.IsRunningInContainer() {
defer testutils.SetupTestOSContext(t)()
}
defer testutils.SetupTestOSContext(t)()
opts := [][]NetworkOption{
{},

View file

@ -47,6 +47,17 @@ func SetupTestOSContext(t *testing.T) func() {
// sure to re-initialize initNs context
ns.Init()
nl := ns.NlHandle()
lo, err := nl.LinkByName("lo")
if err != nil {
restore()
t.Fatalf("Failed to get handle to loopback interface 'lo' in new netns: %v", err)
}
if err := nl.LinkSetUp(lo); err != nil {
restore()
t.Fatalf("Failed to enable loopback interface in new netns: %v", err)
}
return func() {
if err := newNS.Close(); err != nil {
t.Logf("Warning: netns closing failed (%v)", err)

View file

@ -1,11 +0,0 @@
package testutils
import (
"os"
)
// IsRunningInContainer returns whether the test is running inside a container.
func IsRunningInContainer() bool {
_, err := os.Stat("/.dockerenv")
return err == nil
}