From b0a6a6f777230d621ca668149cd0788edd9b3022 Mon Sep 17 00:00:00 2001 From: Brian Pursley Date: Fri, 23 Dec 2022 10:11:21 -0500 Subject: [PATCH] portforward: Add unit test to cover stopChan usage Kubernetes-commit: 6f08ab013c6ce54de239aab46b4086c09464f977 --- tools/portforward/portforward_test.go | 33 ++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/tools/portforward/portforward_test.go b/tools/portforward/portforward_test.go index 070c8904..3c90a3fd 100644 --- a/tools/portforward/portforward_test.go +++ b/tools/portforward/portforward_test.go @@ -579,7 +579,7 @@ func TestForwardPortsReturnsErrorWhenConnectionIsLost(t *testing.T) { pf, err := New(dialer, []string{":5000"}, stopChan, readyChan, os.Stdout, os.Stderr) if err != nil { - t.Fatalf("faile to create new PortForwarder: %s", err) + t.Fatalf("failed to create new PortForwarder: %s", err) } go func() { @@ -588,6 +588,7 @@ func TestForwardPortsReturnsErrorWhenConnectionIsLost(t *testing.T) { <-pf.Ready + // Simulate lost pod connection by closing streamConn, which should result in pf.ForwardPorts() returning an error. pf.streamConn.Close() err = <-errChan @@ -597,3 +598,33 @@ func TestForwardPortsReturnsErrorWhenConnectionIsLost(t *testing.T) { t.Fatalf("unexpected error from pf.ForwardPorts(): %s", err) } } + +func TestForwardPortsReturnsNilWhenStopChanIsClosed(t *testing.T) { + dialer := &fakeDialer{ + conn: newFakeConnection(), + } + + stopChan := make(chan struct{}) + readyChan := make(chan struct{}) + errChan := make(chan error) + + pf, err := New(dialer, []string{":5000"}, stopChan, readyChan, os.Stdout, os.Stderr) + if err != nil { + t.Fatalf("failed to create new PortForwarder: %s", err) + } + + go func() { + errChan <- pf.ForwardPorts() + }() + + <-pf.Ready + + // Closing (or sending to) stopChan indicates a stop request by the caller, which should result in pf.ForwardPorts() + // returning nil. + close(stopChan) + + err = <-errChan + if err != nil { + t.Fatalf("unexpected error from pf.ForwardPorts(): %s", err) + } +}