Commit 329567ec authored by k8s-merge-robot's avatar k8s-merge-robot

Merge pull request #17739 from ncdc/fix-port-forward-test-flake

Auto commit by PR queue bot
parents 9afb0201 2fae8471
...@@ -207,6 +207,8 @@ func TestGetListener(t *testing.T) { ...@@ -207,6 +207,8 @@ func TestGetListener(t *testing.T) {
// kubelet.PortForwarder. // kubelet.PortForwarder.
type fakePortForwarder struct { type fakePortForwarder struct {
lock sync.Mutex lock sync.Mutex
// stores data expected from the stream per port
expected map[uint16]string
// stores data received from the stream per port // stores data received from the stream per port
received map[uint16]string received map[uint16]string
// data to be sent to the stream per port // data to be sent to the stream per port
...@@ -218,33 +220,23 @@ var _ kubelet.PortForwarder = &fakePortForwarder{} ...@@ -218,33 +220,23 @@ var _ kubelet.PortForwarder = &fakePortForwarder{}
func (pf *fakePortForwarder) PortForward(name string, uid types.UID, port uint16, stream io.ReadWriteCloser) error { func (pf *fakePortForwarder) PortForward(name string, uid types.UID, port uint16, stream io.ReadWriteCloser) error {
defer stream.Close() defer stream.Close()
var wg sync.WaitGroup // read from the client
received := make([]byte, len(pf.expected[port]))
// client -> server n, err := stream.Read(received)
wg.Add(1) if err != nil {
go func() { return fmt.Errorf("error reading from client for port %d: %v", port, err)
defer wg.Done() }
if n != len(pf.expected[port]) {
// copy from stream into a buffer return fmt.Errorf("unexpected length read from client for port %d: got %d, expected %d. data=%q", port, n, len(pf.expected[port]), string(received))
received := new(bytes.Buffer) }
io.Copy(received, stream)
// store the received content
pf.lock.Lock()
pf.received[port] = received.String()
pf.lock.Unlock()
}()
// server -> client
wg.Add(1)
go func() {
defer wg.Done()
// send the hardcoded data to the stream // store the received content
io.Copy(stream, strings.NewReader(pf.send[port])) pf.lock.Lock()
}() pf.received[port] = string(received)
pf.lock.Unlock()
wg.Wait() // send the hardcoded data to the client
io.Copy(stream, strings.NewReader(pf.send[port]))
return nil return nil
} }
...@@ -254,6 +246,7 @@ func (pf *fakePortForwarder) PortForward(name string, uid types.UID, port uint16 ...@@ -254,6 +246,7 @@ func (pf *fakePortForwarder) PortForward(name string, uid types.UID, port uint16
func fakePortForwardServer(t *testing.T, testName string, serverSends, expectedFromClient map[uint16]string) http.HandlerFunc { func fakePortForwardServer(t *testing.T, testName string, serverSends, expectedFromClient map[uint16]string) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
pf := &fakePortForwarder{ pf := &fakePortForwarder{
expected: expectedFromClient,
received: make(map[uint16]string), received: make(map[uint16]string),
send: serverSends, send: serverSends,
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment