How to use Write method of httpext Package

Best K6 code snippet using httpext.Write

helpers_test.go

Source:helpers_test.go Github

copy

Full Screen

...29// -- may be a good idea to change to output path to somewherelike /tmp30// go test -coverprofile cover.out && go tool cover -html=cover.out -o cover.html31//32func TestNoRequestVars(t *testing.T) {33 reqVars := func(w http.ResponseWriter, r *http.Request) {34 RequestVars(r)35 }36 p := New()37 p.Get("/home", reqVars)38 code, _ := request(http.MethodGet, "/home", p)39 Equal(t, code, http.StatusOK)40}41func TestDecode(t *testing.T) {42 type TestStruct struct {43 ID int `form:"id"`44 Posted string45 MultiPartPosted string46 }47 test := new(TestStruct)48 p := New()49 p.Post("/decode-noquery/:id", func(w http.ResponseWriter, r *http.Request) {50 err := Decode(r, httpext.NoQueryParams, 16<<10, test)51 Equal(t, err, nil)52 })53 p.Post("/decode/:id", func(w http.ResponseWriter, r *http.Request) {54 err := Decode(r, httpext.QueryParams, 16<<10, test)55 Equal(t, err, nil)56 })57 p.Post("/decode2/:id", func(w http.ResponseWriter, r *http.Request) {58 err := Decode(r, httpext.NoQueryParams, 16<<10, test)59 Equal(t, err, nil)60 })61 p.Post("/decode3/:id", func(w http.ResponseWriter, r *http.Request) {62 err := Decode(r, httpext.QueryParams, 16<<10, test)63 Equal(t, err, nil)64 })65 p.Get("/parse-params/:Posted", func(w http.ResponseWriter, r *http.Request) {66 err := Decode(r, httpext.QueryParams, 16<<10, test)67 Equal(t, err, nil)68 })69 hf := p.Serve()70 r, _ := http.NewRequest(http.MethodGet, "/parse-params/pval?id=5", nil)71 w := httptest.NewRecorder()72 hf.ServeHTTP(w, r)73 Equal(t, w.Code, http.StatusOK)74 Equal(t, test.ID, 5)75 Equal(t, test.Posted, "pval")76 Equal(t, test.MultiPartPosted, "")77 form := url.Values{}78 form.Add("Posted", "value")79 test = new(TestStruct)80 r, _ = http.NewRequest(http.MethodPost, "/decode/14?id=13", strings.NewReader(form.Encode()))81 r.Header.Set(httpext.ContentType, httpext.ApplicationForm)82 w = httptest.NewRecorder()83 hf.ServeHTTP(w, r)84 Equal(t, w.Code, http.StatusOK)85 Equal(t, test.ID, 13)86 Equal(t, test.Posted, "value")87 Equal(t, test.MultiPartPosted, "")88 test = new(TestStruct)89 r, _ = http.NewRequest(http.MethodPost, "/decode/14", strings.NewReader(form.Encode()))90 r.Header.Set(httpext.ContentType, httpext.ApplicationForm)91 w = httptest.NewRecorder()92 hf.ServeHTTP(w, r)93 Equal(t, w.Code, http.StatusOK)94 Equal(t, test.ID, 14)95 Equal(t, test.Posted, "value")96 Equal(t, test.MultiPartPosted, "")97 test = new(TestStruct)98 r, _ = http.NewRequest(http.MethodPost, "/decode2/13", strings.NewReader(form.Encode()))99 r.Header.Set(httpext.ContentType, httpext.ApplicationForm)100 w = httptest.NewRecorder()101 hf.ServeHTTP(w, r)102 Equal(t, w.Code, http.StatusOK)103 Equal(t, test.ID, 0)104 Equal(t, test.Posted, "value")105 Equal(t, test.MultiPartPosted, "")106 body := &bytes.Buffer{}107 writer := multipart.NewWriter(body)108 err := writer.WriteField("MultiPartPosted", "value")109 Equal(t, err, nil)110 // Don't forget to close the multipart writer.111 // If you don't close it, your request will be missing the terminating boundary.112 err = writer.Close()113 Equal(t, err, nil)114 test = new(TestStruct)115 r, _ = http.NewRequest(http.MethodPost, "/decode/13?id=12", body)116 r.Header.Set(httpext.ContentType, writer.FormDataContentType())117 w = httptest.NewRecorder()118 hf.ServeHTTP(w, r)119 Equal(t, w.Code, http.StatusOK)120 Equal(t, test.ID, 12)121 Equal(t, test.Posted, "")122 Equal(t, test.MultiPartPosted, "value")123 body = &bytes.Buffer{}124 writer = multipart.NewWriter(body)125 err = writer.WriteField("MultiPartPosted", "value")126 Equal(t, err, nil)127 // Don't forget to close the multipart writer.128 // If you don't close it, your request will be missing the terminating boundary.129 err = writer.Close()130 Equal(t, err, nil)131 test = new(TestStruct)132 r, _ = http.NewRequest(http.MethodPost, "/decode2/13", body)133 r.Header.Set(httpext.ContentType, writer.FormDataContentType())134 w = httptest.NewRecorder()135 hf.ServeHTTP(w, r)136 Equal(t, w.Code, http.StatusOK)137 Equal(t, test.ID, 0)138 Equal(t, test.Posted, "")139 Equal(t, test.MultiPartPosted, "value")140 body = &bytes.Buffer{}141 writer = multipart.NewWriter(body)142 err = writer.WriteField("MultiPartPosted", "value")143 Equal(t, err, nil)144 // Don't forget to close the multipart writer.145 // If you don't close it, your request will be missing the terminating boundary.146 err = writer.Close()147 Equal(t, err, nil)148 test = new(TestStruct)149 r, _ = http.NewRequest(http.MethodPost, "/decode3/11", body)150 r.Header.Set(httpext.ContentType, writer.FormDataContentType())151 w = httptest.NewRecorder()152 hf.ServeHTTP(w, r)153 Equal(t, w.Code, http.StatusOK)154 Equal(t, test.ID, 11)155 Equal(t, test.Posted, "")156 Equal(t, test.MultiPartPosted, "value")157 jsonBody := `{"ID":13,"Posted":"value","MultiPartPosted":"value"}`158 test = new(TestStruct)159 r, _ = http.NewRequest(http.MethodPost, "/decode/13", strings.NewReader(jsonBody))160 r.Header.Set(httpext.ContentType, httpext.ApplicationJSON)161 w = httptest.NewRecorder()162 hf.ServeHTTP(w, r)163 Equal(t, w.Code, http.StatusOK)164 Equal(t, test.ID, 13)165 Equal(t, test.Posted, "value")166 Equal(t, test.MultiPartPosted, "value")167 test = new(TestStruct)168 r, _ = http.NewRequest(http.MethodPost, "/decode/13?id=14", strings.NewReader(jsonBody))169 r.Header.Set(httpext.ContentType, httpext.ApplicationJSON)170 w = httptest.NewRecorder()171 hf.ServeHTTP(w, r)172 Equal(t, w.Code, http.StatusOK)173 Equal(t, test.ID, 14)174 Equal(t, test.Posted, "value")175 Equal(t, test.MultiPartPosted, "value")176 var buff bytes.Buffer177 gzw := gzip.NewWriter(&buff)178 defer func() {179 _ = gzw.Close()180 }()181 _, err = gzw.Write([]byte(jsonBody))182 Equal(t, err, nil)183 err = gzw.Close()184 Equal(t, err, nil)185 test = new(TestStruct)186 r, _ = http.NewRequest(http.MethodPost, "/decode/13?id=14", &buff)187 r.Header.Set(httpext.ContentType, httpext.ApplicationJSON)188 r.Header.Set(httpext.ContentEncoding, httpext.Gzip)189 w = httptest.NewRecorder()190 hf.ServeHTTP(w, r)191 Equal(t, w.Code, http.StatusOK)192 Equal(t, test.ID, 14)193 Equal(t, test.Posted, "value")194 Equal(t, test.MultiPartPosted, "value")195 test = new(TestStruct)196 r, _ = http.NewRequest(http.MethodPost, "/decode-noquery/13?id=14", strings.NewReader(jsonBody))197 r.Header.Set(httpext.ContentType, httpext.ApplicationJSON)198 w = httptest.NewRecorder()199 hf.ServeHTTP(w, r)200 Equal(t, w.Code, http.StatusOK)201 Equal(t, test.ID, 13)202 Equal(t, test.Posted, "value")203 Equal(t, test.MultiPartPosted, "value")204 xmlBody := `<TestStruct><ID>13</ID><Posted>value</Posted><MultiPartPosted>value</MultiPartPosted></TestStruct>`205 test = new(TestStruct)206 r, _ = http.NewRequest(http.MethodPost, "/decode/13", strings.NewReader(xmlBody))207 r.Header.Set(httpext.ContentType, httpext.ApplicationXML)208 w = httptest.NewRecorder()209 hf.ServeHTTP(w, r)210 Equal(t, w.Code, http.StatusOK)211 Equal(t, test.ID, 13)212 Equal(t, test.Posted, "value")213 Equal(t, test.MultiPartPosted, "value")214 test = new(TestStruct)215 r, _ = http.NewRequest(http.MethodPost, "/decode/13?id=14", strings.NewReader(xmlBody))216 r.Header.Set(httpext.ContentType, httpext.ApplicationXML)217 w = httptest.NewRecorder()218 hf.ServeHTTP(w, r)219 Equal(t, w.Code, http.StatusOK)220 Equal(t, test.ID, 14)221 Equal(t, test.Posted, "value")222 Equal(t, test.MultiPartPosted, "value")223 test = new(TestStruct)224 r, _ = http.NewRequest(http.MethodPost, "/decode-noquery/13?id=14", strings.NewReader(xmlBody))225 r.Header.Set(httpext.ContentType, httpext.ApplicationXML)226 w = httptest.NewRecorder()227 hf.ServeHTTP(w, r)228 Equal(t, w.Code, http.StatusOK)229 Equal(t, test.ID, 13)230 Equal(t, test.Posted, "value")231 Equal(t, test.MultiPartPosted, "value")232}233func TestDecodeQueryParams(t *testing.T) {234 type Test struct {235 ID int `form:"id"`236 }237 test := new(Test)238 p := New()239 p.Post("/decode-noquery/:id", func(w http.ResponseWriter, r *http.Request) {240 err := DecodeQueryParams(r, httpext.NoQueryParams, test)241 Equal(t, err, nil)242 })243 p.Post("/decode/:id", func(w http.ResponseWriter, r *http.Request) {244 err := DecodeQueryParams(r, httpext.QueryParams, test)245 Equal(t, err, nil)246 })247 hf := p.Serve()248 r, _ := http.NewRequest(http.MethodPost, "/decode/13?id=14", nil)249 w := httptest.NewRecorder()250 hf.ServeHTTP(w, r)251 Equal(t, w.Code, http.StatusOK)252 Equal(t, test.ID, 14) // 14 because 13 was added to the array of 'id' query params253 test = new(Test)254 r, _ = http.NewRequest(http.MethodPost, "/decode/13?otheridval=14", nil)255 w = httptest.NewRecorder()256 hf.ServeHTTP(w, r)257 Equal(t, w.Code, http.StatusOK)258 Equal(t, test.ID, 13)259 test = new(Test)260 r, _ = http.NewRequest(http.MethodPost, "/decode-noquery/13?id=14", nil)261 w = httptest.NewRecorder()262 hf.ServeHTTP(w, r)263 Equal(t, w.Code, http.StatusOK)264 Equal(t, test.ID, 14)265}266func TestDecodeSEOQueryParams(t *testing.T) {267 type Test struct {268 ID int `form:"id"`269 }270 test := new(Test)271 p := New()272 p.Post("/decode/:id", func(w http.ResponseWriter, r *http.Request) {273 err := DecodeSEOQueryParams(r, test)274 Equal(t, err, nil)275 })276 hf := p.Serve()277 r, _ := http.NewRequest(http.MethodPost, "/decode/13?id=14", nil)278 w := httptest.NewRecorder()279 hf.ServeHTTP(w, r)280 Equal(t, w.Code, http.StatusOK)281 Equal(t, test.ID, 13) // 13 because 14 isn;t part of the SEO query params282}283func TestAcceptedLanguages(t *testing.T) {284 req, _ := http.NewRequest("POST", "/", nil)285 req.Header.Set(httpext.AcceptedLanguage, "da, en-GB;q=0.8, en;q=0.7")286 languages := AcceptedLanguages(req)287 Equal(t, languages[0], "da")288 Equal(t, languages[1], "en-GB")289 Equal(t, languages[2], "en")290 req.Header.Del(httpext.AcceptedLanguage)291 languages = AcceptedLanguages(req)292 Equal(t, len(languages), 0)293 req.Header.Set(httpext.AcceptedLanguage, "")294 languages = AcceptedLanguages(req)295 Equal(t, len(languages), 0)296}297func TestAttachment(t *testing.T) {298 p := New()299 p.Get("/dl", func(w http.ResponseWriter, r *http.Request) {300 f, _ := os.Open("logo.png")301 if err := Attachment(w, f, "logo.png"); err != nil {302 panic(err)303 }304 })305 p.Get("/dl-unknown-type", func(w http.ResponseWriter, r *http.Request) {306 f, _ := os.Open("logo.png")307 if err := Attachment(w, f, "logo"); err != nil {308 panic(err)309 }310 })311 r, _ := http.NewRequest(http.MethodGet, "/dl", nil)312 w := &closeNotifyingRecorder{313 httptest.NewRecorder(),314 make(chan bool, 1),315 }316 hf := p.Serve()317 hf.ServeHTTP(w, r)318 Equal(t, w.Code, http.StatusOK)319 Equal(t, w.Header().Get(httpext.ContentDisposition), "attachment;filename=logo.png")320 Equal(t, w.Header().Get(httpext.ContentType), "image/png")321 Equal(t, w.Body.Len(), 20797)322 r, _ = http.NewRequest(http.MethodGet, "/dl-unknown-type", nil)323 w = &closeNotifyingRecorder{324 httptest.NewRecorder(),325 make(chan bool, 1),326 }327 hf = p.Serve()328 hf.ServeHTTP(w, r)329 Equal(t, w.Code, http.StatusOK)330 Equal(t, w.Header().Get(httpext.ContentDisposition), "attachment;filename=logo")331 Equal(t, w.Header().Get(httpext.ContentType), "application/octet-stream")332 Equal(t, w.Body.Len(), 20797)333}334func TestInline(t *testing.T) {335 p := New()336 p.Get("/dl-inline", func(w http.ResponseWriter, r *http.Request) {337 f, _ := os.Open("logo.png")338 if err := Inline(w, f, "logo.png"); err != nil {339 panic(err)340 }341 })342 p.Get("/dl-unknown-type-inline", func(w http.ResponseWriter, r *http.Request) {343 f, _ := os.Open("logo.png")344 if err := Inline(w, f, "logo"); err != nil {345 panic(err)346 }347 })348 r, _ := http.NewRequest(http.MethodGet, "/dl-inline", nil)349 w := &closeNotifyingRecorder{350 httptest.NewRecorder(),351 make(chan bool, 1),352 }353 hf := p.Serve()354 hf.ServeHTTP(w, r)355 Equal(t, w.Code, http.StatusOK)356 Equal(t, w.Header().Get(httpext.ContentDisposition), "inline;filename=logo.png")357 Equal(t, w.Header().Get(httpext.ContentType), "image/png")358 Equal(t, w.Body.Len(), 20797)359 r, _ = http.NewRequest(http.MethodGet, "/dl-unknown-type-inline", nil)360 w = &closeNotifyingRecorder{361 httptest.NewRecorder(),362 make(chan bool, 1),363 }364 hf = p.Serve()365 hf.ServeHTTP(w, r)366 Equal(t, w.Code, http.StatusOK)367 Equal(t, w.Header().Get(httpext.ContentDisposition), "inline;filename=logo")368 Equal(t, w.Header().Get(httpext.ContentType), "application/octet-stream")369 Equal(t, w.Body.Len(), 20797)370}371func TestClientIP(t *testing.T) {372 req, _ := http.NewRequest("POST", "/", nil)373 req.Header.Set("X-Real-IP", " 10.10.10.10 ")374 req.Header.Set("X-Forwarded-For", " 20.20.20.20, 30.30.30.30")375 req.RemoteAddr = " 40.40.40.40:42123 "376 Equal(t, ClientIP(req), "10.10.10.10")377 req.Header.Del("X-Real-IP")378 Equal(t, ClientIP(req), "20.20.20.20")379 req.Header.Set("X-Forwarded-For", "30.30.30.30 ")380 Equal(t, ClientIP(req), "30.30.30.30")381 req.Header.Del("X-Forwarded-For")382 Equal(t, ClientIP(req), "40.40.40.40")383}384func TestJSON(t *testing.T) {385 jsonData := `{"id":1,"name":"Patient Zero"}`386 callbackFunc := "CallbackFunc"387 p := New()388 p.Use(Gzip2)389 p.Get("/jsonstream", func(w http.ResponseWriter, r *http.Request) {390 if err := JSONStream(w, http.StatusOK, zombie{1, "Patient Zero"}); err != nil {391 panic(err)392 }393 })394 p.Get("/json", func(w http.ResponseWriter, r *http.Request) {395 if err := JSON(w, http.StatusOK, zombie{1, "Patient Zero"}); err != nil {396 panic(err)397 }398 })399 p.Get("/badjson", func(w http.ResponseWriter, r *http.Request) {400 if err := JSON(w, http.StatusOK, func() {}); err != nil {401 http.Error(w, err.Error(), http.StatusInternalServerError)402 }403 })404 p.Get("/jsonbytes", func(w http.ResponseWriter, r *http.Request) {405 b, _ := json.Marshal("Patient Zero")406 if err := JSONBytes(w, http.StatusOK, b); err != nil {407 panic(err)408 }409 })410 p.Get("/jsonp", func(w http.ResponseWriter, r *http.Request) {411 if err := JSONP(w, http.StatusOK, zombie{1, "Patient Zero"}, callbackFunc); err != nil {412 panic(err)413 }414 })415 p.Get("/badjsonp", func(w http.ResponseWriter, r *http.Request) {416 if err := JSONP(w, http.StatusOK, func() {}, callbackFunc); err != nil {417 http.Error(w, err.Error(), http.StatusInternalServerError)418 }419 })420 hf := p.Serve()421 r, _ := http.NewRequest(http.MethodGet, "/jsonstream", nil)422 w := httptest.NewRecorder()423 hf.ServeHTTP(w, r)424 Equal(t, w.Code, http.StatusOK)425 Equal(t, w.Header().Get(httpext.ContentType), httpext.ApplicationJSON)426 Equal(t, w.Body.String(), jsonData+"\n")427 r, _ = http.NewRequest(http.MethodGet, "/json", nil)428 w = httptest.NewRecorder()429 hf.ServeHTTP(w, r)430 Equal(t, w.Code, http.StatusOK)431 Equal(t, w.Header().Get(httpext.ContentType), httpext.ApplicationJSON)432 Equal(t, w.Body.String(), jsonData)433 r, _ = http.NewRequest(http.MethodGet, "/badjson", nil)434 w = httptest.NewRecorder()435 hf.ServeHTTP(w, r)436 Equal(t, w.Code, http.StatusInternalServerError)437 Equal(t, w.Header().Get(httpext.ContentType), httpext.TextPlain)438 Equal(t, w.Body.String(), "json: unsupported type: func()\n")439 r, _ = http.NewRequest(http.MethodGet, "/jsonbytes", nil)440 w = httptest.NewRecorder()441 hf.ServeHTTP(w, r)442 Equal(t, w.Code, http.StatusOK)443 Equal(t, w.Header().Get(httpext.ContentType), httpext.ApplicationJSON)444 Equal(t, w.Body.String(), "\"Patient Zero\"")445 r, _ = http.NewRequest(http.MethodGet, "/jsonp", nil)446 w = httptest.NewRecorder()447 hf.ServeHTTP(w, r)448 Equal(t, w.Code, http.StatusOK)449 Equal(t, w.Header().Get(httpext.ContentType), httpext.ApplicationJSON)450 Equal(t, w.Body.String(), callbackFunc+"("+jsonData+");")451 r, _ = http.NewRequest(http.MethodGet, "/badjsonp", nil)452 w = httptest.NewRecorder()453 hf.ServeHTTP(w, r)454 Equal(t, w.Code, http.StatusInternalServerError)455 Equal(t, w.Header().Get(httpext.ContentType), httpext.TextPlain)456 Equal(t, w.Body.String(), "json: unsupported type: func()\n")457}458func TestXML(t *testing.T) {459 xmlData := `<zombie><id>1</id><name>Patient Zero</name></zombie>`460 p := New()461 p.Use(Gzip2)462 p.Get("/xml", func(w http.ResponseWriter, r *http.Request) {463 if err := XML(w, http.StatusOK, zombie{1, "Patient Zero"}); err != nil {464 panic(err)465 }466 })467 p.Get("/badxml", func(w http.ResponseWriter, r *http.Request) {468 if err := XML(w, http.StatusOK, func() {}); err != nil {469 http.Error(w, err.Error(), http.StatusInternalServerError)470 }471 })472 p.Get("/xmlbytes", func(w http.ResponseWriter, r *http.Request) {473 b, _ := xml.Marshal(zombie{1, "Patient Zero"})474 if err := XMLBytes(w, http.StatusOK, b); err != nil {475 panic(err)476 }477 })478 hf := p.Serve()479 r, _ := http.NewRequest(http.MethodGet, "/xml", nil)480 w := httptest.NewRecorder()481 hf.ServeHTTP(w, r)482 Equal(t, w.Code, http.StatusOK)483 Equal(t, w.Header().Get(httpext.ContentType), httpext.ApplicationXML)484 Equal(t, w.Body.String(), xml.Header+xmlData)485 r, _ = http.NewRequest(http.MethodGet, "/xmlbytes", nil)486 w = httptest.NewRecorder()487 hf.ServeHTTP(w, r)488 Equal(t, w.Code, http.StatusOK)489 Equal(t, w.Header().Get(httpext.ContentType), httpext.ApplicationXML)490 Equal(t, w.Body.String(), xml.Header+xmlData)491 r, _ = http.NewRequest(http.MethodGet, "/badxml", nil)492 w = httptest.NewRecorder()493 hf.ServeHTTP(w, r)494 Equal(t, w.Code, http.StatusInternalServerError)495 Equal(t, w.Header().Get(httpext.ContentType), httpext.TextPlain)496 Equal(t, w.Body.String(), "xml: unsupported type: func()\n")497}498func TestBadParseForm(t *testing.T) {499 // successful scenarios tested under TestDecode500 p := New()501 p.Get("/users/:id", func(w http.ResponseWriter, r *http.Request) {502 if err := ParseForm(r); err != nil {503 if _, errr := w.Write([]byte(err.Error())); errr != nil {504 panic(errr)505 }506 return507 }508 })509 code, body := request(http.MethodGet, "/users/16?test=%2f%%efg", p)510 Equal(t, code, http.StatusOK)511 Equal(t, body, "invalid URL escape \"%%e\"")512}513func TestBadParseMultiPartForm(t *testing.T) {514 // successful scenarios tested under TestDecode515 p := New()516 p.Get("/users/:id", func(w http.ResponseWriter, r *http.Request) {517 if err := ParseMultipartForm(r, 10<<5); err != nil {518 if _, errr := w.Write([]byte(err.Error())); errr != nil {519 panic(err)520 }521 return522 }523 })524 code, body := requestMultiPart(http.MethodGet, "/users/16?test=%2f%%efg", p)525 Equal(t, code, http.StatusOK)526 Equal(t, body, "invalid URL escape \"%%e\"")527}528func TestEncodeToURLValues(t *testing.T) {529 type Test struct {530 Domain string `form:"domain"`531 Next string `form:"next"`532 }533 s := Test{Domain: "company.org", Next: "NIDEJ89#(@#NWJK"}534 values, err := EncodeToURLValues(s)535 Equal(t, err, nil)536 Equal(t, len(values), 2)537 Equal(t, values.Encode(), "domain=company.org&next=NIDEJ89%23%28%40%23NWJK")538}539type gzipWriter struct {540 io.Writer541 http.ResponseWriter542 sniffComplete bool543}544func (w *gzipWriter) Write(b []byte) (int, error) {545 if !w.sniffComplete {546 if w.Header().Get(httpext.ContentType) == "" {547 w.Header().Set(httpext.ContentType, http.DetectContentType(b))548 }549 w.sniffComplete = true550 }551 return w.Writer.Write(b)552}553func (w *gzipWriter) Flush() error {554 return w.Writer.(*gzip.Writer).Flush()555}556func (w *gzipWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {557 return w.ResponseWriter.(http.Hijacker).Hijack()558}559var gzipPool = sync.Pool{560 New: func() interface{} {561 return &gzipWriter{Writer: gzip.NewWriter(ioutil.Discard)}562 },563}564// Gzip returns a middleware which compresses HTTP response using gzip compression565// scheme.566func Gzip2(next http.HandlerFunc) http.HandlerFunc {567 return func(w http.ResponseWriter, r *http.Request) {568 var gz *gzipWriter569 var gzr *gzip.Writer570 w.Header().Add(httpext.Vary, httpext.AcceptEncoding)571 if strings.Contains(r.Header.Get(httpext.AcceptEncoding), httpext.Gzip) {572 gz = gzipPool.Get().(*gzipWriter)573 gz.sniffComplete = false574 gzr = gz.Writer.(*gzip.Writer)575 gzr.Reset(w)576 gz.ResponseWriter = w577 w.Header().Set(httpext.ContentEncoding, httpext.Gzip)578 w = gz579 defer func() {580 // fmt.Println(gz.sniffComplete)581 if !gz.sniffComplete {582 // We have to reset response to it's pristine state when583 // nothing is written to body.584 w.Header().Del(httpext.ContentEncoding)585 gzr.Reset(ioutil.Discard)586 }587 gzr.Close()588 gzipPool.Put(gz)589 }()590 }...

Full Screen

Full Screen

gzip.go

Source:gzip.go Github

copy

Full Screen

...10 "sync"11 httpext "github.com/go-playground/pkg/v5/net/http"12 "github.com/go-playground/pure/v5"13)14type gzipWriter struct {15 io.Writer16 http.ResponseWriter17 sniffComplete bool18}19func (w *gzipWriter) Write(b []byte) (int, error) {20 if !w.sniffComplete {21 if w.Header().Get(httpext.ContentType) == "" {22 w.Header().Set(httpext.ContentType, http.DetectContentType(b))23 }24 w.sniffComplete = true25 }26 return w.Writer.Write(b)27}28func (w *gzipWriter) Flush() error {29 return w.Writer.(*gzip.Writer).Flush()30}31func (w *gzipWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {32 return w.ResponseWriter.(http.Hijacker).Hijack()33}34var gzipPool = sync.Pool{35 New: func() interface{} {36 return &gzipWriter{Writer: gzip.NewWriter(ioutil.Discard)}37 },38}39// Gzip returns a middleware which compresses HTTP response using gzip compression40// scheme.41func Gzip(next http.HandlerFunc) http.HandlerFunc {42 return func(w http.ResponseWriter, r *http.Request) {43 w.Header().Add(httpext.Vary, httpext.AcceptEncoding)44 if strings.Contains(r.Header.Get(httpext.AcceptEncoding), httpext.Gzip) {45 gz := gzipPool.Get().(*gzipWriter)46 gz.sniffComplete = false47 gzr := gz.Writer.(*gzip.Writer)48 gzr.Reset(w)49 gz.ResponseWriter = w50 w.Header().Set(httpext.ContentEncoding, httpext.Gzip)51 w = gz52 defer func() {53 if !gz.sniffComplete {54 // We have to reset response to it's pristine state when55 // nothing is written to body.56 w.Header().Del(httpext.ContentEncoding)57 gzr.Reset(ioutil.Discard)58 }59 gzr.Close()60 gzipPool.Put(gz)61 }()62 }63 next(w, r)64 }65}66// GzipLevel returns a middleware which compresses HTTP response using gzip compression67// scheme using the level specified68func GzipLevel(level int) pure.Middleware {69 // test gzip level, then don't have to each time one is created70 // in the pool71 if _, err := gzip.NewWriterLevel(ioutil.Discard, level); err != nil {72 panic(err)73 }74 var gzipPool = sync.Pool{75 New: func() interface{} {76 z, _ := gzip.NewWriterLevel(ioutil.Discard, level)77 return &gzipWriter{Writer: z}78 },79 }80 return func(next http.HandlerFunc) http.HandlerFunc {81 return func(w http.ResponseWriter, r *http.Request) {82 w.Header().Add(httpext.Vary, httpext.AcceptEncoding)83 if strings.Contains(r.Header.Get(httpext.AcceptEncoding), httpext.Gzip) {84 gz := gzipPool.Get().(*gzipWriter)85 gz.sniffComplete = false86 gzr := gz.Writer.(*gzip.Writer)87 gzr.Reset(w)88 gz.ResponseWriter = w89 w.Header().Set(httpext.ContentEncoding, httpext.Gzip)90 w = gz91 defer func() {92 if !gz.sniffComplete {93 // We have to reset response to it's pristine state when94 // nothing is written to body.95 w.Header().Del(httpext.ContentEncoding)96 gzr.Reset(ioutil.Discard)97 }98 gzr.Close()99 gzipPool.Put(gz)100 }()101 }102 next(w, r)...

Full Screen

Full Screen

index.go

Source:index.go Github

copy

Full Screen

...3 "errors"4 "go-deploy-gke/api/httpext"5 "net/http"6)7func Index(w http.ResponseWriter, r *http.Request) {8 if r.Method != http.MethodGet {9 httpext.WriteError(w, http.StatusMethodNotAllowed, errors.New(http.StatusText(http.StatusMethodNotAllowed)))10 } else if r.RequestURI != "/" {11 httpext.WriteError(w, http.StatusNotFound, errors.New(http.StatusText(http.StatusNotFound)))12 } else {13 httpext.WriteJSON(w, http.StatusOK, map[string]interface{}{"message": "OK"})14 }15}...

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {4 fmt.Fprintln(w, "Hello, client")5 }))6 defer ts.Close()7 res, err := http.Get(ts.URL)8 if err != nil {9 panic(err)10 }11 defer res.Body.Close()12 fmt.Println(res.Header)13}14import (15func main() {16 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {17 w.WriteHeader(501)18 fmt.Fprintln(w, "Hello, client")19 }))20 defer ts.Close()21 res, err := http.Get(ts.URL)22 if err != nil {23 panic(err)24 }25 defer res.Body.Close()26 fmt.Println(res.Header)27}28import (29func main() {30 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {31 w.Header().Set("Foo", "Bar")32 fmt.Fprintln(w, "Hello, client")33 }))34 defer ts.Close()35 res, err := http.Get(ts.URL)36 if err != nil {37 panic(err)38 }39 defer res.Body.Close()40 fmt.Println(res.Header)41}42import (43func main() {44 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {45 w.Header().Set("Foo", "Bar")46 w.Header().Set("Foo", "Baz")47 fmt.Fprintln(w, "Hello, client")48 }))49 defer ts.Close()50 res, err := http.Get(ts.URL)51 if err != nil {52 panic(err)53 }54 defer res.Body.Close()55 fmt.Println(res.Header)56}57import (

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {4 fmt.Fprintf(w, "Hello World")5 })6 http.ListenAndServe(":8080", nil)7}8import (9func main() {10 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {11 w.Write([]byte("Hello World"))12 })13 http.ListenAndServe(":8080", nil)14}15import (16func main() {17 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {18 w.WriteHeader(200)19 w.Write([]byte("Hello World"))20 })21 http.ListenAndServe(":8080", nil)22}23import (24func main() {25 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {26 w.Header().Set("Content-Type", "application/json")27 w.WriteHeader(200)28 w.Write([]byte("Hello World"))29 })30 http.ListenAndServe(":8080", nil)31}32import (33func main() {34 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {35 w.Header().Set("Content-Type", "application/json")36 w.WriteHeader(200)37 w.Write([]byte("Hello World"))38 })39 http.ListenAndServe(":8080", nil)40}41import (42func main() {43 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {44 w.Header().Set("Content-Type", "application/json")45 w.WriteHeader(200)46 w.Write([]byte("Hello World"))47 })48 http.ListenAndServe(":8080", nil)49}

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func TestWrite(t *testing.T) {3 if err != nil {4 t.Fatal(err)5 }6 rr := httptest.NewRecorder()7 handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {8 fmt.Fprintln(w, "Hello, client")9 })10 handler.ServeHTTP(rr, req)11 if status := rr.Code; status != http.StatusOK {12 t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)13 }14 if rr.Body.String() != expected {15 t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected)16 }17}18import (19func TestWriteHeader(t *testing.T) {20 if err != nil {21 t.Fatal(err)22 }23 rr := httptest.NewRecorder()24 handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {25 w.WriteHeader(http.StatusNotFound)26 fmt.Fprintln(w, "Hello, client")27 })28 handler.ServeHTTP(rr, req)29 if status := rr.Code; status != http.StatusNotFound {30 t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusNotFound)31 }32 if rr.Body.String() != expected {33 t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected)34 }35}

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 if err != nil {4 fmt.Println("Error:", err)5 }6 defer resp.Body.Close()7 body, err := ioutil.ReadAll(resp.Body)8 if err != nil {9 fmt.Println("Error:", err)10 }11 fmt.Println(string(body))12}

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 beego.Router("/", &MainController{})4 beego.Run()5}6type MainController struct {7}8func (this *MainController) Get() {9 this.Ctx.WriteString("Hello World")10}11import (12func main() {13 beego.Router("/", &MainController{})14 beego.Run()15}16type MainController struct {17}18func (this *MainController) Get() {19 this.Ctx.WriteString("Hello World")20}21import (22func main() {23 beego.Router("/", &MainController{})24 beego.Run()25}26type MainController struct {27}28func (this *MainController) Get() {29 this.Ctx.WriteString("Hello World")30}31import (32func main() {33 beego.Router("/", &MainController{})34 beego.Run()35}36type MainController struct {37}38func (this *MainController) Get() {39 this.Ctx.WriteString("Hello World")40}41import (42func main() {43 beego.Router("/", &MainController{})44 beego.Run()45}46type MainController struct {47}48func (this *MainController) Get() {49 this.Ctx.WriteString("Hello World")50}51import (

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Print("Enter URL: ")4 fmt.Scan(&url)5 resp, err := http.Get(url)6 if err != nil {7 fmt.Println(err)8 }9 defer resp.Body.Close()10 dump, err := httputil.DumpResponse(resp, true)11 if err != nil {12 fmt.Println(err)13 }14 fmt.Println(string(dump))15}16Content-Type: text/html; charset=ISO-8859-117X-XSS-Protection: 1; mode=block18Set-Cookie: 1P_JAR=2019-04-29-12; expires=Wed, 29-May-2019 12:26:18 GMT; path=/; domain=.google.com

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 if err != nil {4 fmt.Println("Error in creating request")5 }6 rec := httptest.NewRecorder()7 http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {8 w.Write([]byte("Hello World!"))9 }).ServeHTTP(rec, req)10 if rec.Code != http.StatusOK {11 fmt.Println("Status code is not 200")12 }13 if rec.Body.String() != "Hello World!" {14 fmt.Println("Response is not correct")15 }16}17Content-Type: text/plain; charset=utf-818--- PASS: TestHandler (0.00s)

Full Screen

Full Screen

Write

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 f, err := os.Create("test.txt")4 if err != nil {5 log.Fatal(err)6 }7 defer f.Close()8 client := &http.Client{9 }10 if err != nil {11 log.Fatal(err)12 }13 resp, err := client.Do(req)14 if err != nil {15 log.Fatal(err)16 }17 defer resp.Body.Close()18 _, err = io.Copy(f, resp.Body)19 if err != nil {20 log.Fatal(err)21 }22 fmt.Println("Success!")23}24import (25func main() {26 f, err := os.Create("test.txt")27 if err != nil {28 log.Fatal(err)29 }30 defer f.Close()31 if err != nil {32 log.Fatal(err)33 }34 resp, err := http.DefaultClient.Do(req)35 if err != nil {36 log.Fatal(err)37 }38 defer resp.Body.Close()39 _, err = io.Copy(f, resp.Body)40 if err != nil {41 log.Fatal(err)42 }43 fmt.Println("Success!")44}45import (46func main()

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run K6 automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful