Skip to content

Commit 8c8a814

Browse files
committed
Simplified and unified client getter and tests
Signed-off-by: Marc Navarro Sonnenfeld <marcnavarro@tetrate.io>
1 parent 0a6fa17 commit 8c8a814

2 files changed

Lines changed: 30 additions & 33 deletions

File tree

internal/extension/registry/composite_manager.go

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -111,55 +111,54 @@ func (c *CompositeManager) GetTranslationHookConfig() *egv1a1.TranslationConfig
111111
return merged
112112
}
113113

114+
// hookClientGetter abstracts GetPreXDSHookClient/GetPostXDSHookClient to allow shared collection logic.
115+
type hookClientGetter func(extTypes.Manager, egv1a1.XDSTranslatorHook) (extTypes.XDSHookClient, error)
116+
114117
// GetPreXDSHookClient returns a compositeXDSHookClient that chains all child clients
115118
// for the given hook type.
116119
func (c *CompositeManager) GetPreXDSHookClient(xdsHookType egv1a1.XDSTranslatorHook) (extTypes.XDSHookClient, error) {
120+
return c.collectHookClients(xdsHookType, func(m extTypes.Manager, h egv1a1.XDSTranslatorHook) (extTypes.XDSHookClient, error) {
121+
return m.GetPreXDSHookClient(h)
122+
}, false)
123+
}
124+
125+
// GetPostXDSHookClient returns a compositeXDSHookClient that chains all child clients
126+
// for the given hook type.
127+
func (c *CompositeManager) GetPostXDSHookClient(xdsHookType egv1a1.XDSTranslatorHook) (extTypes.XDSHookClient, error) {
128+
return c.collectHookClients(xdsHookType, func(m extTypes.Manager, h egv1a1.XDSTranslatorHook) (extTypes.XDSHookClient, error) {
129+
return m.GetPostXDSHookClient(h)
130+
}, true)
131+
}
132+
133+
// collectHookClients iterates over all child managers, collects hook clients via the given getter,
134+
// and returns a compositeXDSHookClient. If includeTranslationConfig is true, each entry's
135+
// translationConfig is populated from the manager.
136+
func (c *CompositeManager) collectHookClients(
137+
xdsHookType egv1a1.XDSTranslatorHook,
138+
getter hookClientGetter,
139+
includeTranslationConfig bool,
140+
) (extTypes.XDSHookClient, error) {
117141
var entries []hookClientEntry
118142
for _, nm := range c.managers {
119-
client, err := nm.manager.GetPreXDSHookClient(xdsHookType)
143+
client, err := getter(nm.manager, xdsHookType)
120144
if err != nil {
121145
if nm.manager.FailOpen() {
122146
continue
123147
}
124148
return nil, err
125149
}
126150
if client != nil {
127-
entries = append(entries, hookClientEntry{
151+
entry := hookClientEntry{
128152
name: nm.name,
129153
client: client,
130154
failOpen: nm.manager.FailOpen(),
131155
resourceGVKSet: nm.resourceGVKSet,
132156
policyGVKSet: nm.policyGVKSet,
133-
})
134-
}
135-
}
136-
if len(entries) == 0 {
137-
return nil, nil
138-
}
139-
return &compositeXDSHookClient{entries: entries}, nil
140-
}
141-
142-
// GetPostXDSHookClient returns a compositeXDSHookClient that chains all child clients
143-
// for the given hook type.
144-
func (c *CompositeManager) GetPostXDSHookClient(xdsHookType egv1a1.XDSTranslatorHook) (extTypes.XDSHookClient, error) {
145-
var entries []hookClientEntry
146-
for _, nm := range c.managers {
147-
client, err := nm.manager.GetPostXDSHookClient(xdsHookType)
148-
if err != nil {
149-
if nm.manager.FailOpen() {
150-
continue
151157
}
152-
return nil, err
153-
}
154-
if client != nil {
155-
entries = append(entries, hookClientEntry{
156-
name: nm.name,
157-
client: client,
158-
failOpen: nm.manager.FailOpen(),
159-
resourceGVKSet: nm.resourceGVKSet,
160-
policyGVKSet: nm.policyGVKSet,
161-
translationConfig: nm.manager.GetTranslationHookConfig(),
162-
})
158+
if includeTranslationConfig {
159+
entry.translationConfig = nm.manager.GetTranslationHookConfig()
160+
}
161+
entries = append(entries, entry)
163162
}
164163
}
165164
if len(entries) == 0 {

internal/extension/registry/composite_manager_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,7 @@ func TestCompositeManager_GetPostXDSHookClient(t *testing.T) {
277277
assert.True(t, ok)
278278
assert.Len(t, compositeClient.entries, 2)
279279
})
280-
}
281280

282-
func TestCompositeManager_GetPostXDSHookClient_Error(t *testing.T) {
283281
t.Run("returns error when failOpen is false", func(t *testing.T) {
284282
composite := NewCompositeManager([]namedManager{
285283
{name: "mgr1", manager: &mockManager{postHookErr: fmt.Errorf("connection failed")}},

0 commit comments

Comments
 (0)