Graduate PortForwardWebsockets to Beta
Kubernetes-commit: 3ae3b4ea551443d8ef695d31bf0c51963fe35ac3
This commit is contained in:
parent
3802ec81a2
commit
13611d4701
|
@ -136,20 +136,28 @@ type defaultPortForwarder struct {
|
|||
genericiooptions.IOStreams
|
||||
}
|
||||
|
||||
func (f *defaultPortForwarder) ForwardPorts(method string, url *url.URL, opts PortForwardOptions) error {
|
||||
func createDialer(method string, url *url.URL, opts PortForwardOptions) (httpstream.Dialer, error) {
|
||||
transport, upgrader, err := spdy.RoundTripperFor(opts.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, method, url)
|
||||
if cmdutil.PortForwardWebsockets.IsEnabled() {
|
||||
if !cmdutil.PortForwardWebsockets.IsDisabled() {
|
||||
tunnelingDialer, err := portforward.NewSPDYOverWebsocketDialer(url, opts.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
// First attempt tunneling (websocket) dialer, then fallback to spdy dialer.
|
||||
dialer = portforward.NewFallbackDialer(tunnelingDialer, dialer, httpstream.IsUpgradeFailure)
|
||||
}
|
||||
return dialer, nil
|
||||
}
|
||||
|
||||
func (f *defaultPortForwarder) ForwardPorts(method string, url *url.URL, opts PortForwardOptions) error {
|
||||
dialer, err := createDialer(method, url, opts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fw, err := portforward.NewOnAddresses(dialer, opts.Address, opts.Ports, opts.StopChannel, opts.ReadyChannel, f.Out, f.ErrOut)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -32,7 +32,9 @@ import (
|
|||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/cli-runtime/pkg/genericiooptions"
|
||||
"k8s.io/client-go/rest/fake"
|
||||
"k8s.io/client-go/tools/portforward"
|
||||
cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
|
||||
cmdutil "k8s.io/kubectl/pkg/cmd/util"
|
||||
"k8s.io/kubectl/pkg/scheme"
|
||||
)
|
||||
|
||||
|
@ -983,3 +985,38 @@ func TestCheckUDPPort(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateDialer(t *testing.T) {
|
||||
url, err := url.Parse("http://localhost:8080/index.html")
|
||||
if err != nil {
|
||||
t.Fatalf("unable to parse test url: %v", err)
|
||||
}
|
||||
config := cmdtesting.DefaultClientConfig()
|
||||
opts := PortForwardOptions{Config: config}
|
||||
// First, ensure that no environment variable creates the fallback dialer.
|
||||
dialer, err := createDialer("GET", url, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create dialer: %v", err)
|
||||
}
|
||||
if _, isFallback := dialer.(*portforward.FallbackDialer); !isFallback {
|
||||
t.Errorf("expected fallback dialer, got %#v", dialer)
|
||||
}
|
||||
// Next, check turning on feature flag explicitly also creates fallback dialer.
|
||||
t.Setenv(string(cmdutil.PortForwardWebsockets), "true")
|
||||
dialer, err = createDialer("GET", url, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create dialer: %v", err)
|
||||
}
|
||||
if _, isFallback := dialer.(*portforward.FallbackDialer); !isFallback {
|
||||
t.Errorf("expected fallback dialer, got %#v", dialer)
|
||||
}
|
||||
// Finally, check explicit disabling does NOT create the fallback dialer.
|
||||
t.Setenv(string(cmdutil.PortForwardWebsockets), "false")
|
||||
dialer, err = createDialer("GET", url, opts)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create dialer: %v", err)
|
||||
}
|
||||
if _, isFallback := dialer.(*portforward.FallbackDialer); isFallback {
|
||||
t.Errorf("expected fallback dialer, got %#v", dialer)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue