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

Auto commit by PR queue bot
This commit is contained in:
k8s-merge-robot 2015-12-01 02:48:37 -08:00
commit 329567ecb4

View File

@ -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{}
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 // store the received content
pf.lock.Lock() pf.lock.Lock()
pf.received[port] = received.String() pf.received[port] = string(received)
pf.lock.Unlock() pf.lock.Unlock()
}()
// server -> client // send the hardcoded data to the client
wg.Add(1)
go func() {
defer wg.Done()
// send the hardcoded data to the stream
io.Copy(stream, strings.NewReader(pf.send[port])) io.Copy(stream, strings.NewReader(pf.send[port]))
}()
wg.Wait()
return nil return nil
} }
@ -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,
} }