@@ -144,6 +144,38 @@ func TestParseAuthorizationHeader(t *testing.T) {
144144 })
145145}
146146
147+ func TestFromToRequestResponse (t * testing.T ) {
148+ request := httptest .NewRequest (http .MethodGet , faker .URL (), nil )
149+ request .Header .Add (headers .Authorization , faker .Password ())
150+ request .Header .Add (HeaderWebsocketProtocol , faker .Password ())
151+ h := FromRequest (request )
152+ h .AppendHeader (headers .Accept , "1.0.0" )
153+ h .AppendHeader (headers .AcceptEncoding , "gzip" )
154+ r2 := httptest .NewRequest (http .MethodGet , faker .URL (), nil )
155+ assert .Empty (t , r2 .Header )
156+ h .AppendToRequest (r2 )
157+ assert .NotEmpty (t , r2 .Header )
158+ h2 := FromRequest (r2 )
159+ assert .True (t , h2 .HasHeader (headers .Authorization ))
160+ assert .True (t , h2 .HasHeader (headers .AcceptEncoding ))
161+ assert .True (t , h2 .HasHeader (headers .Accept ))
162+ assert .True (t , h2 .HasHeader (HeaderWebsocketProtocol ))
163+
164+ response := httptest .NewRecorder ()
165+ response .Header ().Set (HeaderWebsocketProtocol , "base64.binary.k8s.io" )
166+ response .Header ().Set (headers .Authorization , faker .Password ())
167+ h3 := FromResponse (response .Result ())
168+ h3 .AppendHeader (headers .Accept , "1.0.0" )
169+ h3 .AppendHeader (headers .AcceptEncoding , "gzip" )
170+ response2 := httptest .NewRecorder ()
171+ h3 .AppendToResponse (response2 )
172+ h4 := FromResponse (response2 .Result ())
173+ assert .True (t , h4 .HasHeader (headers .Authorization ))
174+ assert .True (t , h4 .HasHeader (headers .AcceptEncoding ))
175+ assert .True (t , h4 .HasHeader (headers .Accept ))
176+ assert .True (t , h4 .HasHeader (HeaderWebsocketProtocol ))
177+ }
178+
147179func TestAddProductInformationToUserAgent (t * testing.T ) {
148180 r , err := http .NewRequest (http .MethodGet , faker .URL (), nil )
149181 require .NoError (t , err )
@@ -165,6 +197,18 @@ func TestSetLocationHeaders(t *testing.T) {
165197 assert .Equal (t , location , w .Header ().Get (headers .ContentLocation ))
166198}
167199
200+ func TestGetHeaders (t * testing.T ) {
201+ header := NewHeaders ()
202+ test := faker .Word ()
203+ header .AppendHeader (HeaderWebsocketProtocol , test )
204+ assert .Equal (t , test , header .Get (headers .Normalize (HeaderWebsocketProtocol ))) //nolint:misspell
205+ assert .True (t , header .HasHeader (HeaderWebsocketProtocol ))
206+ assert .True (t , header .HasHeader (headers .Normalize (HeaderWebsocketProtocol ))) //nolint:misspell
207+ assert .Empty (t , header .Get (headers .ContentLocation ))
208+ assert .False (t , header .HasHeader (headers .ContentLocation ))
209+ assert .False (t , header .HasHeader (headers .Normalize (headers .ContentLocation ))) //nolint:misspell
210+ }
211+
168212func TestSanitiseHeaders (t * testing.T ) {
169213 header := & http.Header {}
170214 t .Run ("empty" , func (t * testing.T ) {
@@ -197,5 +241,39 @@ func TestSanitiseHeaders(t *testing.T) {
197241 assert .False (t , actual .HasHeader (
198242 HeaderWebsocketProtocol ))
199243 })
244+ t .Run ("allow/disallow list" , func (t * testing.T ) {
245+ h := NewHeaders ()
246+ h .AppendHeader (headers .Authorization , faker .Password ())
247+ h .AppendHeader (HeaderWebsocketProtocol , faker .Password ())
248+ h .AppendHeader (headers .Accept , "1.0.0" )
249+ h .AppendHeader (headers .AcceptEncoding , "gzip" )
250+ h1 := h .Clone ()
251+ h1 .Sanitise ()
252+ assert .True (t , h1 .HasHeader (headers .Accept ))
253+ assert .True (t , h1 .HasHeader (headers .AcceptEncoding ))
254+ assert .False (t , h1 .HasHeader (HeaderWebsocketProtocol ))
255+ assert .False (t , h1 .HasHeader (headers .Authorization ))
256+ assert .True (t , h .HasHeader (headers .Accept ))
257+ assert .True (t , h .HasHeader (headers .AcceptEncoding ))
258+ assert .True (t , h .HasHeader (HeaderWebsocketProtocol ))
259+ assert .True (t , h .HasHeader (headers .Authorization ))
260+ h11 := h .AllowList (headers .Authorization )
261+ assert .True (t , h11 .HasHeader (headers .Accept ))
262+ assert .True (t , h11 .HasHeader (headers .AcceptEncoding ))
263+ assert .False (t , h11 .HasHeader (HeaderWebsocketProtocol ))
264+ assert .True (t , h11 .HasHeader (headers .Authorization ))
265+ h2 := h .Clone ()
266+ h2 .Sanitise (headers .Authorization )
267+ h2 .RemoveHeaders (headers .AcceptEncoding , headers .Accept )
268+ assert .False (t , h2 .HasHeader (headers .Accept ))
269+ assert .False (t , h2 .HasHeader (headers .AcceptEncoding ))
270+ assert .False (t , h2 .HasHeader (HeaderWebsocketProtocol ))
271+ assert .True (t , h2 .HasHeader (headers .Authorization ))
272+ h22 := h .DisallowList (headers .AcceptEncoding , headers .Accept )
273+ assert .False (t , h22 .HasHeader (headers .Accept ))
274+ assert .False (t , h22 .HasHeader (headers .AcceptEncoding ))
275+ assert .True (t , h22 .HasHeader (HeaderWebsocketProtocol ))
276+ assert .True (t , h22 .HasHeader (headers .Authorization ))
277+ })
200278
201279}
0 commit comments