Skip to content

Commit e8c8a87

Browse files
andrewd-zededauncleDecart
authored andcommitted
Initial HV=kubevirt eve test for node ready.
Simply check that the local node is ready after boot. Signed-off-by: Andrew Durbin <andrewd@zededa.com>
1 parent 2cb1ccc commit e8c8a87

File tree

4 files changed

+172
-0
lines changed

4 files changed

+172
-0
lines changed

tests/kubevirt/Makefile

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
DEBUG ?= "debug"
2+
3+
# HOSTARCH is the host architecture
4+
# ARCH is the target architecture
5+
# we need to keep track of them separately
6+
HOSTARCH ?= $(shell uname -m)
7+
HOSTOS ?= $(shell uname -s | tr A-Z a-z)
8+
9+
# canonicalized names for host architecture
10+
override HOSTARCH := $(subst aarch64,arm64,$(subst x86_64,amd64,$(HOSTARCH)))
11+
12+
# unless otherwise set, I am building for my own architecture, i.e. not cross-compiling
13+
# and for my OS
14+
ARCH ?= $(HOSTARCH)
15+
OS ?= $(HOSTOS)
16+
17+
# canonicalized names for target architecture
18+
override ARCH := $(subst aarch64,arm64,$(subst x86_64,amd64,$(ARCH)))
19+
20+
WORKDIR ?= $(CURDIR)/../../dist
21+
TESTDIR := tests/$(shell basename $(CURDIR))
22+
BINDIR := $(WORKDIR)/bin
23+
DATADIR := $(WORKDIR)/$(TESTDIR)/
24+
BIN := eden
25+
LOCALBIN := $(BINDIR)/$(BIN)-$(OS)-$(ARCH)
26+
TESTNAME := eden.kubevirt
27+
TESTBIN := $(TESTNAME).test
28+
TESTSCN := $(TESTNAME).tests.txt
29+
LOCALTESTBIN := $(TESTBIN)-$(OS)-$(ARCH)
30+
LINKDIR := ../../tests/kubevirt
31+
32+
.DEFAULT_GOAL := help
33+
34+
clean:
35+
rm -rf $(LOCALTESTBIN) $(BINDIR)/$(TESTBIN) $(WORKDIR)/$(TESTSCN) $(CURDIR)/$(TESTBIN) $(BINDIR)/$(TESTBIN)
36+
37+
$(BINDIR):
38+
mkdir -p $@
39+
$(DATADIR):
40+
mkdir -p $@
41+
42+
test_kubevirt:
43+
go test kubevirt_test.go common.go -v -count=1 -timeout 3000s
44+
45+
test:
46+
$(LOCALBIN) test $(CURDIR) -v $(DEBUG) -s eden.kubevirt.tests.txt
47+
48+
build: setup
49+
50+
testbin: $(TESTBIN)
51+
$(LOCALTESTBIN): $(BINDIR) *.go
52+
CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go test -c -ldflags "-s -w" -o $@ *.go
53+
54+
$(TESTBIN): $(LOCALTESTBIN)
55+
ln -sf $(LOCALTESTBIN) $(CURDIR)/$(TESTBIN)
56+
57+
setup: testbin $(BINDIR) $(DATADIR)
58+
cp -a $(LOCALTESTBIN) $(CURDIR)/$(TESTBIN) $(BINDIR)
59+
cp -a *.yml $(TESTSCN) $(DATADIR)
60+
61+
.PHONY: test build setup clean all testbin
62+
63+
help:
64+
@echo "EDEN is the harness for testing EVE and ADAM"
65+
@echo
66+
@echo "This Makefile automates commons tasks of EDEN testing"
67+
@echo
68+
@echo "Commonly used maintenance and development targets:"
69+
@echo " build build test-binary (OS and ARCH options supported, for ex. OS=linux ARCH=arm64)"
70+
@echo " setup setup of test environment"
71+
@echo " test run tests"
72+
@echo " clean cleanup of test harness"
73+
@echo
74+
@echo "You need install requirements for EVE (look at https://github.com/lf-edge/eve#install-dependencies)."
75+
@echo "You need access to docker socket and installed qemu packages."

tests/kubevirt/eden-config.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
eden:
3+
# test binary
4+
test-bin: "eden.kubevirt.test"
5+
6+
# test scenario
7+
test-scenario: "eden.kubevirt.tests.txt"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
eden.kubevirt.test

tests/kubevirt/kubevirt_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package kubevirt_test
2+
3+
import (
4+
"os"
5+
"path/filepath"
6+
"strings"
7+
"testing"
8+
"time"
9+
10+
"github.com/lf-edge/eden/pkg/defaults"
11+
tk "github.com/lf-edge/eden/pkg/evetestkit"
12+
"github.com/lf-edge/eden/pkg/openevec"
13+
"github.com/lf-edge/eden/pkg/utils"
14+
log "github.com/sirupsen/logrus"
15+
)
16+
17+
const projectName = "kubevirt-test"
18+
const k3sNodeReadyStatusCmd = "eve exec kube /usr/bin/kubectl get node -o jsonpath='{.items[].status.conditions[?(@.type==\"Ready\")].status}'"
19+
const hvTypeKubevirt = "kubevirt"
20+
21+
var eveNode *tk.EveNode
22+
23+
func TestMain(m *testing.M) {
24+
log.Println("Kubevirt Test Suite started")
25+
defer log.Println("Kubevirt Suite finished")
26+
27+
currentPath, err := os.Getwd()
28+
if err != nil {
29+
log.Fatal(err)
30+
}
31+
twoLevelsUp := filepath.Dir(filepath.Dir(currentPath))
32+
33+
configPath := utils.GetConfig("default")
34+
cfg, err := openevec.LoadConfig(configPath)
35+
if err != nil {
36+
log.Fatalf("Failed to get config %v\n", err)
37+
}
38+
39+
if cfg.Eve.HV != hvTypeKubevirt {
40+
log.Fatalf("Incorrect eve.hv value %s, test only supports kubevirt", cfg.Eve.HV)
41+
}
42+
43+
evec := openevec.CreateOpenEVEC(cfg)
44+
configDir := filepath.Join(twoLevelsUp, "eve-config-dir")
45+
if err := evec.SetupEden("config", configDir, "", "", "", []string{}, false, false); err != nil {
46+
log.Fatalf("Failed to setup Eden: %v", err)
47+
}
48+
if err := evec.StartEden(defaults.DefaultVBoxVMName, "", ""); err != nil {
49+
log.Fatalf("Start eden failed: %s", err)
50+
}
51+
if err := evec.OnboardEve(cfg.Eve.CertsUUID); err != nil {
52+
log.Fatalf("Eve onboard failed: %s", err)
53+
}
54+
55+
node, err := tk.InitializeTestFromConfig(projectName, cfg, tk.WithControllerVerbosity("debug"))
56+
if err != nil {
57+
log.Fatalf("Failed to initialize test: %v", err)
58+
}
59+
60+
eveNode = node
61+
res := m.Run()
62+
os.Exit(res)
63+
}
64+
65+
// TestNodeReady to verify the kubernetes control plane becomes ready.
66+
func TestNodeReady(t *testing.T) {
67+
log.Println("TestNodeReady started")
68+
defer log.Println("TestNodeReady finished")
69+
70+
maxTries := 20 // 5 minutes of once every 15sec
71+
attempt := 1
72+
73+
for attempt < maxTries {
74+
out, err := eveNode.EveRunCommand(k3sNodeReadyStatusCmd)
75+
if err == nil {
76+
condition := strings.TrimSpace(string(out))
77+
if condition == "True" {
78+
t.Logf("k3s node ready")
79+
return
80+
}
81+
}
82+
83+
t.Logf("Warn: node ready command returned err:%v out:%s", err, string(out))
84+
time.Sleep(15 * time.Second)
85+
attempt++
86+
}
87+
88+
t.Fatalf("k3s node did not become ready")
89+
}

0 commit comments

Comments
 (0)