Skip to content

Commit 8795d04

Browse files
committed
refactor: Abstract config renderers behind a generic interface
1 parent 1dd3e51 commit 8795d04

14 files changed

+197
-162
lines changed

internal/renderer/admin_render.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,16 @@ import (
1010
opdefault "github.com/l7mp/stunner-gateway-operator/pkg/config"
1111
)
1212

13-
func (r *DefaultRenderer) renderAdmin(c *RenderContext) (*stnrconfv1.AdminConfig, error) {
14-
// r.log.V(4).Info("renderAdmin", "gateway-config", store.GetObjectKey(c.gwConf))
13+
var _ configRenderer = &adminRenderer{}
14+
15+
type adminRenderer struct{}
16+
17+
func newAdminRenderer() configRenderer {
18+
return &adminRenderer{}
19+
}
20+
21+
func (r *adminRenderer) render(c *RenderContext) (stnrconfv1.Config, error) {
22+
c.log.V(8).Info("renderAdmin (**default**)", "gateway-config", store.GetObjectKey(c.gwConf))
1523

1624
loglevel := stnrconfv1.DefaultLogLevel
1725
if c.gwConf.Spec.LogLevel != nil {
@@ -40,7 +48,7 @@ func (r *DefaultRenderer) renderAdmin(c *RenderContext) (*stnrconfv1.AdminConfig
4048
return nil, err
4149
}
4250

43-
r.log.V(2).Info("Render admin-config ready", "gateway-config", store.GetObjectKey(c.gwConf),
51+
c.log.V(2).Info("Render admin-config ready", "gateway-config", store.GetObjectKey(c.gwConf),
4452
"result", fmt.Sprintf("%#v", admin))
4553

4654
return &admin, nil

internal/renderer/admin_render_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"github.com/stretchr/testify/assert"
99

10-
"github.com/go-logr/logr"
1110
corev1 "k8s.io/api/core/v1"
1211

1312
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -36,7 +35,7 @@ func TestRenderAdminRender(t *testing.T) {
3635

3736
gc, err := r.getGatewayClass()
3837
assert.NoError(t, err, "gw-class not found")
39-
c := &RenderContext{gc: gc, log: logr.Discard()}
38+
c := &RenderContext{gc: gc, log: log}
4039
c.gwConf, err = r.getGatewayConfig4Class(c)
4140
assert.NoError(t, err, "gw-conf found")
4241

@@ -64,7 +63,7 @@ func TestRenderAdminRender(t *testing.T) {
6463

6564
gc, err := r.getGatewayClass()
6665
assert.NoError(t, err, "gw-class not found")
67-
c := &RenderContext{gc: gc, log: logr.Discard()}
66+
c := &RenderContext{gc: gc, log: log}
6867
c.gwConf, err = r.getGatewayConfig4Class(c)
6968
assert.NoError(t, err, "gw-conf found")
7069
c.dp, err = getDataplane(c)
@@ -109,7 +108,7 @@ func TestRenderAdminRender(t *testing.T) {
109108

110109
gc, err := r.getGatewayClass()
111110
assert.NoError(t, err, "gw-class not found")
112-
c := &RenderContext{gc: gc, log: logr.Discard()}
111+
c := &RenderContext{gc: gc, log: log}
113112
c.gwConf, err = r.getGatewayConfig4Class(c)
114113
assert.NoError(t, err, "gw-conf found")
115114
c.dp, err = getDataplane(c)

internal/renderer/auth_render.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@ import (
1010
"github.com/l7mp/stunner-gateway-operator/internal/store"
1111
)
1212

13-
func (r *DefaultRenderer) renderAuth(c *RenderContext) (*stnrconfv1.AuthConfig, error) {
13+
var _ configRenderer = &authRenderer{}
14+
15+
type authRenderer struct{}
16+
17+
func newAuthRenderer() configRenderer {
18+
return &authRenderer{}
19+
}
20+
21+
func (r *authRenderer) render(c *RenderContext) (stnrconfv1.Config, error) {
1422
// external auth ref overrides inline refs
1523
if c.gwConf.Spec.AuthRef != nil {
1624
return r.renderExternalAuth(c)
@@ -19,7 +27,7 @@ func (r *DefaultRenderer) renderAuth(c *RenderContext) (*stnrconfv1.AuthConfig,
1927
return r.renderInlineAuth(c)
2028
}
2129

22-
func (r *DefaultRenderer) renderInlineAuth(c *RenderContext) (*stnrconfv1.AuthConfig, error) {
30+
func (r *authRenderer) renderInlineAuth(c *RenderContext) (stnrconfv1.Config, error) {
2331
realm := stnrconfv1.DefaultRealm
2432
if c.gwConf.Spec.Realm != nil {
2533
realm = *c.gwConf.Spec.Realm
@@ -58,15 +66,15 @@ func (r *DefaultRenderer) renderInlineAuth(c *RenderContext) (*stnrconfv1.AuthCo
5866
return nil, NewCriticalError(InvalidAuthConfig)
5967
}
6068

61-
r.log.V(2).Info("Rendering inline auth config ready", "gateway-config",
69+
c.log.V(2).Info("Rendering inline auth config ready", "gateway-config",
6270
store.GetObjectKey(c.gwConf), "result", fmt.Sprintf("%#v", auth))
6371

6472
return &auth, nil
6573
}
6674

67-
func (r *DefaultRenderer) renderExternalAuth(c *RenderContext) (*stnrconfv1.AuthConfig, error) {
75+
func (r *authRenderer) renderExternalAuth(c *RenderContext) (stnrconfv1.Config, error) {
6876
gwConf := c.gwConf
69-
// r.log.V(4).Info("renderExternalAuth", "gateway-config", store.GetObjectKey(gwConf))
77+
// c.log.V(4).Info("renderExternalAuth", "gateway-config", store.GetObjectKey(gwConf))
7078

7179
realm := stnrconfv1.DefaultRealm
7280
if gwConf.Spec.Realm != nil {
@@ -82,21 +90,21 @@ func (r *DefaultRenderer) renderExternalAuth(c *RenderContext) (*stnrconfv1.Auth
8290
n, err := getSecretNameFromRef(ref, gwConf.GetNamespace())
8391
if err != nil {
8492
// report concrete error here, return a critical error
85-
r.log.Info("Invalid auth Secret", "gateway-config", store.GetObjectKey(c.gwConf),
93+
c.log.Info("Invalid auth Secret", "gateway-config", store.GetObjectKey(c.gwConf),
8694
"ref", dumpSecretRef(ref, gwConf.GetNamespace()), "error", err.Error())
8795
return nil, NewCriticalError(ExternalAuthCredentialsNotFound)
8896
}
8997

9098
secret := store.AuthSecrets.GetObject(n)
9199
if secret == nil {
92100
// report concrete error here, return a critical error
93-
r.log.Info("Auth Secret not found", "gateway-config", store.GetObjectKey(c.gwConf),
101+
c.log.Info("Auth Secret not found", "gateway-config", store.GetObjectKey(c.gwConf),
94102
"ref", dumpSecretRef(ref, gwConf.GetNamespace()), "name", n)
95103
return nil, NewCriticalError(ExternalAuthCredentialsNotFound)
96104
}
97105

98106
if secret.Type != corev1.SecretTypeOpaque {
99-
r.log.Info("Expecting Secret of type \"Opaque\" (trying to use Secret anyway)",
107+
c.log.Info("Expecting Secret of type \"Opaque\" (trying to use Secret anyway)",
100108
"gateway-config", store.GetObjectKey(c.gwConf), "secret", n.String())
101109
}
102110

@@ -144,7 +152,7 @@ func (r *DefaultRenderer) renderExternalAuth(c *RenderContext) (*stnrconfv1.Auth
144152
return nil, NewCriticalError(InvalidAuthConfig)
145153
}
146154

147-
r.log.V(2).Info("Finished rendering external auth config", "gateway-config", store.GetObjectKey(gwConf),
155+
c.log.V(2).Info("Finished rendering external auth config", "gateway-config", store.GetObjectKey(gwConf),
148156
"secret", n.String(), "result", fmt.Sprintf("%#v", auth))
149157

150158
return &auth, nil

internal/renderer/auth_render_test.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77

88
"github.com/stretchr/testify/assert"
99

10-
"github.com/go-logr/logr"
1110
corev1 "k8s.io/api/core/v1"
1211
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
1312

@@ -28,7 +27,7 @@ func TestRenderAuthRender(t *testing.T) {
2827
tester: func(t *testing.T, r *DefaultRenderer) {
2928
gc, err := r.getGatewayClass()
3029
assert.NoError(t, err, "gw-class found")
31-
c := &RenderContext{gc: gc, log: logr.Discard()}
30+
c := &RenderContext{gc: gc, log: log}
3231
c.gwConf, err = r.getGatewayConfig4Class(c)
3332
assert.NoError(t, err, "gw-conf found")
3433

@@ -60,7 +59,7 @@ func TestRenderAuthRender(t *testing.T) {
6059
tester: func(t *testing.T, r *DefaultRenderer) {
6160
gc, err := r.getGatewayClass()
6261
assert.NoError(t, err, "gw-class found")
63-
c := &RenderContext{gc: gc, log: logr.Discard()}
62+
c := &RenderContext{gc: gc, log: log}
6463
c.gwConf, err = r.getGatewayConfig4Class(c)
6564
assert.NoError(t, err, "gw-conf found")
6665

@@ -87,7 +86,7 @@ func TestRenderAuthRender(t *testing.T) {
8786
tester: func(t *testing.T, r *DefaultRenderer) {
8887
gc, err := r.getGatewayClass()
8988
assert.NoError(t, err, "gw-class found")
90-
c := &RenderContext{gc: gc, log: logr.Discard()}
89+
c := &RenderContext{gc: gc, log: log}
9190
c.gwConf, err = r.getGatewayConfig4Class(c)
9291
assert.NoError(t, err, "gw-conf found")
9392

@@ -111,7 +110,7 @@ func TestRenderAuthRender(t *testing.T) {
111110
tester: func(t *testing.T, r *DefaultRenderer) {
112111
gc, err := r.getGatewayClass()
113112
assert.NoError(t, err, "gw-class found")
114-
c := &RenderContext{gc: gc, log: logr.Discard()}
113+
c := &RenderContext{gc: gc, log: log}
115114
c.gwConf, err = r.getGatewayConfig4Class(c)
116115
assert.NoError(t, err, "gw-conf found")
117116

@@ -135,7 +134,7 @@ func TestRenderAuthRender(t *testing.T) {
135134
tester: func(t *testing.T, r *DefaultRenderer) {
136135
gc, err := r.getGatewayClass()
137136
assert.NoError(t, err, "gw-class found")
138-
c := &RenderContext{gc: gc, log: logr.Discard()}
137+
c := &RenderContext{gc: gc, log: log}
139138
c.gwConf, err = r.getGatewayConfig4Class(c)
140139
assert.NoError(t, err, "gw-conf found")
141140

@@ -161,7 +160,7 @@ func TestRenderAuthRender(t *testing.T) {
161160
tester: func(t *testing.T, r *DefaultRenderer) {
162161
gc, err := r.getGatewayClass()
163162
assert.NoError(t, err, "gw-class found")
164-
c := &RenderContext{gc: gc, log: logr.Discard()}
163+
c := &RenderContext{gc: gc, log: log}
165164
c.gwConf, err = r.getGatewayConfig4Class(c)
166165
assert.NoError(t, err, "gw-conf found")
167166

@@ -188,7 +187,7 @@ func TestRenderAuthRender(t *testing.T) {
188187
tester: func(t *testing.T, r *DefaultRenderer) {
189188
gc, err := r.getGatewayClass()
190189
assert.NoError(t, err, "gw-class found")
191-
c := &RenderContext{gc: gc, log: logr.Discard()}
190+
c := &RenderContext{gc: gc, log: log}
192191
c.gwConf, err = r.getGatewayConfig4Class(c)
193192
assert.NoError(t, err, "gw-conf found")
194193

@@ -214,7 +213,7 @@ func TestRenderAuthRender(t *testing.T) {
214213
tester: func(t *testing.T, r *DefaultRenderer) {
215214
gc, err := r.getGatewayClass()
216215
assert.NoError(t, err, "gw-class found")
217-
c := &RenderContext{gc: gc, log: logr.Discard()}
216+
c := &RenderContext{gc: gc, log: log}
218217
c.gwConf, err = r.getGatewayConfig4Class(c)
219218
assert.NoError(t, err, "gw-conf found")
220219

@@ -244,7 +243,7 @@ func TestRenderAuthRender(t *testing.T) {
244243
tester: func(t *testing.T, r *DefaultRenderer) {
245244
gc, err := r.getGatewayClass()
246245
assert.NoError(t, err, "gw-class found")
247-
c := &RenderContext{gc: gc, log: logr.Discard()}
246+
c := &RenderContext{gc: gc, log: log}
248247
c.gwConf, err = r.getGatewayConfig4Class(c)
249248
assert.NoError(t, err, "gw-conf found")
250249

@@ -280,7 +279,7 @@ func TestRenderAuthRender(t *testing.T) {
280279
tester: func(t *testing.T, r *DefaultRenderer) {
281280
gc, err := r.getGatewayClass()
282281
assert.NoError(t, err, "gw-class found")
283-
c := &RenderContext{gc: gc, log: logr.Discard()}
282+
c := &RenderContext{gc: gc, log: log}
284283
c.gwConf, err = r.getGatewayConfig4Class(c)
285284
assert.NoError(t, err, "gw-conf found")
286285

@@ -322,7 +321,7 @@ func TestRenderAuthRender(t *testing.T) {
322321
tester: func(t *testing.T, r *DefaultRenderer) {
323322
gc, err := r.getGatewayClass()
324323
assert.NoError(t, err, "gw-class found")
325-
c := &RenderContext{gc: gc, log: logr.Discard()}
324+
c := &RenderContext{gc: gc, log: log}
326325
c.gwConf, err = r.getGatewayConfig4Class(c)
327326
assert.NoError(t, err, "gw-conf found")
328327

@@ -357,7 +356,7 @@ func TestRenderAuthRender(t *testing.T) {
357356
tester: func(t *testing.T, r *DefaultRenderer) {
358357
gc, err := r.getGatewayClass()
359358
assert.NoError(t, err, "gw-class found")
360-
c := &RenderContext{gc: gc, log: logr.Discard()}
359+
c := &RenderContext{gc: gc, log: log}
361360
c.gwConf, err = r.getGatewayConfig4Class(c)
362361
assert.NoError(t, err, "gw-conf found")
363362

@@ -388,7 +387,7 @@ func TestRenderAuthRender(t *testing.T) {
388387
tester: func(t *testing.T, r *DefaultRenderer) {
389388
gc, err := r.getGatewayClass()
390389
assert.NoError(t, err, "gw-class found")
391-
c := &RenderContext{gc: gc, log: logr.Discard()}
390+
c := &RenderContext{gc: gc, log: log}
392391
c.gwConf, err = r.getGatewayConfig4Class(c)
393392
assert.NoError(t, err, "gw-conf found")
394393

@@ -418,7 +417,7 @@ func TestRenderAuthRender(t *testing.T) {
418417
tester: func(t *testing.T, r *DefaultRenderer) {
419418
gc, err := r.getGatewayClass()
420419
assert.NoError(t, err, "gw-class found")
421-
c := &RenderContext{gc: gc, log: logr.Discard()}
420+
c := &RenderContext{gc: gc, log: log}
422421
c.gwConf, err = r.getGatewayConfig4Class(c)
423422
assert.NoError(t, err, "gw-conf found")
424423

@@ -446,7 +445,7 @@ func TestRenderAuthRender(t *testing.T) {
446445
tester: func(t *testing.T, r *DefaultRenderer) {
447446
gc, err := r.getGatewayClass()
448447
assert.NoError(t, err, "gw-class found")
449-
c := &RenderContext{gc: gc, log: logr.Discard()}
448+
c := &RenderContext{gc: gc, log: log}
450449
c.gwConf, err = r.getGatewayConfig4Class(c)
451450
assert.NoError(t, err, "gw-conf found")
452451

@@ -480,7 +479,7 @@ func TestRenderAuthRender(t *testing.T) {
480479
tester: func(t *testing.T, r *DefaultRenderer) {
481480
gc, err := r.getGatewayClass()
482481
assert.NoError(t, err, "gw-class found")
483-
c := &RenderContext{gc: gc, log: logr.Discard()}
482+
c := &RenderContext{gc: gc, log: log}
484483
c.gwConf, err = r.getGatewayConfig4Class(c)
485484
assert.NoError(t, err, "gw-conf found")
486485

@@ -520,7 +519,7 @@ func TestRenderAuthRender(t *testing.T) {
520519
tester: func(t *testing.T, r *DefaultRenderer) {
521520
gc, err := r.getGatewayClass()
522521
assert.NoError(t, err, "gw-class found")
523-
c := &RenderContext{gc: gc, log: logr.Discard()}
522+
c := &RenderContext{gc: gc, log: log}
524523
c.gwConf, err = r.getGatewayConfig4Class(c)
525524
assert.NoError(t, err, "gw-conf found")
526525

internal/renderer/dataplane_util_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88

99
"github.com/stretchr/testify/assert"
1010

11-
"github.com/go-logr/logr"
1211
corev1 "k8s.io/api/core/v1"
1312
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1413
"k8s.io/apimachinery/pkg/labels"
@@ -38,7 +37,7 @@ func TestRenderDataplaneUtil(t *testing.T) {
3837
tester: func(t *testing.T, r *DefaultRenderer) {
3938
gc, err := r.getGatewayClass()
4039
assert.NoError(t, err, "gw-class found")
41-
c := &RenderContext{gc: gc, gws: store.NewGatewayStore(), log: logr.Discard()}
40+
c := &RenderContext{gc: gc, gws: store.NewGatewayStore(), log: log}
4241
c.gwConf, err = r.getGatewayConfig4Class(c)
4342
assert.NoError(t, err, "gw-conf found")
4443
assert.Equal(t, "gatewayconfig-ok", c.gwConf.GetName(),
@@ -193,7 +192,7 @@ func TestRenderDataplaneUtil(t *testing.T) {
193192
tester: func(t *testing.T, r *DefaultRenderer) {
194193
gc, err := r.getGatewayClass()
195194
assert.NoError(t, err, "gw-class found")
196-
c := &RenderContext{gc: gc, gws: store.NewGatewayStore(), log: logr.Discard()}
195+
c := &RenderContext{gc: gc, gws: store.NewGatewayStore(), log: log}
197196
c.gwConf, err = r.getGatewayConfig4Class(c)
198197
assert.NoError(t, err, "gw-conf found")
199198
assert.Equal(t, "gatewayconfig-ok", c.gwConf.GetName(),
@@ -343,7 +342,7 @@ func TestRenderDataplaneUtil(t *testing.T) {
343342
tester: func(t *testing.T, r *DefaultRenderer) {
344343
gc, err := r.getGatewayClass()
345344
assert.NoError(t, err, "gw-class found")
346-
c := &RenderContext{gc: gc, gws: store.NewGatewayStore(), log: logr.Discard()}
345+
c := &RenderContext{gc: gc, gws: store.NewGatewayStore(), log: log}
347346
c.gwConf, err = r.getGatewayConfig4Class(c)
348347
assert.NoError(t, err, "gw-conf found")
349348
assert.Equal(t, "gatewayconfig-ok", c.gwConf.GetName(),

internal/renderer/gateway_util_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88

99
"github.com/stretchr/testify/assert"
1010

11-
"github.com/go-logr/logr"
1211
corev1 "k8s.io/api/core/v1"
1312
meta "k8s.io/apimachinery/pkg/api/meta"
1413
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -38,7 +37,7 @@ func TestRenderGatewayUtil(t *testing.T) {
3837
tester: func(t *testing.T, r *DefaultRenderer) {
3938
gc, err := r.getGatewayClass()
4039
assert.NoError(t, err, "gw-class not found")
41-
c := &RenderContext{gc: gc, log: logr.Discard()}
40+
c := &RenderContext{gc: gc, log: log}
4241

4342
gws := r.getGateways4Class(c)
4443
assert.Len(t, gws, 0, "gw found")
@@ -60,7 +59,7 @@ func TestRenderGatewayUtil(t *testing.T) {
6059
tester: func(t *testing.T, r *DefaultRenderer) {
6160
gc, err := r.getGatewayClass()
6261
assert.NoError(t, err, "gw-class not found")
63-
c := &RenderContext{gc: gc, log: logr.Discard()}
62+
c := &RenderContext{gc: gc, log: log}
6463

6564
gws := r.getGateways4Class(c)
6665
assert.Len(t, gws, 2, "gw found")
@@ -85,7 +84,7 @@ func TestRenderGatewayUtil(t *testing.T) {
8584
tester: func(t *testing.T, r *DefaultRenderer) {
8685
gc, err := r.getGatewayClass()
8786
assert.NoError(t, err, "gw-class not found")
88-
c := &RenderContext{gc: gc, log: logr.Discard()}
87+
c := &RenderContext{gc: gc, log: log}
8988

9089
gws := r.getGateways4Class(c)
9190
assert.Len(t, gws, 1, "gw found")
@@ -135,7 +134,7 @@ func TestRenderGatewayUtil(t *testing.T) {
135134
tester: func(t *testing.T, r *DefaultRenderer) {
136135
gc, err := r.getGatewayClass()
137136
assert.NoError(t, err, "gw-class not found")
138-
c := &RenderContext{gc: gc, log: logr.Discard()}
137+
c := &RenderContext{gc: gc, log: log}
139138

140139
gws := r.getGateways4Class(c)
141140
assert.Len(t, gws, 1, "gw found")
@@ -184,7 +183,7 @@ func TestRenderGatewayUtil(t *testing.T) {
184183
tester: func(t *testing.T, r *DefaultRenderer) {
185184
gc, err := r.getGatewayClass()
186185
assert.NoError(t, err, "gw-class found")
187-
c := &RenderContext{gc: gc, log: logr.Discard()}
186+
c := &RenderContext{gc: gc, log: log}
188187
c.gwConf, err = r.getGatewayConfig4Class(c)
189188
assert.NoError(t, err, "gw-conf found")
190189

@@ -304,7 +303,7 @@ func TestRenderGatewayUtil(t *testing.T) {
304303
tester: func(t *testing.T, r *DefaultRenderer) {
305304
gc, err := r.getGatewayClass()
306305
assert.NoError(t, err, "gw-class found")
307-
c := &RenderContext{gc: gc, log: logr.Discard()}
306+
c := &RenderContext{gc: gc, log: log}
308307
c.gwConf, err = r.getGatewayConfig4Class(c)
309308
assert.NoError(t, err, "gw-conf found")
310309

0 commit comments

Comments
 (0)