Skip to content
This repository has been archived by the owner on Oct 13, 2023. It is now read-only.

[18.09 backport] For ipvlan tests check that the ipvlan module is enabled #288

Merged
merged 1 commit into from Sep 23, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 24 additions & 5 deletions integration/network/ipvlan/ipvlan_test.go
Expand Up @@ -4,7 +4,10 @@ package ipvlan

import (
"context"
"os"
"os/exec"
"strings"
"sync"
"testing"
"time"

Expand All @@ -21,7 +24,7 @@ func TestDockerNetworkIpvlanPersistance(t *testing.T) {
// verify the driver automatically provisions the 802.1q link (di-dummy0.70)
skip.If(t, testEnv.DaemonInfo.OSType == "windows")
skip.If(t, testEnv.IsRemoteDaemon)
skip.If(t, !ipvlanKernelSupport(), "Kernel doesn't support ipvlan")
skip.If(t, !ipvlanKernelSupport(t), "Kernel doesn't support ipvlan")

d := daemon.New(t, daemon.WithExperimental)
d.StartWithBusybox(t)
Expand Down Expand Up @@ -49,7 +52,7 @@ func TestDockerNetworkIpvlanPersistance(t *testing.T) {
func TestDockerNetworkIpvlan(t *testing.T) {
skip.If(t, testEnv.DaemonInfo.OSType == "windows")
skip.If(t, testEnv.IsRemoteDaemon)
skip.If(t, !ipvlanKernelSupport(), "Kernel doesn't support ipvlan")
skip.If(t, !ipvlanKernelSupport(t), "Kernel doesn't support ipvlan")

for _, tc := range []struct {
name string
Expand Down Expand Up @@ -425,7 +428,23 @@ func testIpvlanAddressing(client dclient.APIClient) func(*testing.T) {
}
}

// ensure Kernel version is >= v4.2 for ipvlan support
func ipvlanKernelSupport() bool {
return n.CheckKernelMajorVersionGreaterOrEqualThen(4, 2)
var (
once sync.Once
ipvlanSupported bool
)

// figure out if ipvlan is supported by the kernel
func ipvlanKernelSupport(t *testing.T) bool {
once.Do(func() {
// this may have the side effect of enabling the ipvlan module
exec.Command("modprobe", "ipvlan").Run()
_, err := os.Stat("/sys/module/ipvlan")
if err == nil {
ipvlanSupported = true
} else if !os.IsNotExist(err) {
t.Logf("WARNING: ipvlanKernelSupport: stat failed: %v\n", err)
}
})

return ipvlanSupported
}