mirror of https://github.com/grpc/grpc-go.git
client: Add dial option to disable global dial options (#6016)
This commit is contained in:
parent
55dfae6e5b
commit
81534105ca
|
|
@ -146,8 +146,18 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
|
|||
cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil})
|
||||
cc.ctx, cc.cancel = context.WithCancel(context.Background())
|
||||
|
||||
for _, opt := range globalDialOptions {
|
||||
opt.apply(&cc.dopts)
|
||||
disableGlobalOpts := false
|
||||
for _, opt := range opts {
|
||||
if _, ok := opt.(*disableGlobalDialOptions); ok {
|
||||
disableGlobalOpts = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !disableGlobalOpts {
|
||||
for _, opt := range globalDialOptions {
|
||||
opt.apply(&cc.dopts)
|
||||
}
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
|
|
@ -58,6 +59,21 @@ func (s) TestAddGlobalDialOptions(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// TestDisableGlobalOptions tests dialing with the disableGlobalDialOptions dial
|
||||
// option. Dialing with this set should not pick up global options.
|
||||
func (s) TestDisableGlobalOptions(t *testing.T) {
|
||||
// Set transport credentials as a global option.
|
||||
internal.AddGlobalDialOptions.(func(opt ...DialOption))(WithTransportCredentials(insecure.NewCredentials()))
|
||||
// Dial with the disable global options dial option. This dial should fail
|
||||
// due to the global dial options with credentials not being picked up due
|
||||
// to global options being disabled.
|
||||
noTSecStr := "no transport security set"
|
||||
if _, err := Dial("fake", internal.DisableGlobalDialOptions.(func() DialOption)()); !strings.Contains(fmt.Sprint(err), noTSecStr) {
|
||||
t.Fatalf("Dialing received unexpected error: %v, want error containing \"%v\"", err, noTSecStr)
|
||||
}
|
||||
internal.ClearGlobalDialOptions()
|
||||
}
|
||||
|
||||
func (s) TestAddGlobalServerOptions(t *testing.T) {
|
||||
const maxRecvSize = 998765
|
||||
// Set and check the ServerOptions
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ func init() {
|
|||
}
|
||||
internal.WithBinaryLogger = withBinaryLogger
|
||||
internal.JoinDialOptions = newJoinDialOption
|
||||
internal.DisableGlobalDialOptions = newDisableGlobalDialOptions
|
||||
}
|
||||
|
||||
// dialOptions configure a Dial call. dialOptions are set by the DialOption
|
||||
|
|
@ -96,6 +97,16 @@ type EmptyDialOption struct{}
|
|||
|
||||
func (EmptyDialOption) apply(*dialOptions) {}
|
||||
|
||||
type disableGlobalDialOptions struct{}
|
||||
|
||||
func (disableGlobalDialOptions) apply(*dialOptions) {}
|
||||
|
||||
// newDisableGlobalDialOptions returns a DialOption that prevents the ClientConn
|
||||
// from applying the global DialOptions (set via AddGlobalDialOptions).
|
||||
func newDisableGlobalDialOptions() DialOption {
|
||||
return &disableGlobalDialOptions{}
|
||||
}
|
||||
|
||||
// funcDialOption wraps a function that modifies dialOptions into an
|
||||
// implementation of the DialOption interface.
|
||||
type funcDialOption struct {
|
||||
|
|
|
|||
|
|
@ -77,6 +77,10 @@ var (
|
|||
// globally for newly created client channels. The priority will be: 1.
|
||||
// user-provided; 2. this method; 3. default values.
|
||||
AddGlobalDialOptions interface{} // func(opt ...DialOption)
|
||||
// DisableGlobalDialOptions returns a DialOption that prevents the
|
||||
// ClientConn from applying the global DialOptions (set via
|
||||
// AddGlobalDialOptions).
|
||||
DisableGlobalDialOptions interface{} // func() grpc.DialOption
|
||||
// ClearGlobalDialOptions clears the array of extra DialOption. This
|
||||
// method is useful in testing and benchmarking.
|
||||
ClearGlobalDialOptions func()
|
||||
|
|
|
|||
Loading…
Reference in New Issue