agent/wsclient/mock/utils/utils.go
func GetMockServer(closeWS <-chan []byte) (*httptest.Server, chan<- string, <-chan string, <-chan error, error) {
	serverChan := make(chan string)
	requestsChan := make(chan string)
	errChan := make(chan error)
	stopListen := make(chan bool)

	upgrader := websocket.Upgrader{ReadBufferSize: 1024, WriteBufferSize: 1024}
	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		ws, err := upgrader.Upgrade(w, r, nil)
		go func() {
			ws.WriteControl(websocket.CloseMessage, <-closeWS, time.Now().Add(time.Second))
			close(stopListen)
		}()
		if err != nil {
			errChan <- err
		}
		go func() {
			for {
				select {
				case <-stopListen:
					return
				default:
					_, msg, err := ws.ReadMessage()
					if err != nil {
						errChan <- err
					} else {
						requestsChan <- string(msg)
					}
				}
			}
		}()
		for str := range serverChan {
			err := ws.WriteMessage(websocket.TextMessage, []byte(str))
			if err != nil {
				errChan <- err
			}
		}
	})

	server := httptest.NewUnstartedServer(handler)
	return server, serverChan, requestsChan, errChan, nil
}
func GetMockServer(closeWS <-chan []byte) (*httptest.Server, chan<- string, <-chan string, <-chan error, error) {
	serverChan := make(chan string)
	requestsChan := make(chan string)
	errChan := make(chan error)
	stopListen := make(chan bool)

	upgrader := websocket.Upgrader{ReadBufferSize: 1024, WriteBufferSize: 1024}
	handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		ws, err := upgrader.Upgrade(w, r, nil)
		go func() {
			ws.WriteControl(websocket.CloseMessage, <-closeWS, time.Now().Add(time.Second))
			close(stopListen)
		}()
		if err != nil {
			errChan <- err
		}
		go func() {
			for {
				select {
				case <-stopListen:
					return
				default:
					_, msg, err := ws.ReadMessage()
					if err != nil {
						errChan <- err
					} else {
						requestsChan <- string(msg)
					}
				}
			}
		}()
		for str := range serverChan {
			err := ws.WriteMessage(websocket.TextMessage, []byte(str))
			if err != nil {
				errChan <- err
			}
		}
	})

	server := httptest.NewUnstartedServer(handler)
	return server, serverChan, requestsChan, errChan, nil
}
// GetMockServer returns a mock websocket server that can be started up as TLS or not.
// TODO replace with gomock