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