13
"golang.org/x/net/http2"
16
type UpstreamServer interface {
22
type ServeConn func(t *testing.T, conn net.Conn)
23
type upstreamServer struct {
33
func NewUpstreamServer(t *testing.T, addr string, serve ServeConn) UpstreamServer {
34
return &upstreamServer{
43
// GoServe and Close exists concurrency
44
// expected action is Close should close the server, should not restart
45
func (s *upstreamServer) GoServe() {
53
for i := 0; i < 3; i++ {
54
s.Listener, err = net.Listen("tcp", s.Address)
55
if s.Listener != nil {
58
time.Sleep(time.Second)
60
if s.Listener == nil {
61
s.t.Fatalf("listen %s failed, error : %v\n", s.Address, err)
65
func (s *upstreamServer) serve() {
67
conn, err := s.Listener.Accept()
69
if ne, ok := err.(net.Error); ok && ne.Temporary() {
70
s.t.Logf("Accept error: %v\n", err)
75
s.t.Logf("server %s Accept connection: %s\n", s.Listener.Addr().String(), conn.RemoteAddr().String())
78
s.conns = append(s.conns, conn)
85
func (s *upstreamServer) Close() {
88
s.t.Logf("server %s closed\n", s.Address)
89
if s.Listener != nil { // Close maybe called before GoServe
92
for _, conn := range s.conns {
97
func (s *upstreamServer) Addr() string {
102
type HTTPHandler struct{}
104
func (h *HTTPHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
105
w.Header().Set("Content-Type", "text/plain")
107
fmt.Fprintf(w, "\nRequestId:%s\n", r.Header.Get("Requestid"))
111
type HTTP2Server struct {
117
func (s *HTTP2Server) ServeConn(t *testing.T, conn net.Conn) {
118
s.Server.ServeConn(conn, &http2.ServeConnOpts{Handler: s.Handler})
121
func NewUpstreamHTTP2(t *testing.T, addr string, h http.Handler) UpstreamServer {
127
Server: &http2.Server{IdleTimeout: 1 * time.Minute},
130
return NewUpstreamServer(t, addr, s.ServeConn)
134
type HTTPServer struct {
136
server *httptest.Server
140
func (s *HTTPServer) GoServe() {
143
func (s *HTTPServer) Close() {
146
func (s *HTTPServer) Addr() string {
147
addr := strings.Split(s.server.URL, "http://")
154
func NewHTTPServer(t *testing.T, h http.Handler) UpstreamServer {
158
s := &HTTPServer{t: t, Handler: h}
159
s.server = httptest.NewUnstartedServer(s.Handler)