MCPcopy
hub / github.com/grpc/grpc-go / TestPickerPickFirstTwo

Method TestPickerPickFirstTwo

balancer/ringhash/picker_test.go:104–178  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

102}
103
104func (s) TestPickerPickFirstTwo(t *testing.T) {
105 tests := []struct {
106 name string
107 connectivityStates []connectivity.State
108 wantSC balancer.SubConn
109 wantErr error
110 wantSCToConnect balancer.SubConn
111 }{
112 {
113 name: "picked is Ready",
114 connectivityStates: []connectivity.State{connectivity.Ready, connectivity.Idle},
115 wantSC: testSubConns[0],
116 },
117 {
118 name: "picked is connecting, queue",
119 connectivityStates: []connectivity.State{connectivity.Connecting, connectivity.Idle},
120 wantErr: balancer.ErrNoSubConnAvailable,
121 },
122 {
123 name: "picked is Idle, connect and queue",
124 connectivityStates: []connectivity.State{connectivity.Idle, connectivity.Idle},
125 wantErr: balancer.ErrNoSubConnAvailable,
126 wantSCToConnect: testSubConns[0],
127 },
128 {
129 name: "picked is TransientFailure, next is ready, return",
130 connectivityStates: []connectivity.State{connectivity.TransientFailure, connectivity.Ready},
131 wantSC: testSubConns[1],
132 },
133 {
134 name: "picked is TransientFailure, next is connecting, queue",
135 connectivityStates: []connectivity.State{connectivity.TransientFailure, connectivity.Connecting},
136 wantErr: balancer.ErrNoSubConnAvailable,
137 },
138 {
139 name: "picked is TransientFailure, next is Idle, connect and queue",
140 connectivityStates: []connectivity.State{connectivity.TransientFailure, connectivity.Idle},
141 wantErr: balancer.ErrNoSubConnAvailable,
142 wantSCToConnect: testSubConns[1],
143 },
144 {
145 name: "all are in TransientFailure, return picked failure",
146 connectivityStates: []connectivity.State{connectivity.TransientFailure, connectivity.TransientFailure},
147 wantErr: errPicker,
148 },
149 }
150 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout)
151 defer cancel()
152 for _, tt := range tests {
153 t.Run(tt.name, func(t *testing.T) {
154 ring, epStates := testRingAndEndpointStates(tt.connectivityStates)
155 p := &picker{
156 ring: ring,
157 endpointStates: epStates,
158 }
159 got, err := p.Pick(balancer.PickInfo{
160 Ctx: iringhash.SetXDSRequestHash(ctx, 0), // always pick the first endpoint on the ring.
161 })

Callers

nothing calls this directly

Calls 4

PickMethod · 0.95
IsMethod · 0.80
ErrorfMethod · 0.65

Tested by

no test coverage detected