@@ -226,6 +226,32 @@ func TestCompositeManager_GetPreXDSHookClient(t *testing.T) {
226226 assert .Nil (t , client )
227227 assert .Contains (t , err .Error (), "connection failed" )
228228 })
229+
230+ t .Run ("skips erroring child when failOpen is true" , func (t * testing.T ) {
231+ mockClient := & mockXDSHookClient {}
232+ composite := NewCompositeManager ([]namedManager {
233+ {name : "mgr1" , manager : & mockManager {preHookErr : fmt .Errorf ("connection failed" ), failOpen : true }},
234+ {name : "mgr2" , manager : & mockManager {preHookClient : mockClient }},
235+ })
236+ client , err := composite .GetPreXDSHookClient (egv1a1 .XDSRoute )
237+ require .NoError (t , err )
238+ require .NotNil (t , client )
239+ compositeClient , ok := client .(* compositeXDSHookClient )
240+ assert .True (t , ok )
241+ require .Len (t , compositeClient .entries , 1 )
242+ assert .Equal (t , "mgr2" , compositeClient .entries [0 ].name )
243+ })
244+
245+ t .Run ("returns error when failOpen is false" , func (t * testing.T ) {
246+ mockClient := & mockXDSHookClient {}
247+ composite := NewCompositeManager ([]namedManager {
248+ {name : "mgr1" , manager : & mockManager {preHookErr : fmt .Errorf ("connection failed" ), failOpen : false }},
249+ {name : "mgr2" , manager : & mockManager {preHookClient : mockClient }},
250+ })
251+ client , err := composite .GetPreXDSHookClient (egv1a1 .XDSRoute )
252+ require .Error (t , err )
253+ assert .Nil (t , client )
254+ })
229255}
230256
231257func TestCompositeManager_GetPostXDSHookClient (t * testing.T ) {
@@ -254,13 +280,30 @@ func TestCompositeManager_GetPostXDSHookClient(t *testing.T) {
254280}
255281
256282func TestCompositeManager_GetPostXDSHookClient_Error (t * testing.T ) {
257- composite := NewCompositeManager ([]namedManager {
258- {name : "mgr1" , manager : & mockManager {postHookErr : fmt .Errorf ("connection failed" )}},
283+ t .Run ("returns error when failOpen is false" , func (t * testing.T ) {
284+ composite := NewCompositeManager ([]namedManager {
285+ {name : "mgr1" , manager : & mockManager {postHookErr : fmt .Errorf ("connection failed" )}},
286+ })
287+ client , err := composite .GetPostXDSHookClient (egv1a1 .XDSRoute )
288+ require .Error (t , err )
289+ assert .Nil (t , client )
290+ assert .Contains (t , err .Error (), "connection failed" )
291+ })
292+
293+ t .Run ("skips erroring child when failOpen is true" , func (t * testing.T ) {
294+ mockClient := & mockXDSHookClient {}
295+ composite := NewCompositeManager ([]namedManager {
296+ {name : "mgr1" , manager : & mockManager {postHookErr : fmt .Errorf ("connection failed" ), failOpen : true }},
297+ {name : "mgr2" , manager : & mockManager {postHookClient : mockClient }},
298+ })
299+ client , err := composite .GetPostXDSHookClient (egv1a1 .XDSRoute )
300+ require .NoError (t , err )
301+ require .NotNil (t , client )
302+ compositeClient , ok := client .(* compositeXDSHookClient )
303+ assert .True (t , ok )
304+ require .Len (t , compositeClient .entries , 1 )
305+ assert .Equal (t , "mgr2" , compositeClient .entries [0 ].name )
259306 })
260- client , err := composite .GetPostXDSHookClient (egv1a1 .XDSRoute )
261- require .Error (t , err )
262- assert .Nil (t , client )
263- assert .Contains (t , err .Error (), "connection failed" )
264307}
265308
266309func TestCompositeManager_CleanupHookConns (t * testing.T ) {
0 commit comments