@@ -4,8 +4,11 @@ import (
44 "context"
55 "fmt"
66 "io"
7+ "net/http"
8+ "net/http/httptest"
79 "os"
810 "os/exec"
11+ "sync/atomic"
912 "testing"
1013
1114 "github.com/stretchr/testify/require"
@@ -123,3 +126,54 @@ func TestInterpolation_without_match_Of_String(t *testing.T) {
123126 _ , err := e .getRequest (ctx , "../../" )
124127 require .Errorf (t , err , "unable to interpolate file due to unresolved variables {{.name}}" )
125128}
129+
130+ func TestCookieRedirect (t * testing.T ) {
131+ callCount := atomic.Int32 {}
132+ ctx := context .Background ()
133+
134+ mux := http .NewServeMux ()
135+ mux .HandleFunc ("GET /set" , func (w http.ResponseWriter , r * http.Request ) {
136+ http .SetCookie (w , & http.Cookie {
137+ Name : "some-cookie" ,
138+ Value : "some-value" ,
139+ Path : "/" ,
140+ MaxAge : 100 ,
141+ Secure : false ,
142+ HttpOnly : true ,
143+ })
144+ w .Header ().Set ("Location" , "/get" )
145+ w .WriteHeader (http .StatusSeeOther )
146+ })
147+
148+ mux .HandleFunc ("GET /get" , func (w http.ResponseWriter , r * http.Request ) {
149+ callCount .Add (1 )
150+ cookie , err := r .Cookie ("some-cookie" )
151+ if err != nil {
152+ w .WriteHeader (http .StatusBadRequest )
153+ return
154+ }
155+ if cookie .Value != "some-value" {
156+ w .WriteHeader (http .StatusBadRequest )
157+ return
158+ }
159+ w .WriteHeader (http .StatusOK )
160+ })
161+
162+ srv := httptest .NewServer (mux )
163+ t .Cleanup (srv .Close )
164+
165+ e := & Executor {}
166+ res , err := e .Run (ctx , venom.TestStep {
167+ "method" : http .MethodGet ,
168+ "url" : srv .URL ,
169+ "path" : "/set" ,
170+ })
171+ require .NoError (t , err )
172+
173+ result , ok := res .(Result )
174+ require .True (t , ok )
175+
176+ require .Equal (t , result .StatusCode , http .StatusOK )
177+
178+ require .Equal (t , int32 (1 ), callCount .Load ())
179+ }
0 commit comments