package mock
import (
"io"
"net"
"net/http"
)
type HttpServer struct {
Listener net.Listener
Port int
Server *http.Server
}
func NewHttpEchoServer() (*HttpServer, error) {
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
return nil, err
}
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Mock-Server", "Go-Std-Lib")
body, _ := io.ReadAll(r.Body)
w.Write(body)
})
srv := &http.Server{Handler: mux}
s := &HttpServer{
Listener: l,
Port: l.Addr().(*net.TCPAddr).Port,
Server: srv,
}
go srv.Serve(l)
return s, nil
}
func (s *HttpServer) Close() {
s.Server.Close()
s.Listener.Close()
}