re-write fallback dialer unit test

Kubernetes-commit: 33af937b4a5f4eb5c5005bddb483317f042da515
This commit is contained in:
Sean Sullivan 2024-03-04 10:52:59 -08:00 committed by Kubernetes Publisher
parent 79f21dcaa8
commit 4b03fda005

View File

@ -21,33 +21,40 @@ import (
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/util/httpstream"
) )
func TestFallbackDialer(t *testing.T) { func TestFallbackDialer(t *testing.T) {
protocol := "v6.fake.k8s.io" primaryProtocol := "primary.fake.protocol"
// If "shouldFallback" is false, then only primary should be dialed. secondaryProtocol := "secondary.fake.protocol"
primary := &fakeDialer{dialed: false} protocols := []string{primaryProtocol, secondaryProtocol}
primary.negotiatedProtocol = protocol // If primary dialer error is nil, then no fallback and primary negotiated protocol returned.
secondary := &fakeDialer{dialed: false} primary := &fakeDialer{dialed: false, negotiatedProtocol: primaryProtocol}
fallbackDialer := NewFallbackDialer(primary, secondary, alwaysFalse) secondary := &fakeDialer{dialed: false, negotiatedProtocol: secondaryProtocol}
_, negotiated, err := fallbackDialer.Dial(protocol) fallbackDialer := NewFallbackDialer(primary, secondary, notCalled)
_, negotiated, err := fallbackDialer.Dial(protocols...)
assert.True(t, primary.dialed, "no fallback; primary should have dialed") assert.True(t, primary.dialed, "no fallback; primary should have dialed")
assert.Equal(t, protocol, negotiated, "")
assert.False(t, secondary.dialed, "no fallback; secondary should *not* have dialed") assert.False(t, secondary.dialed, "no fallback; secondary should *not* have dialed")
assert.Nil(t, err, "error should be nil") assert.Equal(t, primaryProtocol, negotiated, "primary negotiated protocol returned")
// If "shouldFallback" is true, then primary AND secondary should be dialed. assert.Nil(t, err, "error from primary dialer should be nil")
primary.dialed = false // reset dialed field // If primary dialer error is upgrade error, then fallback returning secondary dial response.
primary.err = fmt.Errorf("bad handshake") primary = &fakeDialer{dialed: false, negotiatedProtocol: primaryProtocol, err: &httpstream.UpgradeFailureError{}}
secondary.dialed = false // reset dialed field secondary = &fakeDialer{dialed: false, negotiatedProtocol: secondaryProtocol}
secondary.negotiatedProtocol = protocol fallbackDialer = NewFallbackDialer(primary, secondary, httpstream.IsUpgradeFailure)
fallbackDialer = NewFallbackDialer(primary, secondary, alwaysTrue) _, negotiated, err = fallbackDialer.Dial(protocols...)
_, negotiated, err = fallbackDialer.Dial(protocol) assert.True(t, primary.dialed, "fallback; primary should have dialed")
assert.True(t, primary.dialed, "fallback; primary should have dialed (first)")
assert.True(t, secondary.dialed, "fallback; secondary should have dialed") assert.True(t, secondary.dialed, "fallback; secondary should have dialed")
assert.Equal(t, protocol, negotiated) assert.Equal(t, secondaryProtocol, negotiated, "negotiated protocol is from secondary dialer")
assert.Nil(t, err) assert.Nil(t, err, "error from secondary dialer should be nil")
// If primary dialer returns non-upgrade error, then primary error is returned.
nonUpgradeErr := fmt.Errorf("This is a non-upgrade error")
primary = &fakeDialer{dialed: false, err: nonUpgradeErr}
secondary = &fakeDialer{dialed: false}
fallbackDialer = NewFallbackDialer(primary, secondary, httpstream.IsUpgradeFailure)
_, _, err = fallbackDialer.Dial(protocols...)
assert.True(t, primary.dialed, "no fallback; primary should have dialed")
assert.False(t, secondary.dialed, "no fallback; secondary should *not* have dialed")
assert.Equal(t, nonUpgradeErr, err, "error is from primary dialer")
} }
func alwaysTrue(err error) bool { return true } func notCalled(err error) bool { return false }
func alwaysFalse(err error) bool { return false }