Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit 95a426d

Browse files
committed
Improves dev_cluster_deploy and add optional fake server
Signed-off-by: JoshVanL <[email protected]>
1 parent a3e150a commit 95a426d

File tree

16 files changed

+152
-95
lines changed

16 files changed

+152
-95
lines changed

test/e2e/framework/helper/deploy.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ func (h *Helper) DeployIssuer(ns string) (*util.KeyBundle, *url.URL, error) {
209209
return bundle, appURL, nil
210210
}
211211

212-
func (h *Helper) DeployFakeAPIServer(ns string) (*util.KeyBundle, *url.URL, error) {
212+
func (h *Helper) DeployFakeAPIServer(ns string) ([]corev1.Volume, *url.URL, error) {
213213
cnt := corev1.Container{
214214
Name: FakeAPIServerName,
215215
Image: FakeAPIServerName,
@@ -239,7 +239,31 @@ func (h *Helper) DeployFakeAPIServer(ns string) (*util.KeyBundle, *url.URL, erro
239239
return nil, nil, err
240240
}
241241

242-
return bundle, appURL, nil
242+
sec, err := h.KubeClient.CoreV1().Secrets(ns).Create(&corev1.Secret{
243+
ObjectMeta: metav1.ObjectMeta{
244+
GenerateName: "fake-apiserver-ca-",
245+
Namespace: ns,
246+
},
247+
Data: map[string][]byte{
248+
"ca.pem": bundle.CertBytes,
249+
},
250+
})
251+
if err != nil {
252+
return nil, nil, err
253+
}
254+
255+
extraVolumes := []corev1.Volume{
256+
{
257+
Name: "fake-apiserver",
258+
VolumeSource: corev1.VolumeSource{
259+
Secret: &corev1.SecretVolumeSource{
260+
SecretName: sec.Name,
261+
},
262+
},
263+
},
264+
}
265+
266+
return extraVolumes, appURL, nil
243267
}
244268

245269
func (h *Helper) deployApp(ns, name string, serviceType corev1.ServiceType, container corev1.Container, volumes ...corev1.Volume) (*util.KeyBundle, *url.URL, error) {

test/e2e/suite/cases/headers/headers.go

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,12 @@ package headers
44
import (
55
"fmt"
66
"net/http"
7-
"net/url"
87
"strings"
98
"time"
109

1110
. "github.com/onsi/ginkgo"
1211
. "github.com/onsi/gomega"
1312

14-
corev1 "k8s.io/api/core/v1"
15-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16-
1713
"github.com/jetstack/kube-oidc-proxy/test/e2e/framework"
1814
testutil "github.com/jetstack/kube-oidc-proxy/test/util"
1915
)
@@ -28,10 +24,11 @@ var _ = framework.CasesDescribe("Headers", func() {
2824
})
2925

3026
It("should not respond with any extra headers if none are set on the proxy", func() {
31-
fakeAPIServerURL, extraVolumes := deployFakeAPIServer(f)
27+
extraOIDCVolumes, fakeAPIServerURL, err := f.Helper().DeployFakeAPIServer(f.Namespace.Name)
28+
Expect(err).NotTo(HaveOccurred())
3229

3330
By("Redeploying proxy to send traffic to fake API server")
34-
f.DeployProxyWith(extraVolumes, fmt.Sprintf("--server=%s", fakeAPIServerURL), "--certificate-authority=/fake-apiserver/ca.pem")
31+
f.DeployProxyWith(extraOIDCVolumes, fmt.Sprintf("--server=%s", fakeAPIServerURL), "--certificate-authority=/fake-apiserver/ca.pem")
3532

3633
resp := sendRequestToProxy(f)
3734

@@ -44,10 +41,12 @@ var _ = framework.CasesDescribe("Headers", func() {
4441
})
4542

4643
It("should respond with remote address and custom extra headers when they are set", func() {
47-
fakeAPIServerURL, extraVolumes := deployFakeAPIServer(f)
44+
By("Deploying fake API Server")
45+
extraOIDCVolumes, fakeAPIServerURL, err := f.Helper().DeployFakeAPIServer(f.Namespace.Name)
46+
Expect(err).NotTo(HaveOccurred())
4847

4948
By("Redeploying proxy to send traffic to fake API server with extra headers set")
50-
f.DeployProxyWith(extraVolumes, fmt.Sprintf("--server=%s", fakeAPIServerURL), "--certificate-authority=/fake-apiserver/ca.pem",
49+
f.DeployProxyWith(extraOIDCVolumes, fmt.Sprintf("--server=%s", fakeAPIServerURL), "--certificate-authority=/fake-apiserver/ca.pem",
5150
"--extra-user-header-client-ip", "--extra-user-headers=key1=foo,key2=foo,key1=bar")
5251

5352
resp := sendRequestToProxy(f)
@@ -86,36 +85,6 @@ var _ = framework.CasesDescribe("Headers", func() {
8685
})
8786
})
8887

89-
func deployFakeAPIServer(f *framework.Framework) (*url.URL, []corev1.Volume) {
90-
By("Deploying fake API Server")
91-
fAPIServerBundle, fakeAPIServerURL, err := f.Helper().DeployFakeAPIServer(f.Namespace.Name)
92-
Expect(err).NotTo(HaveOccurred())
93-
94-
sec, err := f.KubeClientSet.CoreV1().Secrets(f.Namespace.Name).Create(&corev1.Secret{
95-
ObjectMeta: metav1.ObjectMeta{
96-
GenerateName: "fake-apiserver-ca-",
97-
Namespace: f.Namespace.Name,
98-
},
99-
Data: map[string][]byte{
100-
"ca.pem": fAPIServerBundle.CertBytes,
101-
},
102-
})
103-
Expect(err).NotTo(HaveOccurred())
104-
105-
extraVolumes := []corev1.Volume{
106-
{
107-
Name: "fake-apiserver",
108-
VolumeSource: corev1.VolumeSource{
109-
Secret: &corev1.SecretVolumeSource{
110-
SecretName: sec.Name,
111-
},
112-
},
113-
},
114-
}
115-
116-
return fakeAPIServerURL, extraVolumes
117-
}
118-
11988
func sendRequestToProxy(f *framework.Framework) *http.Response {
12089
By("Building request to proxy")
12190
tokenPayload := f.Helper().NewTokenPayload(

test/environment/dev/dev.go

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package main
33

44
import (
55
"fmt"
6+
"net/url"
67
"os"
78
"path/filepath"
9+
"strings"
810
"time"
911

1012
corev1 "k8s.io/api/core/v1"
@@ -20,6 +22,8 @@ import (
2022

2123
const (
2224
clientID = "kube-oidc-proxy-e2e-client-id"
25+
26+
EnvFakeAPIServer = "KUBE_OIDC_PROXY_FAKE_APISERVER"
2327
)
2428

2529
func main() {
@@ -44,23 +48,28 @@ func main() {
4448
}
4549

4650
func create() {
47-
env, err := environment.Create(1, 1)
51+
env, err := environment.New(1, 1)
4852
errExit(err)
4953

54+
errExit(env.Create())
55+
5056
fmt.Printf("> dev environment created.\n")
5157
fmt.Printf("export KUBECONFIG=%s\n", env.KubeConfigPath())
5258
}
5359

5460
func deploy() {
55-
k := new(kind.Kind)
56-
kubeconfig := k.KubeConfigPath()
57-
rootPath, err := environment.RootPath()
61+
env, err := environment.New(1, 1)
5862
errExit(err)
5963

64+
fmt.Printf("> reloading all images\n")
65+
errExit(env.Kind().LoadAllImages())
66+
67+
kubeconfig := env.KubeConfigPath()
68+
6069
cfg := &config.Config{
6170
KubeConfigPath: kubeconfig,
62-
RepoRoot: rootPath,
63-
Kubectl: filepath.Join(rootPath, "bin", "kubectl"),
71+
RepoRoot: env.RootPath(),
72+
Kubectl: filepath.Join(env.RootPath(), "bin", "kubectl"),
6473
}
6574

6675
err = cfg.Validate()
@@ -93,9 +102,24 @@ func deploy() {
93102

94103
fmt.Printf("> deployed issuer at url %s\n", issuerURL)
95104

96-
_, proxyURL, err := helper.DeployProxy(ns, issuerURL,
97-
"kube-oidc-proxy-e2e-client-id", issuerKeyBundle, nil)
98-
errExit(err)
105+
var proxyURL *url.URL
106+
if e := os.Getenv(EnvFakeAPIServer); strings.ToLower(e) == "true" {
107+
extraOIDCVolume, fURL, err := helper.DeployFakeAPIServer(ns.Name)
108+
errExit(err)
109+
110+
fmt.Printf("> deployed fake API server at url %s\n", fURL)
111+
112+
_, proxyURL, err = helper.DeployProxy(ns, issuerURL,
113+
"kube-oidc-proxy-e2e-client-id", issuerKeyBundle, extraOIDCVolume,
114+
fmt.Sprintf("--server=%s", fURL), "--certificate-authority=/fake-apiserver/ca.pem")
115+
errExit(err)
116+
117+
} else {
118+
_, proxyURL, err = helper.DeployProxy(ns, issuerURL,
119+
"kube-oidc-proxy-e2e-client-id", issuerKeyBundle, nil)
120+
errExit(err)
121+
}
122+
99123
fmt.Printf("> deployed proxy at url %s\n", proxyURL)
100124

101125
tokenPayload := helper.NewTokenPayload(issuerURL, clientID, time.Now().Add(time.Hour*48))

test/environment/environment.go

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ const (
2020
type Environment struct {
2121
kind *kind.Kind
2222

23-
rootPath string
23+
rootPath string
24+
nodeImage string
2425
}
2526

26-
func Create(masterNodes, workerNodes int) (*Environment, error) {
27+
func New(masterNodesCount, workerNodesCount int) (*Environment, error) {
2728
nodeImage := os.Getenv("KUBE_OIDC_PROXY_K8S_VERSION")
2829
if nodeImage == "" {
2930
nodeImage = defaultNodeImage
@@ -35,27 +36,25 @@ func Create(masterNodes, workerNodes int) (*Environment, error) {
3536
return nil, err
3637
}
3738

38-
k, err := kind.New(rootPath, nodeImage, masterNodes, workerNodes)
39-
if err != nil {
40-
return nil, fmt.Errorf("failed to create kind cluster: %s", err)
41-
}
39+
kind := kind.New(rootPath, nodeImage, masterNodesCount, workerNodesCount)
4240

43-
if err := k.LoadKubeOIDCProxy(); err != nil {
44-
return nil, err
45-
}
41+
return &Environment{
42+
rootPath: rootPath,
43+
nodeImage: nodeImage,
44+
kind: kind,
45+
}, nil
46+
}
4647

47-
if err := k.LoadIssuer(); err != nil {
48-
return nil, err
48+
func (e *Environment) Create() error {
49+
if err := e.kind.Create(); err != nil {
50+
return fmt.Errorf("failed to create kind cluster: %s", err)
4951
}
5052

51-
if err := k.LoadFakeAPIServer(); err != nil {
52-
return nil, err
53+
if err := e.kind.LoadAllImages(); err != nil {
54+
return err
5355
}
5456

55-
return &Environment{
56-
kind: k,
57-
rootPath: rootPath,
58-
}, nil
57+
return nil
5958
}
6059

6160
func (e *Environment) Destory() error {
@@ -101,6 +100,10 @@ func (e *Environment) Node(name string) (*nodes.Node, error) {
101100
return node, nil
102101
}
103102

103+
func (e *Environment) Kind() *kind.Kind {
104+
return e.kind
105+
}
106+
104107
func RootPath() (string, error) {
105108
rootPath := os.Getenv("KUBE_OIDC_PROXY_ROOT_PATH")
106109
if rootPath == "" {

test/kind/image.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ import (
1515
"sigs.k8s.io/kind/pkg/cluster/nodeutils"
1616
)
1717

18+
func (k *Kind) LoadAllImages() error {
19+
if err := k.LoadKubeOIDCProxy(); err != nil {
20+
return err
21+
}
22+
23+
if err := k.LoadIssuer(); err != nil {
24+
return err
25+
}
26+
27+
if err := k.LoadFakeAPIServer(); err != nil {
28+
return err
29+
}
30+
31+
return nil
32+
}
33+
1834
func (k *Kind) LoadKubeOIDCProxy() error {
1935
binPath := filepath.Join(k.rootPath, "./bin/kube-oidc-proxy")
2036
mainPath := filepath.Join(k.rootPath, "./cmd/.")
@@ -24,17 +40,17 @@ func (k *Kind) LoadKubeOIDCProxy() error {
2440
}
2541

2642
func (k *Kind) LoadIssuer() error {
27-
binPath := filepath.Join(k.rootPath, "./test/e2e/framework/issuer/bin/oidc-issuer")
28-
dockerfilePath := filepath.Join(k.rootPath, "./test/e2e/framework/issuer")
43+
binPath := filepath.Join(k.rootPath, "./test/tools/issuer/bin/oidc-issuer")
44+
dockerfilePath := filepath.Join(k.rootPath, "./test/tools/issuer")
2945
mainPath := filepath.Join(dockerfilePath, "cmd")
3046
image := "oidc-issuer-e2e"
3147

3248
return k.loadImage(binPath, mainPath, image, dockerfilePath)
3349
}
3450

3551
func (k *Kind) LoadFakeAPIServer() error {
36-
binPath := filepath.Join(k.rootPath, "./test/e2e/framework/fake-apiserver/bin/fake-apiserver")
37-
dockerfilePath := filepath.Join(k.rootPath, "./test/e2e/framework/fake-apiserver")
52+
binPath := filepath.Join(k.rootPath, "./test/tools/fake-apiserver/bin/fake-apiserver")
53+
dockerfilePath := filepath.Join(k.rootPath, "./test/tools/fake-apiserver")
3854
mainPath := filepath.Join(dockerfilePath, "cmd")
3955
image := "fake-apiserver-e2e"
4056

0 commit comments

Comments
 (0)