code: 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
  }
docs: // GetMockServer returns a mock websocket server that can be started up as TLS or not.
  // TODO replace with gomock