Skip to content

Commit 2d84171

Browse files
committed
Add framework.StartDex and export framework.CreateDexClient
Signed-off-by: Nelo-T. Wallus <red.brush9525@fastmail.com> Signed-off-by: Nelo-T. Wallus <n.wallus@sap.com>
1 parent fbbda1c commit 2d84171

2 files changed

Lines changed: 113 additions & 38 deletions

File tree

test/e2e/framework/backend.go

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,12 @@ package framework
1919
import (
2020
"context"
2121
"encoding/base64"
22-
"fmt"
2322
"net"
2423
"testing"
25-
"time"
2624

27-
dexapi "github.com/dexidp/dex/api/v2"
2825
"github.com/gorilla/securecookie"
2926
"github.com/spf13/pflag"
3027
"github.com/stretchr/testify/require"
31-
"google.golang.org/grpc"
32-
grpcinsecure "google.golang.org/grpc/credentials/insecure"
3328
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
3429
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3530
"k8s.io/client-go/rest"
@@ -85,7 +80,7 @@ func StartBackendWithoutDefaultArgs(t *testing.T, clientConfig *rest.Config, arg
8580
require.NoError(t, err)
8681

8782
opts.OIDC.IssuerClientID = "kube-bind-" + port
88-
createDexClient(t, addr)
83+
CreateDexClient(t, addr)
8984

9085
opts.ExtraOptions.TestingSkipNameValidation = true
9186
opts.ExtraOptions.SchemaSource = options.CustomResourceDefinitionSource.String()
@@ -105,35 +100,3 @@ func StartBackendWithoutDefaultArgs(t *testing.T, clientConfig *rest.Config, arg
105100

106101
return addr, server
107102
}
108-
109-
func createDexClient(t *testing.T, addr net.Addr) {
110-
ctx, cancel := context.WithCancel(context.Background())
111-
t.Cleanup(cancel)
112-
113-
_, port, err := net.SplitHostPort(addr.String())
114-
require.NoError(t, err)
115-
conn, err := grpc.NewClient("127.0.0.1:5557", grpc.WithTransportCredentials(grpcinsecure.NewCredentials()))
116-
require.NoError(t, err)
117-
defer conn.Close()
118-
client := dexapi.NewDexClient(conn)
119-
120-
_, err = client.CreateClient(ctx, &dexapi.CreateClientReq{
121-
Client: &dexapi.Client{
122-
Id: "kube-bind-" + port,
123-
Secret: "ZXhhbXBsZS1hcHAtc2VjcmV0",
124-
RedirectUris: []string{fmt.Sprintf("http://%s/callback", addr)},
125-
Public: true,
126-
Name: "kube-bind on port " + port,
127-
},
128-
})
129-
require.NoError(t, err)
130-
131-
t.Cleanup(func() {
132-
ctx, cancel := context.WithDeadline(context.Background(), metav1.Now().Add(10*time.Second))
133-
defer cancel()
134-
conn, err := grpc.NewClient("127.0.0.1:5557", grpc.WithTransportCredentials(grpcinsecure.NewCredentials()))
135-
require.NoError(t, err)
136-
_, err = dexapi.NewDexClient(conn).DeleteClient(ctx, &dexapi.DeleteClientReq{Id: "kube-bind-" + port})
137-
require.NoError(t, err)
138-
})
139-
}

test/e2e/framework/dex.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
/*
2+
Copyright 2025 The Kube Bind Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package framework
18+
19+
import (
20+
"context"
21+
"fmt"
22+
"net"
23+
"net/http"
24+
"os"
25+
"os/exec"
26+
"path/filepath"
27+
"sync"
28+
"syscall"
29+
"testing"
30+
"time"
31+
32+
dexapi "github.com/dexidp/dex/api/v2"
33+
"github.com/stretchr/testify/require"
34+
"google.golang.org/grpc"
35+
grpcinsecure "google.golang.org/grpc/credentials/insecure"
36+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
37+
"k8s.io/apimachinery/pkg/util/wait"
38+
)
39+
40+
var dexOnce sync.Once
41+
42+
func StartDex(t testing.TB) {
43+
t.Helper()
44+
45+
dexOnce.Do(func() {
46+
dexConfig := os.Getenv("DEX_CONFIG")
47+
if dexConfig == "" {
48+
dexConfig = filepath.Clean(filepath.Join(WorkDir, "..", "hack", "dex-config-dev.yaml"))
49+
}
50+
51+
t.Logf("Starting dex with config %q", dexConfig)
52+
53+
dexCmd := exec.Command(
54+
"dex",
55+
"serve",
56+
dexConfig,
57+
)
58+
59+
// Ensures that dex is killed when the process ends.
60+
dexCmd.SysProcAttr = &syscall.SysProcAttr{
61+
Pdeathsig: syscall.SIGKILL,
62+
Setpgid: true,
63+
Pgid: 0,
64+
}
65+
66+
require.NoError(t, dexCmd.Start())
67+
})
68+
69+
t.Log("Wait for Dex to be ready")
70+
req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, "http://127.0.0.1:5556/dex/.well-known/openid-configuration", nil)
71+
require.NoError(t, err)
72+
require.Eventually(t, func() bool {
73+
resp, err := http.DefaultClient.Do(req)
74+
if err != nil {
75+
return false
76+
}
77+
defer resp.Body.Close()
78+
return resp.StatusCode == http.StatusOK
79+
}, wait.ForeverTestTimeout, time.Millisecond*100)
80+
t.Log("Dex is ready")
81+
}
82+
83+
func CreateDexClient(t testing.TB, addr net.Addr) {
84+
t.Helper()
85+
86+
_, port, err := net.SplitHostPort(addr.String())
87+
require.NoError(t, err)
88+
conn, err := grpc.NewClient("127.0.0.1:5557", grpc.WithTransportCredentials(grpcinsecure.NewCredentials()))
89+
require.NoError(t, err)
90+
defer conn.Close()
91+
client := dexapi.NewDexClient(conn)
92+
93+
_, err = client.CreateClient(t.Context(), &dexapi.CreateClientReq{
94+
Client: &dexapi.Client{
95+
Id: "kube-bind-" + port,
96+
Secret: "ZXhhbXBsZS1hcHAtc2VjcmV0",
97+
RedirectUris: []string{fmt.Sprintf("http://%s/callback", addr)},
98+
Public: true,
99+
Name: "kube-bind on port " + port,
100+
},
101+
})
102+
require.NoError(t, err)
103+
104+
t.Cleanup(func() {
105+
ctx, cancel := context.WithDeadline(context.Background(), metav1.Now().Add(10*time.Second))
106+
defer cancel()
107+
conn, err := grpc.NewClient("127.0.0.1:5557", grpc.WithTransportCredentials(grpcinsecure.NewCredentials()))
108+
require.NoError(t, err)
109+
_, err = dexapi.NewDexClient(conn).DeleteClient(ctx, &dexapi.DeleteClientReq{Id: "kube-bind-" + port})
110+
require.NoError(t, err)
111+
})
112+
}

0 commit comments

Comments
 (0)