Skip to content

Commit 7cdd5f0

Browse files
authored
Merge pull request #1277 from akrejcir/simplify-port-forwarding
cleanup: Remove net.Pipe in port-forwarding in functests
2 parents a1b0d80 + 379ae58 commit 7cdd5f0

File tree

1 file changed

+14
-24
lines changed

1 file changed

+14
-24
lines changed

tests/port-forwarding.go

+14-24
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package tests
22

33
import (
4+
"errors"
45
"fmt"
56
"io"
67
"net"
78
"net/http"
89
"strconv"
910
"sync/atomic"
1011

11-
. "github.com/onsi/ginkgo/v2"
1212
core "k8s.io/api/core/v1"
1313
"k8s.io/apimachinery/pkg/util/httpstream"
1414
"k8s.io/client-go/rest"
@@ -28,6 +28,15 @@ type portForwarderImpl struct {
2828

2929
var _ PortForwarder = &portForwarderImpl{}
3030

31+
type portForwardConn struct {
32+
net.Conn
33+
streamConnCloser io.Closer
34+
}
35+
36+
func (p *portForwardConn) Close() error {
37+
return errors.Join(p.Conn.Close(), p.streamConnCloser.Close())
38+
}
39+
3140
func (p *portForwarderImpl) Connect(pod *core.Pod, remotePort uint16) (net.Conn, error) {
3241
streamConnection, err := p.createStreamConnection(pod)
3342
if err != nil {
@@ -56,29 +65,10 @@ func (p *portForwarderImpl) Connect(pod *core.Pod, remotePort uint16) (net.Conn,
5665
return nil, err
5766
}
5867

59-
pipeIn, pipeOut := net.Pipe()
60-
// Read data from pod
61-
go func() {
62-
defer pipeIn.Close()
63-
_, err := io.Copy(pipeIn, dataStream)
64-
if err != nil {
65-
fmt.Fprintf(GinkgoWriter, "Error reading from port-forwarding: %v", err)
66-
return
67-
}
68-
}()
69-
70-
// Send data to pod
71-
go func() {
72-
defer streamConnection.Close()
73-
defer dataStream.Close()
74-
_, err := io.Copy(dataStream, pipeIn)
75-
if err != nil {
76-
fmt.Fprintf(GinkgoWriter, "Error writing to port-forwarding: %v", err)
77-
return
78-
}
79-
}()
80-
81-
return pipeOut, nil
68+
return &portForwardConn{
69+
Conn: dataStream.(net.Conn),
70+
streamConnCloser: streamConnection,
71+
}, nil
8272
}
8373

8474
func (p *portForwarderImpl) createStreamConnection(pod *core.Pod) (httpstream.Connection, error) {

0 commit comments

Comments
 (0)