Skip to content

Commit a158ead

Browse files
committed
test(e2e): switch to remote API7 EE instance via DEMO_WEBSITE/DEMO_TOKEN secrets
- Remove Docker Compose from CI workflow, use repo secrets instead - Require A7_ADMIN_URL and A7_TOKEN (no more localhost defaults) - Skip gateway traffic and debug trace tests when A7_GATEWAY_URL not set - Add requireGatewayURL/requireHTTPBin test helpers - Increase test timeout to 15m for remote execution
1 parent df8a8f2 commit a158ead

File tree

6 files changed

+52
-45
lines changed

6 files changed

+52
-45
lines changed

.github/workflows/e2e.yml

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,26 @@
11
name: E2E Tests
22
on:
33
pull_request:
4-
branches: [main]
4+
branches: [main, master]
55
push:
6-
branches: [main]
6+
branches: [main, master]
77
workflow_dispatch:
88

99
jobs:
1010
e2e:
1111
runs-on: ubuntu-latest
1212
timeout-minutes: 30
13+
# Only run if secrets are available (skip on forks).
14+
if: github.repository == 'api7/a7'
1315
steps:
1416
- uses: actions/checkout@v4
1517
- uses: actions/setup-go@v5
1618
with:
1719
go-version: '1.22'
1820

19-
- name: Start API7 EE
20-
working-directory: test/e2e
21-
run: docker compose up -d --wait --wait-timeout 120
22-
23-
- name: Wait for API7 EE
24-
run: |
25-
for i in $(seq 1 60); do
26-
if curl -sk https://127.0.0.1:7443/api/status; then
27-
echo "API7 EE is ready"
28-
break
29-
fi
30-
echo "Waiting for API7 EE... ($i/60)"
31-
sleep 2
32-
done
33-
34-
- name: Get admin token
35-
id: token
36-
run: |
37-
TOKEN=$(curl -sk https://127.0.0.1:7443/api/login -d '{"username":"admin","password":"admin"}' | jq -r '.token')
38-
echo "token=$TOKEN" >> "$GITHUB_OUTPUT"
39-
4021
- name: Run E2E tests
4122
env:
42-
A7_ADMIN_URL: https://127.0.0.1:7443
43-
A7_GATEWAY_URL: http://127.0.0.1:9080
44-
A7_TOKEN: ${{ steps.token.outputs.token }}
23+
A7_ADMIN_URL: ${{ secrets.DEMO_WEBSITE }}
24+
A7_TOKEN: ${{ secrets.DEMO_TOKEN }}
4525
A7_GATEWAY_GROUP: default
46-
HTTPBIN_URL: http://127.0.0.1:8080
4726
run: make test-e2e
48-
49-
- name: Dump docker logs on failure
50-
if: failure()
51-
working-directory: test/e2e
52-
run: docker compose logs
53-
54-
- name: Stop API7 EE
55-
if: always()
56-
working-directory: test/e2e
57-
run: docker compose down -v

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,4 @@ docker-down:
4444
docker compose -f test/e2e/docker-compose.yml down -v
4545

4646
test-e2e:
47-
go test ./test/e2e/... -count=1 -v -tags=e2e
47+
go test ./test/e2e/... -count=1 -v -tags=e2e -timeout 15m

test/e2e/consumer_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ func TestConsumer_Export(t *testing.T) {
115115
}
116116

117117
func TestConsumer_WithKeyAuth(t *testing.T) {
118+
requireGatewayURL(t)
119+
requireHTTPBin(t)
118120
env := setupEnv(t)
119121
username := "e2e-consumer-keyauth"
120122
routeID := "e2e-route-keyauth"

test/e2e/debug_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
)
1616

1717
func TestDebugTrace_JSONOutput(t *testing.T) {
18+
requireGatewayURL(t)
19+
requireHTTPBin(t)
1820
env := setupEnv(t)
1921
routeID := "e2e-debug-trace-route"
2022
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })
@@ -51,6 +53,8 @@ func TestDebugTrace_JSONOutput(t *testing.T) {
5153
}
5254

5355
func TestDebugTrace_WithMethod(t *testing.T) {
56+
requireGatewayURL(t)
57+
requireHTTPBin(t)
5458
env := setupEnv(t)
5559
routeID := "e2e-debug-trace-method"
5660
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })
@@ -93,6 +97,8 @@ func TestDebugTrace_WithMethod(t *testing.T) {
9397
}
9498

9599
func TestDebugTrace_WithHeaders(t *testing.T) {
100+
requireGatewayURL(t)
101+
requireHTTPBin(t)
96102
env := setupEnv(t)
97103
routeID := "e2e-debug-trace-headers"
98104
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })
@@ -124,6 +130,8 @@ func TestDebugTrace_WithHeaders(t *testing.T) {
124130
}
125131

126132
func TestDebugTrace_WithHost(t *testing.T) {
133+
requireGatewayURL(t)
134+
requireHTTPBin(t)
127135
env := setupEnv(t)
128136
routeID := "e2e-debug-trace-host"
129137
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })
@@ -158,6 +166,8 @@ func TestDebugTrace_WithHost(t *testing.T) {
158166
}
159167

160168
func TestDebugTrace_WithPath(t *testing.T) {
169+
requireGatewayURL(t)
170+
requireHTTPBin(t)
161171
env := setupEnv(t)
162172
routeID := "e2e-debug-trace-path"
163173
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })
@@ -199,6 +209,7 @@ func TestDebugTrace_WithPath(t *testing.T) {
199209
}
200210

201211
func TestDebugTrace_NonexistentRoute(t *testing.T) {
212+
requireGatewayURL(t)
202213
env := setupEnv(t)
203214

204215
_, _, err := runA7WithEnv(env, "debug", "trace", "nonexistent-route-12345",
@@ -210,6 +221,8 @@ func TestDebugTrace_NonexistentRoute(t *testing.T) {
210221
}
211222

212223
func TestDebugTrace_YAMLOutput(t *testing.T) {
224+
requireGatewayURL(t)
225+
requireHTTPBin(t)
213226
env := setupEnv(t)
214227
routeID := "e2e-debug-trace-yaml"
215228
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })

test/e2e/route_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,8 @@ func TestRoute_ListWithLabel(t *testing.T) {
237237
}
238238

239239
func TestRoute_TrafficForwarding(t *testing.T) {
240+
requireGatewayURL(t)
241+
requireHTTPBin(t)
240242
env := setupEnv(t)
241243
routeID := "e2e-route-traffic"
242244
t.Cleanup(func() { deleteRouteViaAdmin(t, routeID) })

test/e2e/setup_test.go

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
// Package e2e provides end-to-end tests for the a7 CLI.
44
// These tests run against a real API7 Enterprise Edition instance and require
5-
// the following environment to be available:
5+
// the following environment variables:
66
//
7-
// - API7 EE Dashboard API at A7_ADMIN_URL (default: https://127.0.0.1:7443)
8-
// - API7 EE Gateway at A7_GATEWAY_URL (default: http://127.0.0.1:9080)
9-
// - httpbin at HTTPBIN_URL (default: http://127.0.0.1:8080)
7+
// - A7_ADMIN_URL: API7 EE Dashboard/control-plane URL (required)
8+
// - A7_TOKEN: API7 EE access token (required)
9+
// - A7_GATEWAY_GROUP: Gateway group name (default: "default")
10+
// - A7_GATEWAY_URL: Gateway data-plane URL (optional — gateway traffic tests skipped if empty)
11+
// - HTTPBIN_URL: httpbin URL (optional — traffic forwarding tests skipped if empty)
1012
//
1113
// Run with: go test -v -tags e2e -count=1 -timeout 10m ./test/e2e/...
1214
package e2e
@@ -42,15 +44,20 @@ var (
4244
)
4345

4446
func TestMain(m *testing.M) {
45-
adminURL = envOrDefault("A7_ADMIN_URL", "https://127.0.0.1:7443")
46-
gatewayURL = envOrDefault("A7_GATEWAY_URL", "http://127.0.0.1:9080")
47-
httpbinURL = envOrDefault("HTTPBIN_URL", "http://127.0.0.1:8080")
47+
adminURL = envOrDefault("A7_ADMIN_URL", "")
48+
gatewayURL = envOrDefault("A7_GATEWAY_URL", "")
49+
httpbinURL = envOrDefault("HTTPBIN_URL", "")
4850
adminToken = envOrDefault("A7_TOKEN", "")
4951

5052
if g := os.Getenv("A7_GATEWAY_GROUP"); g != "" {
5153
gatewayGroup = g
5254
}
5355

56+
if adminURL == "" {
57+
fmt.Fprintln(os.Stderr, "A7_ADMIN_URL environment variable is required for E2E tests")
58+
os.Exit(1)
59+
}
60+
5461
if adminToken == "" {
5562
fmt.Fprintln(os.Stderr, "A7_TOKEN environment variable is required for E2E tests")
5663
os.Exit(1)
@@ -230,3 +237,17 @@ func resolveModuleRoot() (string, error) {
230237
}
231238
return filepath.Dir(gomod), nil
232239
}
240+
241+
func requireGatewayURL(t *testing.T) {
242+
t.Helper()
243+
if gatewayURL == "" {
244+
t.Skip("A7_GATEWAY_URL not set — skipping gateway traffic test")
245+
}
246+
}
247+
248+
func requireHTTPBin(t *testing.T) {
249+
t.Helper()
250+
if httpbinURL == "" {
251+
t.Skip("HTTPBIN_URL not set — skipping httpbin-dependent test")
252+
}
253+
}

0 commit comments

Comments
 (0)