Skip to content

Commit

Permalink
refactor main_test.go: install CRDs using envtest
Browse files Browse the repository at this point in the history
  • Loading branch information
Huang-Wei committed Nov 16, 2023
1 parent ce51061 commit 28e0736
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 30 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ update-vendor:
hack/update-vendor.sh

.PHONY: unit-test
unit-test:
unit-test: install-envtest
hack/unit-test.sh

.PHONY: install-envtest
Expand Down
63 changes: 34 additions & 29 deletions cmd/scheduler/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ import (
"context"
"fmt"
"net"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"

"github.com/google/go-cmp/cmp"
"github.com/spf13/pflag"

clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
"k8s.io/kubernetes/cmd/kube-scheduler/app"
"k8s.io/kubernetes/cmd/kube-scheduler/app/options"
"k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/apis/config/testing/defaults"
"sigs.k8s.io/controller-runtime/pkg/envtest"

"sigs.k8s.io/scheduler-plugins/pkg/capacityscheduling"
"sigs.k8s.io/scheduler-plugins/pkg/coscheduling"
Expand All @@ -48,42 +48,47 @@ import (
)

func TestSetup(t *testing.T) {
testEnv := &envtest.Environment{
CRDDirectoryPaths: []string{
filepath.Join("..", "..", "manifests", "crds"),
},
}

// start envtest cluster
cfg, err := testEnv.Start()
defer testEnv.Stop()
if err != nil {
panic(err)
}

// temp dir
tmpDir, err := os.MkdirTemp("", "scheduler-options")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpDir)

// https server
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"metadata": {"name": "test"}}`))
}))
defer server.Close()
clusters := make(map[string]*clientcmdapi.Cluster)
clusters["default-cluster"] = &clientcmdapi.Cluster{
Server: cfg.Host,
CertificateAuthorityData: cfg.CAData,
}
// https://github.com/kubernetes-sigs/controller-runtime/blob/v0.16.3/examples/scratch-env/main.go
user, err := testEnv.ControlPlane.AddUser(envtest.User{
Name: "envtest-admin",
Groups: []string{"system:masters"},
}, nil)
if err != nil {
t.Fatal(err)
}
kubeConfig, err := user.KubeConfig()
if err != nil {
t.Fatalf("unable to create kubeconfig: %v", err)
}

configKubeconfig := filepath.Join(tmpDir, "config.kubeconfig")
if err := os.WriteFile(configKubeconfig, []byte(fmt.Sprintf(`
apiVersion: v1
kind: Config
clusters:
- cluster:
insecure-skip-tls-verify: true
server: %s
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
users:
- name: default
user:
username: config
`, server.URL)), os.FileMode(0600)); err != nil {
t.Fatal(err)
if err := os.WriteFile(configKubeconfig, kubeConfig, os.FileMode(0600)); err != nil {
t.Fatalf("unable to create kubeconfig file: %v", err)
}

// PodState plugin config
Expand Down
4 changes: 4 additions & 0 deletions hack/unit-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ set -o pipefail
SCRIPT_ROOT=$(dirname "${BASH_SOURCE}")/..
source "${SCRIPT_ROOT}/hack/lib/init.sh"

kube::log::status "Configuring envtest"
TEMP_DIR=${TMPDIR-/tmp}
source "${TEMP_DIR}/setup-envtest"

# TODO: make args customizable.
go test -mod=vendor \
sigs.k8s.io/scheduler-plugins/cmd/... \
Expand Down

0 comments on commit 28e0736

Please sign in to comment.