mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-16 07:13:53 +00:00
Merge pull request #17739 from ncdc/fix-port-forward-test-flake
Auto commit by PR queue bot
This commit is contained in:
commit
329567ecb4
@ -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]))
|
||||||
|
n, err := stream.Read(received)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error reading from client for port %d: %v", port, err)
|
||||||
|
}
|
||||||
|
if n != len(pf.expected[port]) {
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
|
||||||
// client -> server
|
// store the received content
|
||||||
wg.Add(1)
|
pf.lock.Lock()
|
||||||
go func() {
|
pf.received[port] = string(received)
|
||||||
defer wg.Done()
|
pf.lock.Unlock()
|
||||||
|
|
||||||
// copy from stream into a buffer
|
// send the hardcoded data to the client
|
||||||
received := new(bytes.Buffer)
|
io.Copy(stream, strings.NewReader(pf.send[port]))
|
||||||
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
|
|
||||||
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,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user