Skip to content

Commit 28e0736

Browse files
committed
refactor main_test.go: install CRDs using envtest
1 parent ce51061 commit 28e0736

File tree

3 files changed

+39
-30
lines changed

3 files changed

+39
-30
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ update-vendor:
112112
hack/update-vendor.sh
113113

114114
.PHONY: unit-test
115-
unit-test:
115+
unit-test: install-envtest
116116
hack/unit-test.sh
117117

118118
.PHONY: install-envtest

cmd/scheduler/main_test.go

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@ import (
2020
"context"
2121
"fmt"
2222
"net"
23-
"net/http"
24-
"net/http/httptest"
2523
"os"
2624
"path/filepath"
2725
"testing"
2826

2927
"github.com/google/go-cmp/cmp"
3028
"github.com/spf13/pflag"
3129

30+
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
3231
"k8s.io/kubernetes/cmd/kube-scheduler/app"
3332
"k8s.io/kubernetes/cmd/kube-scheduler/app/options"
3433
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3534
"k8s.io/kubernetes/pkg/scheduler/apis/config/testing/defaults"
35+
"sigs.k8s.io/controller-runtime/pkg/envtest"
3636

3737
"sigs.k8s.io/scheduler-plugins/pkg/capacityscheduling"
3838
"sigs.k8s.io/scheduler-plugins/pkg/coscheduling"
@@ -48,42 +48,47 @@ import (
4848
)
4949

5050
func TestSetup(t *testing.T) {
51+
testEnv := &envtest.Environment{
52+
CRDDirectoryPaths: []string{
53+
filepath.Join("..", "..", "manifests", "crds"),
54+
},
55+
}
56+
57+
// start envtest cluster
58+
cfg, err := testEnv.Start()
59+
defer testEnv.Stop()
60+
if err != nil {
61+
panic(err)
62+
}
63+
5164
// temp dir
5265
tmpDir, err := os.MkdirTemp("", "scheduler-options")
5366
if err != nil {
5467
t.Fatal(err)
5568
}
5669
defer os.RemoveAll(tmpDir)
5770

58-
// https server
59-
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
60-
w.Header().Set("Content-Type", "application/json")
61-
w.WriteHeader(http.StatusOK)
62-
w.Write([]byte(`{"metadata": {"name": "test"}}`))
63-
}))
64-
defer server.Close()
71+
clusters := make(map[string]*clientcmdapi.Cluster)
72+
clusters["default-cluster"] = &clientcmdapi.Cluster{
73+
Server: cfg.Host,
74+
CertificateAuthorityData: cfg.CAData,
75+
}
76+
// https://github.com/kubernetes-sigs/controller-runtime/blob/v0.16.3/examples/scratch-env/main.go
77+
user, err := testEnv.ControlPlane.AddUser(envtest.User{
78+
Name: "envtest-admin",
79+
Groups: []string{"system:masters"},
80+
}, nil)
81+
if err != nil {
82+
t.Fatal(err)
83+
}
84+
kubeConfig, err := user.KubeConfig()
85+
if err != nil {
86+
t.Fatalf("unable to create kubeconfig: %v", err)
87+
}
6588

6689
configKubeconfig := filepath.Join(tmpDir, "config.kubeconfig")
67-
if err := os.WriteFile(configKubeconfig, []byte(fmt.Sprintf(`
68-
apiVersion: v1
69-
kind: Config
70-
clusters:
71-
- cluster:
72-
insecure-skip-tls-verify: true
73-
server: %s
74-
name: default
75-
contexts:
76-
- context:
77-
cluster: default
78-
user: default
79-
name: default
80-
current-context: default
81-
users:
82-
- name: default
83-
user:
84-
username: config
85-
`, server.URL)), os.FileMode(0600)); err != nil {
86-
t.Fatal(err)
90+
if err := os.WriteFile(configKubeconfig, kubeConfig, os.FileMode(0600)); err != nil {
91+
t.Fatalf("unable to create kubeconfig file: %v", err)
8792
}
8893

8994
// PodState plugin config

hack/unit-test.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ set -o pipefail
2121
SCRIPT_ROOT=$(dirname "${BASH_SOURCE}")/..
2222
source "${SCRIPT_ROOT}/hack/lib/init.sh"
2323

24+
kube::log::status "Configuring envtest"
25+
TEMP_DIR=${TMPDIR-/tmp}
26+
source "${TEMP_DIR}/setup-envtest"
27+
2428
# TODO: make args customizable.
2529
go test -mod=vendor \
2630
sigs.k8s.io/scheduler-plugins/cmd/... \

0 commit comments

Comments
 (0)