...
1
16
17 package portforward
18
19 import (
20 "fmt"
21 "testing"
22
23 "github.com/stretchr/testify/assert"
24 "k8s.io/apimachinery/pkg/util/httpstream"
25 )
26
27 func TestFallbackDialer(t *testing.T) {
28 primaryProtocol := "primary.fake.protocol"
29 secondaryProtocol := "secondary.fake.protocol"
30 protocols := []string{primaryProtocol, secondaryProtocol}
31
32 primary := &fakeDialer{dialed: false, negotiatedProtocol: primaryProtocol}
33 secondary := &fakeDialer{dialed: false, negotiatedProtocol: secondaryProtocol}
34 fallbackDialer := NewFallbackDialer(primary, secondary, notCalled)
35 _, negotiated, err := fallbackDialer.Dial(protocols...)
36 assert.True(t, primary.dialed, "no fallback; primary should have dialed")
37 assert.False(t, secondary.dialed, "no fallback; secondary should *not* have dialed")
38 assert.Equal(t, primaryProtocol, negotiated, "primary negotiated protocol returned")
39 assert.Nil(t, err, "error from primary dialer should be nil")
40
41 primary = &fakeDialer{dialed: false, negotiatedProtocol: primaryProtocol, err: &httpstream.UpgradeFailureError{}}
42 secondary = &fakeDialer{dialed: false, negotiatedProtocol: secondaryProtocol}
43 fallbackDialer = NewFallbackDialer(primary, secondary, httpstream.IsUpgradeFailure)
44 _, negotiated, err = fallbackDialer.Dial(protocols...)
45 assert.True(t, primary.dialed, "fallback; primary should have dialed")
46 assert.True(t, secondary.dialed, "fallback; secondary should have dialed")
47 assert.Equal(t, secondaryProtocol, negotiated, "negotiated protocol is from secondary dialer")
48 assert.Nil(t, err, "error from secondary dialer should be nil")
49
50 nonUpgradeErr := fmt.Errorf("This is a non-upgrade error")
51 primary = &fakeDialer{dialed: false, err: nonUpgradeErr}
52 secondary = &fakeDialer{dialed: false}
53 fallbackDialer = NewFallbackDialer(primary, secondary, httpstream.IsUpgradeFailure)
54 _, _, err = fallbackDialer.Dial(protocols...)
55 assert.True(t, primary.dialed, "no fallback; primary should have dialed")
56 assert.False(t, secondary.dialed, "no fallback; secondary should *not* have dialed")
57 assert.Equal(t, nonUpgradeErr, err, "error is from primary dialer")
58 }
59
60 func notCalled(err error) bool { return false }
61
View as plain text