Skip to content

Commit 6ad357a

Browse files
committed
introduce testcontainers for more flexibility
1 parent 265976c commit 6ad357a

14 files changed

Lines changed: 229 additions & 36 deletions

File tree

go.mod

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,60 @@ require (
99
)
1010

1111
require (
12+
dario.cat/mergo v1.0.1 // indirect
13+
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
14+
github.com/Microsoft/go-winio v0.6.2 // indirect
15+
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
16+
github.com/containerd/log v0.1.0 // indirect
17+
github.com/containerd/platforms v0.2.1 // indirect
18+
github.com/cpuguy83/dockercfg v0.3.2 // indirect
19+
github.com/davecgh/go-spew v1.1.1 // indirect
1220
github.com/deckarep/golang-set/v2 v2.8.0 // indirect
21+
github.com/distribution/reference v0.6.0 // indirect
22+
github.com/docker/docker v28.0.1+incompatible // indirect
23+
github.com/docker/go-connections v0.5.0 // indirect
24+
github.com/docker/go-units v0.5.0 // indirect
25+
github.com/ebitengine/purego v0.8.2 // indirect
26+
github.com/felixge/httpsnoop v1.0.4 // indirect
1327
github.com/go-jose/go-jose/v3 v3.0.4 // indirect
1428
github.com/go-logr/logr v1.4.2 // indirect
29+
github.com/go-logr/stdr v1.2.2 // indirect
30+
github.com/go-ole/go-ole v1.2.6 // indirect
1531
github.com/go-stack/stack v1.8.1 // indirect
1632
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
33+
github.com/gogo/protobuf v1.3.2 // indirect
1734
github.com/google/go-cmp v0.7.0 // indirect
1835
github.com/google/pprof v0.0.0-20250418163039-24c5476c6587 // indirect
36+
github.com/google/uuid v1.6.0 // indirect
37+
github.com/klauspost/compress v1.17.4 // indirect
38+
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
39+
github.com/magiconair/properties v1.8.9 // indirect
40+
github.com/moby/docker-image-spec v1.3.1 // indirect
41+
github.com/moby/patternmatcher v0.6.0 // indirect
42+
github.com/moby/sys/sequential v0.5.0 // indirect
43+
github.com/moby/sys/user v0.1.0 // indirect
44+
github.com/moby/sys/userns v0.1.0 // indirect
45+
github.com/moby/term v0.5.0 // indirect
46+
github.com/morikuni/aec v1.0.0 // indirect
47+
github.com/opencontainers/go-digest v1.0.0 // indirect
48+
github.com/opencontainers/image-spec v1.1.1 // indirect
49+
github.com/pkg/errors v0.9.1 // indirect
50+
github.com/pmezard/go-difflib v1.0.0 // indirect
51+
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
52+
github.com/shirou/gopsutil/v4 v4.25.1 // indirect
53+
github.com/sirupsen/logrus v1.9.3 // indirect
54+
github.com/stretchr/testify v1.10.0 // indirect
55+
github.com/testcontainers/testcontainers-go v0.36.0 // indirect
56+
github.com/tklauser/go-sysconf v0.3.12 // indirect
57+
github.com/tklauser/numcpus v0.6.1 // indirect
58+
github.com/yusufpapurcu/wmi v1.2.4 // indirect
59+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
60+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
61+
go.opentelemetry.io/otel v1.35.0 // indirect
62+
go.opentelemetry.io/otel/metric v1.35.0 // indirect
63+
go.opentelemetry.io/otel/trace v1.35.0 // indirect
1964
go.uber.org/automaxprocs v1.6.0 // indirect
65+
golang.org/x/crypto v0.37.0 // indirect
2066
golang.org/x/net v0.39.0 // indirect
2167
golang.org/x/sys v0.32.0 // indirect
2268
golang.org/x/text v0.24.0 // indirect

go.sum

Lines changed: 115 additions & 0 deletions
Large diffs are not rendered by default.

internal/utils/testcontainer.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package utils
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
"time"
8+
9+
. "github.com/onsi/ginkgo/v2"
10+
"github.com/testcontainers/testcontainers-go"
11+
"github.com/testcontainers/testcontainers-go/wait"
12+
)
13+
14+
func CreateContainer(ctx context.Context, configFile string, networks []string) (testcontainers.Container, error) {
15+
req := testcontainers.ContainerRequest{
16+
Image: "quay.io/oauth2-proxy/oauth2-proxy:latest",
17+
ExposedPorts: []string{"4180:4180"},
18+
Hostname: "oauth2-proxy",
19+
WaitingFor: wait.ForListeningPort("4180").WithStartupTimeout(30 * time.Second),
20+
Files: []testcontainers.ContainerFile{
21+
{
22+
HostFilePath: configFile,
23+
ContainerFilePath: "/oauth2-proxy.cfg",
24+
FileMode: 0644,
25+
},
26+
},
27+
Cmd: []string{"--config", "/oauth2-proxy.cfg"},
28+
Networks: networks,
29+
}
30+
31+
c, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
32+
ContainerRequest: req,
33+
Started: true,
34+
})
35+
36+
if err != nil {
37+
logs, err := c.Logs(ctx)
38+
if err == nil {
39+
defer logs.Close()
40+
GinkgoWriter.Println("\n=== Container Logs ===")
41+
_, _ = io.Copy(GinkgoWriter, logs)
42+
GinkgoWriter.Println("=====================")
43+
}
44+
return c, fmt.Errorf("Failed to start container: %v", err)
45+
}
46+
47+
time.Sleep(time.Millisecond * 250)
48+
return c, nil
49+
}
Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,4 @@
11
services:
2-
oauth2-proxy:
3-
pull_policy: never
4-
image: quay.io/oauth2-proxy/oauth2-proxy:latest
5-
command: --config /oauth2-proxy.cfg
6-
hostname: oauth2-proxy
7-
volumes:
8-
- "./oauth2-proxy.cfg:/oauth2-proxy.cfg"
9-
restart: unless-stopped
10-
ports:
11-
- 4180:4180/tcp
12-
networks:
13-
dex: {}
14-
upstream: {}
15-
depends_on:
16-
- dex
17-
- upstream
182
dex:
193
image: ghcr.io/dexidp/dex:v2.42.0
204
command: dex serve /dex.yaml
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package smoke
22

33
import (
4+
"io"
45
"testing"
56

67
"github.com/oauth2-proxy/e2e/internal/pages"
@@ -45,7 +46,18 @@ var _ = Describe("OIDC Login Flow", func() {
4546
Expect(context.Close()).To(Succeed())
4647
})
4748

48-
It("should authenticate via Dex", func() {
49+
It("should authenticate via Dex", func(ctx SpecContext) {
50+
container, err := utils.CreateContainer(ctx, "configs/basic.cfg", []string{"01_smoke_dex", "01_smoke_upstream"})
51+
logs, err := container.Logs(ctx)
52+
if err == nil {
53+
defer logs.Close()
54+
GinkgoWriter.Println("\n=== Container Logs ===")
55+
_, _ = io.Copy(GinkgoWriter, logs)
56+
GinkgoWriter.Println("=====================")
57+
}
58+
Expect(err).NotTo(HaveOccurred(), "Couldn't create container")
59+
defer container.Terminate(ctx)
60+
4961
baseUrl := "http://oauth2-proxy.localtest.me:4180"
5062

5163
pages.NewProviderButtonPage(page, baseUrl, "Dex").SignIn()
Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,4 @@
11
services:
2-
oauth2-proxy:
3-
pull_policy: never
4-
image: quay.io/oauth2-proxy/oauth2-proxy:latest
5-
command: --config /oauth2-proxy.cfg
6-
hostname: oauth2-proxy
7-
volumes:
8-
- "./oauth2-proxy.cfg:/oauth2-proxy.cfg"
9-
restart: unless-stopped
10-
ports:
11-
- 4180:4180/tcp
12-
networks:
13-
keycloak: {}
14-
upstream: {}
15-
depends_on:
16-
- keycloak
17-
- upstream
18-
192
keycloak:
203
image: quay.io/keycloak/keycloak:26.2
214
command:

0 commit comments

Comments
 (0)