Merge pull request #148 from mrjana/tcfail
Fixed test case intermittent failure problem and an ipv6 issue
This commit is contained in:
commit
03f29ff11b
|
@ -2,8 +2,9 @@
|
|||
SHELL=/bin/bash
|
||||
build_image=libnetwork-build
|
||||
dockerargs = --privileged -v $(shell pwd):/go/src/github.com/docker/libnetwork -w /go/src/github.com/docker/libnetwork
|
||||
docker = docker run --rm ${dockerargs} ${build_image}
|
||||
ciargs = -e "COVERALLS_TOKEN=$$COVERALLS_TOKEN"
|
||||
container_env = -e "INSIDECONTAINER=-incontainer=true"
|
||||
docker = docker run --rm ${dockerargs} ${container_env} ${build_image}
|
||||
ciargs = -e "COVERALLS_TOKEN=$$COVERALLS_TOKEN" -e "INSIDECONTAINER=-incontainer=true"
|
||||
cidocker = docker run ${ciargs} ${dockerargs} golang:1.4
|
||||
|
||||
all: ${build_image}.created
|
||||
|
@ -42,8 +43,11 @@ run-tests:
|
|||
@echo "mode: count" > coverage.coverprofile
|
||||
@for dir in $$(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d); do \
|
||||
if ls $$dir/*.go &> /dev/null; then \
|
||||
$(shell which godep) go test -test.parallel 3 -test.v -covermode=count -coverprofile=$$dir/profile.tmp $$dir ; \
|
||||
pushd . &> /dev/null ; \
|
||||
cd $$dir ; \
|
||||
$(shell which godep) go test ${INSIDECONTAINER} -test.parallel 3 -test.v -covermode=count -coverprofile=./profile.tmp ; \
|
||||
if [ $$? -ne 0 ]; then exit $$?; fi ;\
|
||||
popd &> /dev/null; \
|
||||
if [ -f $$dir/profile.tmp ]; then \
|
||||
cat $$dir/profile.tmp | tail -n +2 >> coverage.coverprofile ; \
|
||||
rm $$dir/profile.tmp ; \
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"bytes"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
_ "github.com/docker/libnetwork/netutils"
|
||||
)
|
||||
|
||||
// nopCloser is used to provide a dummy CallFunc for Cmd()
|
||||
|
|
|
@ -190,7 +190,7 @@ func (ipv4 *IPv4AddrNoMatchError) Error() string {
|
|||
type IPv6AddrNoMatchError net.IPNet
|
||||
|
||||
func (ipv6 *IPv6AddrNoMatchError) Error() string {
|
||||
return fmt.Sprintf("bridge IPv6 addresses do not match the expected bridge configuration %s", ipv6)
|
||||
return fmt.Sprintf("bridge IPv6 addresses do not match the expected bridge configuration %s", (*net.IPNet)(ipv6).String())
|
||||
}
|
||||
|
||||
// InvalidLinkIPAddrError is returned when a link is configured to a container with an invalid ip address
|
||||
|
|
|
@ -34,7 +34,8 @@ func setupBridgeIPv6(config *NetworkConfiguration, i *bridgeInterface) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if len(addrsv6) == 0 {
|
||||
// Add the default link local ipv6 address if it doesn't exist
|
||||
if !findIPv6Address(netlink.Addr{IPNet: bridgeIPv6}, addrsv6) {
|
||||
if err := netlink.AddrAdd(i.Link, &netlink.Addr{IPNet: bridgeIPv6}); err != nil {
|
||||
return &IPv6AddrAddError{ip: bridgeIPv6, err: err}
|
||||
}
|
||||
|
|
|
@ -138,7 +138,10 @@ func TestHost(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestBridge(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
ip, subnet, err := net.ParseCIDR("192.168.100.1/24")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -209,7 +212,9 @@ func TestBridge(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUnknownDriver(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
_, err := createTestNetwork("unknowndriver", "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err == nil {
|
||||
|
@ -256,7 +261,10 @@ func TestNoInitDriver(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDuplicateNetwork(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
controller, err := libnetwork.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -287,7 +295,9 @@ func TestDuplicateNetwork(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNetworkName(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
_, err := createTestNetwork(bridgeNetType, "", options.Generic{}, options.Generic{})
|
||||
if err == nil {
|
||||
|
@ -309,7 +319,10 @@ func TestNetworkName(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNetworkType(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -321,7 +334,9 @@ func TestNetworkType(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNetworkID(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -334,7 +349,10 @@ func TestNetworkID(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
option := options.Generic{
|
||||
"BridgeName": bridgeName,
|
||||
"AllowNonDefaultBridge": true}
|
||||
|
@ -369,7 +387,10 @@ func TestDeleteNetworkWithActiveEndpoints(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUnknownNetwork(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
option := options.Generic{
|
||||
"BridgeName": bridgeName,
|
||||
"AllowNonDefaultBridge": true}
|
||||
|
@ -395,7 +416,10 @@ func TestUnknownNetwork(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUnknownEndpoint(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
ip, subnet, err := net.ParseCIDR("192.168.100.1/24")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -446,7 +470,10 @@ func TestUnknownEndpoint(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNetworkEndpointsWalkers(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
controller, err := libnetwork.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -527,7 +554,10 @@ func TestNetworkEndpointsWalkers(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestControllerQuery(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
controller, err := libnetwork.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -590,7 +620,10 @@ func TestControllerQuery(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNetworkQuery(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
controller, err := libnetwork.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -656,7 +689,9 @@ func TestNetworkQuery(t *testing.T) {
|
|||
const containerID = "valid_container"
|
||||
|
||||
func TestEndpointJoin(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -685,7 +720,9 @@ func TestEndpointJoin(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEndpointJoinInvalidContainerId(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -708,7 +745,9 @@ func TestEndpointJoinInvalidContainerId(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEndpointDeleteWithActiveContainer(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -750,7 +789,9 @@ func TestEndpointDeleteWithActiveContainer(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEndpointMultipleJoins(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -788,7 +829,9 @@ func TestEndpointMultipleJoins(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEndpointInvalidLeave(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork(bridgeNetType, "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -847,7 +890,9 @@ func TestEndpointInvalidLeave(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEndpointUpdateParent(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
n, err := createTestNetwork("bridge", "testnetwork", options.Generic{}, options.Generic{})
|
||||
if err != nil {
|
||||
|
@ -899,7 +944,9 @@ func TestEndpointUpdateParent(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestEnableIPv6(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
tmpResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\nnameserver 2001:4860:4860::8888")
|
||||
//take a copy of resolv.conf for restoring after test completes
|
||||
|
@ -914,8 +961,17 @@ func TestEnableIPv6(t *testing.T) {
|
|||
}
|
||||
}()
|
||||
|
||||
ip, cidrv6, err := net.ParseCIDR("fe80::1/64")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cidrv6.IP = ip
|
||||
|
||||
netOption := options.Generic{
|
||||
netlabel.EnableIPv6: true,
|
||||
netlabel.GenericData: options.Generic{
|
||||
"FixedCIDRv6": cidrv6,
|
||||
},
|
||||
}
|
||||
|
||||
n, err := createTestNetwork("bridge", "testnetwork", options.Generic{}, netOption)
|
||||
|
@ -962,7 +1018,9 @@ func TestEnableIPv6(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNoEnableIPv6(t *testing.T) {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
if !netutils.IsRunningInContainer() {
|
||||
defer netutils.SetupTestNetNS(t)()
|
||||
}
|
||||
|
||||
tmpResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\nnameserver 2001:4860:4860::8888")
|
||||
expectedResolvConf := []byte("search pommesfrites.fr\nnameserver 12.34.56.78\n")
|
||||
|
@ -1046,10 +1104,13 @@ func createGlobalInstance(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
//testns = origns
|
||||
testns, err = netns.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
if netutils.IsRunningInContainer() {
|
||||
testns = origns
|
||||
} else {
|
||||
testns, err = netns.New()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
ctrlr, err = libnetwork.New()
|
||||
|
|
|
@ -1,11 +1,19 @@
|
|||
package netutils
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"runtime"
|
||||
"syscall"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var runningInContainer = flag.Bool("incontainer", false, "Indicates if the test is running in a container")
|
||||
|
||||
// IsRunningInContainer returns whether the test is running inside a container.
|
||||
func IsRunningInContainer() bool {
|
||||
return (*runningInContainer)
|
||||
}
|
||||
|
||||
// SetupTestNetNS joins a new network namespace, and returns its associated
|
||||
// teardown function.
|
||||
//
|
||||
|
|
|
@ -5,6 +5,8 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
_ "github.com/docker/libnetwork/netutils"
|
||||
)
|
||||
|
||||
func TestBuildDefault(t *testing.T) {
|
||||
|
|
|
@ -6,6 +6,8 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
_ "github.com/docker/libnetwork/netutils"
|
||||
)
|
||||
|
||||
const chainName = "DOCKERTEST"
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
_ "github.com/docker/libnetwork/netutils"
|
||||
)
|
||||
|
||||
func TestGenerate(t *testing.T) {
|
||||
|
|
|
@ -3,6 +3,8 @@ package portallocator
|
|||
import (
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
_ "github.com/docker/libnetwork/netutils"
|
||||
)
|
||||
|
||||
func resetPortAllocator() {
|
||||
|
|
|
@ -5,6 +5,8 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
_ "github.com/docker/libnetwork/netutils"
|
||||
)
|
||||
|
||||
func TestGet(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue