tests: stop using UpdateSubConnState (#6527)

This commit is contained in:
Doug Fawley 2023-08-09 13:56:05 -07:00 committed by GitHub
parent cea77bb0de
commit 8f51ca8f58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 50 deletions

View File

@ -1146,7 +1146,9 @@ type stateRecordingBalancer struct {
balancer.Balancer balancer.Balancer
} }
func (b *stateRecordingBalancer) UpdateSubConnState(sc balancer.SubConn, s balancer.SubConnState) {} func (b *stateRecordingBalancer) UpdateSubConnState(sc balancer.SubConn, s balancer.SubConnState) {
panic(fmt.Sprintf("UpdateSubConnState(%v, %+v) called unexpectedly", sc, s))
}
func (b *stateRecordingBalancer) Close() { func (b *stateRecordingBalancer) Close() {
b.Balancer.Close() b.Balancer.Close()

View File

@ -483,10 +483,6 @@ func (s) TestBalancerSwitch_Graceful(t *testing.T) {
}() }()
return nil return nil
}, },
UpdateSubConnState: func(bd *stub.BalancerData, sc balancer.SubConn, state balancer.SubConnState) {
bal := bd.Data.(balancer.Balancer)
bal.UpdateSubConnState(sc, state)
},
}) })
// Push a resolver update with the service config specifying our stub // Push a resolver update with the service config specifying our stub

View File

@ -87,6 +87,7 @@ func (b *testBalancer) UpdateClientConnState(state balancer.ClientConnState) err
// Only create a subconn at the first time. // Only create a subconn at the first time.
if b.sc == nil { if b.sc == nil {
var err error var err error
b.newSubConnOptions.StateListener = b.updateSubConnState
b.sc, err = b.cc.NewSubConn(state.ResolverState.Addresses, b.newSubConnOptions) b.sc, err = b.cc.NewSubConn(state.ResolverState.Addresses, b.newSubConnOptions)
if err != nil { if err != nil {
logger.Errorf("testBalancer: failed to NewSubConn: %v", err) logger.Errorf("testBalancer: failed to NewSubConn: %v", err)
@ -99,21 +100,17 @@ func (b *testBalancer) UpdateClientConnState(state balancer.ClientConnState) err
} }
func (b *testBalancer) UpdateSubConnState(sc balancer.SubConn, s balancer.SubConnState) { func (b *testBalancer) UpdateSubConnState(sc balancer.SubConn, s balancer.SubConnState) {
logger.Infof("testBalancer: UpdateSubConnState: %p, %v", sc, s) panic(fmt.Sprintf("UpdateSubConnState(%v, %+v) called unexpectedly", sc, s))
if b.sc != sc { }
logger.Infof("testBalancer: ignored state change because sc is not recognized")
return func (b *testBalancer) updateSubConnState(s balancer.SubConnState) {
} logger.Infof("testBalancer: updateSubConnState: %v", s)
if s.ConnectivityState == connectivity.Shutdown {
b.sc = nil
return
}
switch s.ConnectivityState { switch s.ConnectivityState {
case connectivity.Ready: case connectivity.Ready:
b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{sc: sc, bal: b}}) b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{bal: b}})
case connectivity.Idle: case connectivity.Idle:
b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{sc: sc, bal: b, idle: true}}) b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{bal: b, idle: true}})
case connectivity.Connecting: case connectivity.Connecting:
b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{err: balancer.ErrNoSubConnAvailable, bal: b}}) b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{err: balancer.ErrNoSubConnAvailable, bal: b}})
case connectivity.TransientFailure: case connectivity.TransientFailure:
@ -127,7 +124,6 @@ func (b *testBalancer) ExitIdle() {}
type picker struct { type picker struct {
err error err error
sc balancer.SubConn
bal *testBalancer bal *testBalancer
idle bool idle bool
} }
@ -137,14 +133,14 @@ func (p *picker) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
return balancer.PickResult{}, p.err return balancer.PickResult{}, p.err
} }
if p.idle { if p.idle {
p.sc.Connect() p.bal.sc.Connect()
return balancer.PickResult{}, balancer.ErrNoSubConnAvailable return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
} }
extraMD, _ := grpcutil.ExtraMetadata(info.Ctx) extraMD, _ := grpcutil.ExtraMetadata(info.Ctx)
info.Ctx = nil // Do not validate context. info.Ctx = nil // Do not validate context.
p.bal.pickInfos = append(p.bal.pickInfos, info) p.bal.pickInfos = append(p.bal.pickInfos, info)
p.bal.pickExtraMDs = append(p.bal.pickExtraMDs, extraMD) p.bal.pickExtraMDs = append(p.bal.pickExtraMDs, extraMD)
return balancer.PickResult{SubConn: p.sc, Done: func(d balancer.DoneInfo) { p.bal.doneInfo = append(p.bal.doneInfo, d) }}, nil return balancer.PickResult{SubConn: p.bal.sc, Done: func(d balancer.DoneInfo) { p.bal.doneInfo = append(p.bal.doneInfo, d) }}, nil
} }
func (s) TestCredsBundleFromBalancer(t *testing.T) { func (s) TestCredsBundleFromBalancer(t *testing.T) {
@ -397,16 +393,18 @@ func (s) TestAddressAttributesInNewSubConn(t *testing.T) {
// Only use the first address. // Only use the first address.
attr := attributes.New(testAttrKey, testAttrVal) attr := attributes.New(testAttrKey, testAttrVal)
addrs[0].Attributes = attr addrs[0].Attributes = attr
sc, err := bd.ClientConn.NewSubConn([]resolver.Address{addrs[0]}, balancer.NewSubConnOptions{}) var sc balancer.SubConn
sc, err := bd.ClientConn.NewSubConn([]resolver.Address{addrs[0]}, balancer.NewSubConnOptions{
StateListener: func(state balancer.SubConnState) {
bd.ClientConn.UpdateState(balancer.State{ConnectivityState: state.ConnectivityState, Picker: &aiPicker{result: balancer.PickResult{SubConn: sc}, err: state.ConnectionError}})
},
})
if err != nil { if err != nil {
return err return err
} }
sc.Connect() sc.Connect()
return nil return nil
}, },
UpdateSubConnState: func(bd *stub.BalancerData, sc balancer.SubConn, state balancer.SubConnState) {
bd.ClientConn.UpdateState(balancer.State{ConnectivityState: state.ConnectivityState, Picker: &aiPicker{result: balancer.PickResult{SubConn: sc}, err: state.ConnectionError}})
},
} }
stub.Register(attrBalancerName, bf) stub.Register(attrBalancerName, bf)
t.Logf("Registered balancer %s...", attrBalancerName) t.Logf("Registered balancer %s...", attrBalancerName)
@ -483,18 +481,20 @@ func (s) TestMetadataInAddressAttributes(t *testing.T) {
return nil return nil
} }
// Only use the first address. // Only use the first address.
var sc balancer.SubConn
sc, err := bd.ClientConn.NewSubConn([]resolver.Address{ sc, err := bd.ClientConn.NewSubConn([]resolver.Address{
imetadata.Set(addrs[0], metadata.Pairs(testMDKey, testMDValue)), imetadata.Set(addrs[0], metadata.Pairs(testMDKey, testMDValue)),
}, balancer.NewSubConnOptions{}) }, balancer.NewSubConnOptions{
StateListener: func(state balancer.SubConnState) {
bd.ClientConn.UpdateState(balancer.State{ConnectivityState: state.ConnectivityState, Picker: &aiPicker{result: balancer.PickResult{SubConn: sc}, err: state.ConnectionError}})
},
})
if err != nil { if err != nil {
return err return err
} }
sc.Connect() sc.Connect()
return nil return nil
}, },
UpdateSubConnState: func(bd *stub.BalancerData, sc balancer.SubConn, state balancer.SubConnState) {
bd.ClientConn.UpdateState(balancer.State{ConnectivityState: state.ConnectivityState, Picker: &aiPicker{result: balancer.PickResult{SubConn: sc}, err: state.ConnectionError}})
},
} }
stub.Register(mdBalancerName, bf) stub.Register(mdBalancerName, bf)
t.Logf("Registered balancer %s...", mdBalancerName) t.Logf("Registered balancer %s...", mdBalancerName)
@ -717,16 +717,18 @@ func (s) TestAuthorityInBuildOptions(t *testing.T) {
} }
// Only use the first address. // Only use the first address.
sc, err := bd.ClientConn.NewSubConn([]resolver.Address{addrs[0]}, balancer.NewSubConnOptions{}) var sc balancer.SubConn
sc, err := bd.ClientConn.NewSubConn([]resolver.Address{addrs[0]}, balancer.NewSubConnOptions{
StateListener: func(state balancer.SubConnState) {
bd.ClientConn.UpdateState(balancer.State{ConnectivityState: state.ConnectivityState, Picker: &aiPicker{result: balancer.PickResult{SubConn: sc}, err: state.ConnectionError}})
},
})
if err != nil { if err != nil {
return err return err
} }
sc.Connect() sc.Connect()
return nil return nil
}, },
UpdateSubConnState: func(bd *stub.BalancerData, sc balancer.SubConn, state balancer.SubConnState) {
bd.ClientConn.UpdateState(balancer.State{ConnectivityState: state.ConnectivityState, Picker: &aiPicker{result: balancer.PickResult{SubConn: sc}, err: state.ConnectionError}})
},
} }
balancerName := "stub-balancer-" + test.name balancerName := "stub-balancer-" + test.name
stub.Register(balancerName, bf) stub.Register(balancerName, bf)

View File

@ -177,10 +177,6 @@ func (s) TestResolverUpdate_InvalidServiceConfigAfterGoodUpdate(t *testing.T) {
ccs.BalancerConfig = nil ccs.BalancerConfig = nil
return bal.UpdateClientConnState(ccs) return bal.UpdateClientConnState(ccs)
}, },
UpdateSubConnState: func(bd *stub.BalancerData, sc balancer.SubConn, state balancer.SubConnState) {
bal := bd.Data.(balancer.Balancer)
bal.UpdateSubConnState(sc, state)
},
}) })
// Start a backend exposing the test service. // Start a backend exposing the test service.

View File

@ -59,7 +59,22 @@ func (s) TestSubConnEmpty(t *testing.T) {
UpdateClientConnState: func(d *stub.BalancerData, ccs balancer.ClientConnState) error { UpdateClientConnState: func(d *stub.BalancerData, ccs balancer.ClientConnState) error {
if sc == nil { if sc == nil {
var err error var err error
sc, err = d.ClientConn.NewSubConn(ccs.ResolverState.Addresses, balancer.NewSubConnOptions{}) sc, err = d.ClientConn.NewSubConn(ccs.ResolverState.Addresses, balancer.NewSubConnOptions{
StateListener: func(state balancer.SubConnState) {
switch state.ConnectivityState {
case connectivity.Ready:
d.ClientConn.UpdateState(balancer.State{
ConnectivityState: connectivity.Ready,
Picker: &tsccPicker{sc: sc},
})
case connectivity.TransientFailure:
d.ClientConn.UpdateState(balancer.State{
ConnectivityState: connectivity.TransientFailure,
Picker: base.NewErrPicker(fmt.Errorf("error connecting: %v", state.ConnectionError)),
})
}
},
})
if err != nil { if err != nil {
t.Errorf("error creating initial subconn: %v", err) t.Errorf("error creating initial subconn: %v", err)
} }
@ -81,20 +96,6 @@ func (s) TestSubConnEmpty(t *testing.T) {
} }
return nil return nil
}, },
UpdateSubConnState: func(d *stub.BalancerData, sc balancer.SubConn, scs balancer.SubConnState) {
switch scs.ConnectivityState {
case connectivity.Ready:
d.ClientConn.UpdateState(balancer.State{
ConnectivityState: connectivity.Ready,
Picker: &tsccPicker{sc: sc},
})
case connectivity.TransientFailure:
d.ClientConn.UpdateState(balancer.State{
ConnectivityState: connectivity.TransientFailure,
Picker: base.NewErrPicker(fmt.Errorf("error connecting: %v", scs.ConnectionError)),
})
}
},
} }
stub.Register("tscc", bal) stub.Register("tscc", bal)