TUN-7253: Adopt http.ResponseWriter for connection.ResponseWriter
This commit is contained in:
		
							parent
							
								
									27f88ae209
								
							
						
					
					
						commit
						bf3136debb
					
				|  | @ -200,6 +200,7 @@ func (h *HTTPResponseReadWriteAcker) AckConnection(tracePropagation string) erro | ||||||
| type ResponseWriter interface { | type ResponseWriter interface { | ||||||
| 	WriteRespHeaders(status int, header http.Header) error | 	WriteRespHeaders(status int, header http.Header) error | ||||||
| 	AddTrailer(trailerName, trailerValue string) | 	AddTrailer(trailerName, trailerValue string) | ||||||
|  | 	http.ResponseWriter | ||||||
| 	io.Writer | 	io.Writer | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -197,6 +197,7 @@ type http2RespWriter struct { | ||||||
| 	flusher       http.Flusher | 	flusher       http.Flusher | ||||||
| 	shouldFlush   bool | 	shouldFlush   bool | ||||||
| 	statusWritten bool | 	statusWritten bool | ||||||
|  | 	respHeaders   http.Header | ||||||
| 	log           *zerolog.Logger | 	log           *zerolog.Logger | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -276,6 +277,14 @@ func (rp *http2RespWriter) WriteRespHeaders(status int, header http.Header) erro | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (rp *http2RespWriter) Header() http.Header { | ||||||
|  | 	return rp.respHeaders | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (rp *http2RespWriter) WriteHeader(status int) { | ||||||
|  | 	rp.WriteRespHeaders(status, rp.respHeaders) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (rp *http2RespWriter) WriteErrorResponse() bool { | func (rp *http2RespWriter) WriteErrorResponse() bool { | ||||||
| 	if rp.statusWritten { | 	if rp.statusWritten { | ||||||
| 		return false | 		return false | ||||||
|  |  | ||||||
|  | @ -402,6 +402,7 @@ func (s *streamReadWriteAcker) AckConnection(tracePropagation string) error { | ||||||
| // httpResponseAdapter translates responses written by the HTTP Proxy into ones that can be used in QUIC.
 | // httpResponseAdapter translates responses written by the HTTP Proxy into ones that can be used in QUIC.
 | ||||||
| type httpResponseAdapter struct { | type httpResponseAdapter struct { | ||||||
| 	*quicpogs.RequestServerStream | 	*quicpogs.RequestServerStream | ||||||
|  | 	headers             http.Header | ||||||
| 	connectResponseSent bool | 	connectResponseSent bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -426,6 +427,14 @@ func (hrw *httpResponseAdapter) WriteRespHeaders(status int, header http.Header) | ||||||
| 	return hrw.WriteConnectResponseData(nil, metadata...) | 	return hrw.WriteConnectResponseData(nil, metadata...) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (hrw *httpResponseAdapter) Header() http.Header { | ||||||
|  | 	return hrw.headers | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (hrw *httpResponseAdapter) WriteHeader(status int) { | ||||||
|  | 	hrw.WriteRespHeaders(status, hrw.headers) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (hrw *httpResponseAdapter) WriteErrorResponse(err error) { | func (hrw *httpResponseAdapter) WriteErrorResponse(err error) { | ||||||
| 	hrw.WriteConnectResponseData(err, quicpogs.Metadata{Key: "HttpStatus", Val: strconv.Itoa(http.StatusBadGateway)}) | 	hrw.WriteConnectResponseData(err, quicpogs.Metadata{Key: "HttpStatus", Val: strconv.Itoa(http.StatusBadGateway)}) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -700,8 +700,7 @@ func TestConnections(t *testing.T) { | ||||||
| 			cancel() | 			cancel() | ||||||
| 			assert.Equal(t, test.want.err, err != nil) | 			assert.Equal(t, test.want.err, err != nil) | ||||||
| 			assert.Equal(t, test.want.message, replayer.Bytes()) | 			assert.Equal(t, test.want.message, replayer.Bytes()) | ||||||
| 			respPrinter := respWriter.(responsePrinter) | 			assert.Equal(t, test.want.headers, respWriter.Header()) | ||||||
| 			assert.Equal(t, test.want.headers, respPrinter.headers()) |  | ||||||
| 			replayer.rw.Reset() | 			replayer.rw.Reset() | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|  | @ -794,10 +793,6 @@ func (p *pipedRequestBody) Close() error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type responsePrinter interface { |  | ||||||
| 	headers() http.Header |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type wsRespWriter struct { | type wsRespWriter struct { | ||||||
| 	w               io.Writer | 	w               io.Writer | ||||||
| 	responseHeaders http.Header | 	responseHeaders http.Header | ||||||
|  | @ -836,12 +831,16 @@ func (w *wsRespWriter) AddTrailer(trailerName, trailerValue string) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // respHeaders is a test function to read respHeaders
 | // respHeaders is a test function to read respHeaders
 | ||||||
| func (w *wsRespWriter) headers() http.Header { | func (w *wsRespWriter) Header() http.Header { | ||||||
| 	// Removing indeterminstic header because it cannot be asserted.
 | 	// Removing indeterminstic header because it cannot be asserted.
 | ||||||
| 	w.responseHeaders.Del("Date") | 	w.responseHeaders.Del("Date") | ||||||
| 	return w.responseHeaders | 	return w.responseHeaders | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (w *wsRespWriter) WriteHeader(status int) { | ||||||
|  | 	// unused
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type mockTCPRespWriter struct { | type mockTCPRespWriter struct { | ||||||
| 	w               io.Writer | 	w               io.Writer | ||||||
| 	responseHeaders http.Header | 	responseHeaders http.Header | ||||||
|  | @ -862,7 +861,7 @@ func (m *mockTCPRespWriter) Write(p []byte) (n int, err error) { | ||||||
| 	return m.w.Write(p) | 	return m.w.Write(p) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (w *mockTCPRespWriter) AddTrailer(trailerName, trailerValue string) { | func (m *mockTCPRespWriter) AddTrailer(trailerName, trailerValue string) { | ||||||
| 	// do nothing
 | 	// do nothing
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -873,10 +872,14 @@ func (m *mockTCPRespWriter) WriteRespHeaders(status int, header http.Header) err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // respHeaders is a test function to read respHeaders
 | // respHeaders is a test function to read respHeaders
 | ||||||
| func (m *mockTCPRespWriter) headers() http.Header { | func (m *mockTCPRespWriter) Header() http.Header { | ||||||
| 	return m.responseHeaders | 	return m.responseHeaders | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (m *mockTCPRespWriter) WriteHeader(status int) { | ||||||
|  | 	// do nothing
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func createSingleIngressConfig(t *testing.T, service string) ingress.Ingress { | func createSingleIngressConfig(t *testing.T, service string) ingress.Ingress { | ||||||
| 	ingressConfig := &config.Configuration{ | 	ingressConfig := &config.Configuration{ | ||||||
| 		Ingress: []config.UnvalidatedIngressRule{ | 		Ingress: []config.UnvalidatedIngressRule{ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue