pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/req/req_test.go (about) 1 package req 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "bytes" 12 "errors" 13 "io" 14 "io/ioutil" 15 "net" 16 "net/http" 17 "sort" 18 "strings" 19 "testing" 20 "time" 21 22 . "pkg.re/essentialkaos/check.v1" 23 ) 24 25 // ////////////////////////////////////////////////////////////////////////////////// // 26 27 const ( 28 _URL_GET = "/get" 29 _URL_POST = "/post" 30 _URL_POST_MULTI = "/post-multi" 31 _URL_PUT = "/put" 32 _URL_HEAD = "/head" 33 _URL_PATCH = "/patch" 34 _URL_DELETE = "/delete" 35 _URL_QUERY = "/query" 36 _URL_HEADERS = "/headers" 37 _URL_CONTENT_TYPE = "/content-type" 38 _URL_ACCEPT = "/accept" 39 _URL_USER_AGENT = "/user-agent" 40 _URL_BASIC_AUTH = "/basic-auth" 41 _URL_STRING_RESP = "/string-response" 42 _URL_JSON_RESP = "/json-response" 43 _URL_DISCARD = "/discard" 44 ) 45 46 const ( 47 _TEST_CONTENT_TYPE = "application/json" 48 _TEST_ACCEPT = "application/vnd.example.api+json;version=2" 49 _TEST_BASIC_AUTH_USER = "admin" 50 _TEST_BASIC_AUTH_PASS = "password" 51 _TEST_STRING_RESP = "Test String Response" 52 ) 53 54 // ////////////////////////////////////////////////////////////////////////////////// // 55 56 func Test(t *testing.T) { TestingT(t) } 57 58 type ReqSuite struct { 59 url string 60 port string 61 listener net.Listener 62 } 63 64 type TestStruct struct { 65 String string `json:"string"` 66 Integer int `json:"integer"` 67 Boolean bool `json:"boolean"` 68 } 69 70 // ////////////////////////////////////////////////////////////////////////////////// // 71 72 var _ = Suite(&ReqSuite{}) 73 74 // ////////////////////////////////////////////////////////////////////////////////// // 75 76 func (s *ReqSuite) SetUpSuite(c *C) { 77 s.port = "30001" 78 s.url = "http://127.0.0.1:" + s.port 79 80 SetDialTimeout(60.0) 81 SetRequestTimeout(60.0) 82 SetUserAgent("req-test", "5", "Test/5.1.1", "Magic/4.2.1") 83 84 go runHTTPServer(s, c) 85 86 time.Sleep(time.Second) 87 } 88 89 func (s *ReqSuite) TearDownSuite(c *C) { 90 if s.listener != nil { 91 s.listener.Close() 92 } 93 } 94 95 func (s *ReqSuite) TestMethodGet(c *C) { 96 getResp, err := Request{URL: s.url + _URL_GET, Method: GET}.Do() 97 98 c.Assert(err, IsNil) 99 c.Assert(getResp.StatusCode, Equals, 200) 100 101 getResp, err = Global.Do(Request{URL: s.url + _URL_GET, Method: GET}) 102 103 c.Assert(err, IsNil) 104 c.Assert(getResp.StatusCode, Equals, 200) 105 106 getResp, err = Request{URL: s.url + _URL_GET}.Do() 107 108 c.Assert(err, IsNil) 109 c.Assert(getResp.StatusCode, Equals, 200) 110 111 getResp, err = Request{URL: s.url + _URL_GET}.Get() 112 113 c.Assert(err, IsNil) 114 c.Assert(getResp.StatusCode, Equals, 200) 115 116 getResp, err = Global.Get(Request{URL: s.url + _URL_GET}) 117 118 c.Assert(err, IsNil) 119 c.Assert(getResp.StatusCode, Equals, 200) 120 } 121 122 func (s *ReqSuite) TestMethodPost(c *C) { 123 postResp, err := Request{URL: s.url + _URL_POST, Method: POST}.Do() 124 125 c.Assert(err, IsNil) 126 c.Assert(postResp.StatusCode, Equals, 200) 127 128 postResp, err = Global.Do(Request{URL: s.url + _URL_POST, Method: POST}) 129 130 c.Assert(err, IsNil) 131 c.Assert(postResp.StatusCode, Equals, 200) 132 133 postResp, err = Request{URL: s.url + _URL_POST}.Post() 134 135 c.Assert(err, IsNil) 136 c.Assert(postResp.StatusCode, Equals, 200) 137 138 postResp, err = Global.Post(Request{URL: s.url + _URL_POST}) 139 140 c.Assert(err, IsNil) 141 c.Assert(postResp.StatusCode, Equals, 200) 142 } 143 144 func (s *ReqSuite) TestMethodPostFile(c *C) { 145 tmpDir := c.MkDir() 146 tmpFile := tmpDir + "/testMultipart.bin" 147 148 err := ioutil.WriteFile(tmpFile, []byte(`DATA8913FIN`), 0644) 149 150 r := Request{URL: s.url + _URL_POST_MULTI, Method: POST} 151 postResp, err := r.PostFile(tmpFile, "file", map[string]string{"abc": "123"}) 152 153 c.Assert(err, IsNil) 154 c.Assert(postResp.StatusCode, Equals, 200) 155 156 postResp, err = r.PostFile(tmpDir+"/unknown", "file", map[string]string{"abc": "123"}) 157 158 c.Assert(err, NotNil) 159 160 useFakeFormGenerator = true 161 postResp, err = r.PostFile(tmpFile, "file", map[string]string{"abc": "123"}) 162 163 c.Assert(err, NotNil) 164 165 useFakeFormGenerator = false 166 167 ioCopyFunc = func(dst io.Writer, src io.Reader) (int64, error) { return 0, errors.New("") } 168 postResp, err = r.PostFile(tmpFile, "file", map[string]string{"abc": "123"}) 169 170 c.Assert(err, NotNil) 171 } 172 173 func (s *ReqSuite) TestMethodPut(c *C) { 174 putResp, err := Request{URL: s.url + _URL_PUT, Method: PUT}.Do() 175 176 c.Assert(err, IsNil) 177 c.Assert(putResp.StatusCode, Equals, 200) 178 179 putResp, err = Global.Do(Request{URL: s.url + _URL_PUT, Method: PUT}) 180 181 c.Assert(err, IsNil) 182 c.Assert(putResp.StatusCode, Equals, 200) 183 184 putResp, err = Request{URL: s.url + _URL_PUT}.Put() 185 186 c.Assert(err, IsNil) 187 c.Assert(putResp.StatusCode, Equals, 200) 188 189 putResp, err = Global.Put(Request{URL: s.url + _URL_PUT}) 190 191 c.Assert(err, IsNil) 192 c.Assert(putResp.StatusCode, Equals, 200) 193 } 194 195 func (s *ReqSuite) TestMethodHead(c *C) { 196 headResp, err := Request{URL: s.url + _URL_HEAD, Method: HEAD}.Do() 197 198 c.Assert(err, IsNil) 199 c.Assert(headResp.StatusCode, Equals, 200) 200 201 headResp, err = Global.Do(Request{URL: s.url + _URL_HEAD, Method: HEAD}) 202 203 c.Assert(err, IsNil) 204 c.Assert(headResp.StatusCode, Equals, 200) 205 206 headResp, err = Request{URL: s.url + _URL_HEAD}.Head() 207 208 c.Assert(err, IsNil) 209 c.Assert(headResp.StatusCode, Equals, 200) 210 211 headResp, err = Global.Head(Request{URL: s.url + _URL_HEAD}) 212 213 c.Assert(err, IsNil) 214 c.Assert(headResp.StatusCode, Equals, 200) 215 } 216 217 func (s *ReqSuite) TestMethodPatch(c *C) { 218 patchResp, err := Request{URL: s.url + _URL_PATCH, Method: PATCH}.Do() 219 220 c.Assert(err, IsNil) 221 c.Assert(patchResp.StatusCode, Equals, 200) 222 223 patchResp, err = Global.Do(Request{URL: s.url + _URL_PATCH, Method: PATCH}) 224 225 c.Assert(err, IsNil) 226 c.Assert(patchResp.StatusCode, Equals, 200) 227 228 patchResp, err = Request{URL: s.url + _URL_PATCH}.Patch() 229 230 c.Assert(err, IsNil) 231 c.Assert(patchResp.StatusCode, Equals, 200) 232 233 patchResp, err = Global.Patch(Request{URL: s.url + _URL_PATCH}) 234 235 c.Assert(err, IsNil) 236 c.Assert(patchResp.StatusCode, Equals, 200) 237 } 238 239 func (s *ReqSuite) TestMethodDelete(c *C) { 240 deleteResp, err := Request{URL: s.url + _URL_DELETE, Method: DELETE}.Do() 241 242 c.Assert(err, IsNil) 243 c.Assert(deleteResp.StatusCode, Equals, 200) 244 245 deleteResp, err = Global.Do(Request{URL: s.url + _URL_DELETE, Method: DELETE}) 246 247 c.Assert(err, IsNil) 248 c.Assert(deleteResp.StatusCode, Equals, 200) 249 250 deleteResp, err = Request{URL: s.url + _URL_DELETE}.Delete() 251 252 c.Assert(err, IsNil) 253 c.Assert(deleteResp.StatusCode, Equals, 200) 254 255 deleteResp, err = Global.Delete(Request{URL: s.url + _URL_DELETE}) 256 257 c.Assert(err, IsNil) 258 c.Assert(deleteResp.StatusCode, Equals, 200) 259 } 260 261 func (s *ReqSuite) TestQuery(c *C) { 262 resp, err := Request{ 263 URL: s.url + _URL_QUERY, 264 Query: Query{ 265 "test01": "john", 266 "test02": 1398, 267 "test03": true, 268 "test04": false, 269 "test05": int(1), 270 "test06": int8(2), 271 "test07": int16(3), 272 "test08": int32(4), 273 "test09": int64(5), 274 "test10": uint(6), 275 "test11": uint8(7), 276 "test12": uint16(8), 277 "test13": uint32(9), 278 "test14": uint64(10), 279 "test15": float32(12.35), 280 "test16": float64(56.7895), 281 "test17": "", 282 "test18": nil, 283 }, 284 }.Do() 285 286 c.Assert(err, IsNil) 287 c.Assert(resp.StatusCode, Equals, 200) 288 } 289 290 func (s *ReqSuite) TestHeaders(c *C) { 291 resp, err := Request{ 292 URL: s.url + _URL_HEADERS, 293 Headers: Headers{ 294 "Header1": "Value1", 295 "Header2": "Value2", 296 }, 297 }.Do() 298 299 c.Assert(err, IsNil) 300 c.Assert(resp.StatusCode, Equals, 200) 301 } 302 303 func (s *ReqSuite) TestContentType(c *C) { 304 resp, err := Request{ 305 URL: s.url + _URL_CONTENT_TYPE, 306 ContentType: _TEST_CONTENT_TYPE, 307 }.Do() 308 309 c.Assert(err, IsNil) 310 c.Assert(resp.StatusCode, Equals, 200) 311 } 312 313 func (s *ReqSuite) TestAccept(c *C) { 314 resp, err := Request{ 315 URL: s.url + _URL_ACCEPT, 316 Accept: _TEST_ACCEPT, 317 }.Do() 318 319 c.Assert(err, IsNil) 320 c.Assert(resp.StatusCode, Equals, 200) 321 } 322 323 func (s *ReqSuite) TestClose(c *C) { 324 getResp, err := Request{ 325 URL: s.url + _URL_GET, 326 Close: true, 327 }.Get() 328 329 c.Assert(err, IsNil) 330 c.Assert(getResp.StatusCode, Equals, 200) 331 } 332 333 func (s *ReqSuite) TestUserAgent(c *C) { 334 resp, err := Request{ 335 URL: s.url + _URL_USER_AGENT, 336 }.Do() 337 338 c.Assert(err, IsNil) 339 c.Assert(resp.StatusCode, Equals, 200) 340 } 341 342 func (s *ReqSuite) TestBasicAuth(c *C) { 343 resp, err := Request{ 344 URL: s.url + _URL_BASIC_AUTH, 345 BasicAuthUsername: _TEST_BASIC_AUTH_USER, 346 BasicAuthPassword: _TEST_BASIC_AUTH_PASS, 347 }.Do() 348 349 c.Assert(err, IsNil) 350 c.Assert(resp.StatusCode, Equals, 200) 351 } 352 353 func (s *ReqSuite) TestStringResp(c *C) { 354 resp, err := Request{ 355 URL: s.url + _URL_STRING_RESP, 356 }.Do() 357 358 c.Assert(err, IsNil) 359 c.Assert(resp.StatusCode, Equals, 200) 360 c.Assert(resp.String(), Equals, _TEST_STRING_RESP) 361 } 362 363 func (s *ReqSuite) TestBytesResp(c *C) { 364 resp, err := Request{ 365 URL: s.url + _URL_STRING_RESP, 366 }.Do() 367 368 c.Assert(err, IsNil) 369 c.Assert(resp.StatusCode, Equals, 200) 370 c.Assert(resp.Bytes(), DeepEquals, []byte(_TEST_STRING_RESP)) 371 } 372 373 func (s *ReqSuite) TestJSONResp(c *C) { 374 resp, err := Request{ 375 URL: s.url + _URL_JSON_RESP, 376 }.Do() 377 378 c.Assert(err, IsNil) 379 c.Assert(resp.StatusCode, Equals, 200) 380 381 testStruct := &TestStruct{} 382 383 err = resp.JSON(testStruct) 384 385 c.Assert(err, IsNil) 386 c.Assert(testStruct.String, Equals, "test") 387 c.Assert(testStruct.Integer, Equals, 912) 388 c.Assert(testStruct.Boolean, Equals, true) 389 } 390 391 func (s *ReqSuite) TestDiscard(c *C) { 392 resp, err := Request{ 393 URL: s.url + _URL_JSON_RESP, 394 }.Do() 395 396 c.Assert(err, IsNil) 397 c.Assert(resp.StatusCode, Equals, 200) 398 399 resp.Discard() 400 401 resp, err = Request{ 402 URL: s.url + _URL_DISCARD, 403 AutoDiscard: true, 404 }.Do() 405 406 c.Assert(err, IsNil) 407 c.Assert(resp.StatusCode, Equals, 500) 408 } 409 410 func (s *ReqSuite) TestEncoding(c *C) { 411 resp, err := Request{ 412 URL: s.url + "/404", 413 Body: "DEADBEAF", 414 }.Do() 415 416 c.Assert(err, IsNil) 417 c.Assert(resp, NotNil) 418 419 resp, err = Request{ 420 URL: s.url + "/404", 421 Body: []byte("DEADBEAF"), 422 }.Do() 423 424 c.Assert(err, IsNil) 425 c.Assert(resp, NotNil) 426 427 r := bytes.NewReader([]byte("DEADBEAF")) 428 429 resp, err = Request{ 430 URL: s.url + "/404", 431 Body: r, 432 }.Do() 433 434 c.Assert(err, IsNil) 435 c.Assert(resp, NotNil) 436 437 k := struct{ t string }{"DEADBEAF"} 438 439 resp, err = Request{ 440 URL: s.url + "/404", 441 Body: k, 442 }.Do() 443 444 c.Assert(err, IsNil) 445 c.Assert(resp, NotNil) 446 447 resp, err = Request{ 448 URL: s.url + "/404", 449 Body: func() { return }, 450 }.Do() 451 452 c.Assert(err, NotNil) 453 c.Assert(resp, IsNil) 454 } 455 456 func (s *ReqSuite) TestRequestErrors(c *C) { 457 resp, err := Request{}.Do() 458 459 c.Assert(resp, IsNil) 460 c.Assert(err, NotNil) 461 462 resp, err = Request{URL: "ABCD"}.Do() 463 464 c.Assert(resp, IsNil) 465 c.Assert(err, NotNil) 466 467 resp, err = Request{URL: "http://127.0.0.1:60000"}.Do() 468 469 c.Assert(resp, IsNil) 470 c.Assert(err, NotNil) 471 472 resp, err = Request{URL: "%gh&%ij"}.Do() 473 474 c.Assert(resp, IsNil) 475 c.Assert(err, NotNil) 476 477 resp, err = Request{Method: "ЩУП", URL: "http://127.0.0.1"}.Do() 478 479 c.Assert(resp, IsNil) 480 c.Assert(err, NotNil) 481 482 e1 := RequestError{ERROR_BODY_ENCODE, "Test 1"} 483 e2 := RequestError{ERROR_CREATE_REQUEST, "Test 2"} 484 e3 := RequestError{ERROR_SEND_REQUEST, "Test 3"} 485 486 c.Assert(e1.Error(), Equals, "Can't encode request body (Test 1)") 487 c.Assert(e2.Error(), Equals, "Can't create request struct (Test 2)") 488 c.Assert(e3.Error(), Equals, "Can't send request (Test 3)") 489 } 490 491 func (s *ReqSuite) TestEngineInit(c *C) { 492 var eng *Engine 493 494 eng = &Engine{} 495 eng.Init() 496 497 eng = &Engine{Transport: &http.Transport{}} 498 eng.Init() 499 } 500 501 func (s *ReqSuite) TestEngineErrors(c *C) { 502 var eng *Engine 503 504 resp, err := eng.Do(Request{URL: "https://essentialkaos.com"}) 505 506 c.Assert(err, NotNil) 507 c.Assert(resp, IsNil) 508 509 eng = &Engine{} 510 eng.Init() 511 512 eng.Dialer = nil 513 514 resp, err = eng.Do(Request{URL: "https://essentialkaos.com"}) 515 516 c.Assert(err, NotNil) 517 c.Assert(resp, IsNil) 518 519 eng = &Engine{} 520 eng.Init() 521 eng.Transport = nil 522 523 resp, err = eng.Do(Request{URL: "https://essentialkaos.com"}) 524 525 c.Assert(err, NotNil) 526 c.Assert(resp, IsNil) 527 528 eng = &Engine{} 529 eng.Init() 530 eng.Init() 531 eng.Client = nil 532 533 resp, err = eng.Do(Request{URL: "https://essentialkaos.com"}) 534 535 c.Assert(err, NotNil) 536 c.Assert(resp, IsNil) 537 } 538 539 func (s *ReqSuite) TestIsURL(c *C) { 540 c.Assert(isURL(""), Equals, false) 541 c.Assert(isURL("http://domain.com"), Equals, true) 542 c.Assert(isURL("https://domain.com"), Equals, true) 543 c.Assert(isURL("ftp://domain.com"), Equals, true) 544 c.Assert(isURL("test://domain.com"), Equals, false) 545 } 546 547 func (s *ReqSuite) TestQueryEncoding(c *C) { 548 q := Query{} 549 c.Assert(q.Encode(), Equals, "") 550 551 q = Query{ 552 "a": 1, 553 "b": "abcd", 554 "c": "", 555 "d": nil, 556 } 557 558 qr := strings.Split(q.Encode(), "&") 559 sort.Strings(qr) 560 qrs := strings.Join(qr, "&") 561 562 c.Assert(qrs, Equals, "a=1&b=abcd&c&d") 563 } 564 565 func (s *ReqSuite) BenchmarkGetOk(c *C) { 566 for i := 0; i < c.N; i++ { 567 getResp, err := Request{URL: s.url + _URL_GET, Method: GET}.Do() 568 569 c.Assert(err, IsNil) 570 c.Assert(getResp.StatusCode, Equals, 200) 571 } 572 } 573 574 func (s *ReqSuite) BenchmarkGetErr(c *C) { 575 for i := 0; i < c.N; i++ { 576 Request{URL: "--", Method: GET}.Do() 577 } 578 } 579 580 // ////////////////////////////////////////////////////////////////////////////////// // 581 582 func runHTTPServer(s *ReqSuite, c *C) { 583 server := &http.Server{ 584 Handler: http.NewServeMux(), 585 ReadTimeout: 10 * time.Second, 586 WriteTimeout: 10 * time.Second, 587 MaxHeaderBytes: 1 << 20, 588 } 589 590 listener, err := net.Listen("tcp", ":"+s.port) 591 592 if err != nil { 593 c.Fatal(err.Error()) 594 } 595 596 s.listener = listener 597 598 server.Handler.(*http.ServeMux).HandleFunc(_URL_GET, getRequestHandler) 599 server.Handler.(*http.ServeMux).HandleFunc(_URL_POST, postRequestHandler) 600 server.Handler.(*http.ServeMux).HandleFunc(_URL_POST_MULTI, postMultiRequestHandler) 601 server.Handler.(*http.ServeMux).HandleFunc(_URL_PUT, putRequestHandler) 602 server.Handler.(*http.ServeMux).HandleFunc(_URL_HEAD, headRequestHandler) 603 server.Handler.(*http.ServeMux).HandleFunc(_URL_PATCH, patchRequestHandler) 604 server.Handler.(*http.ServeMux).HandleFunc(_URL_DELETE, deleteRequestHandler) 605 server.Handler.(*http.ServeMux).HandleFunc(_URL_QUERY, queryRequestHandler) 606 server.Handler.(*http.ServeMux).HandleFunc(_URL_HEADERS, headersRequestHandler) 607 server.Handler.(*http.ServeMux).HandleFunc(_URL_CONTENT_TYPE, contentTypeRequestHandler) 608 server.Handler.(*http.ServeMux).HandleFunc(_URL_ACCEPT, acceptRequestHandler) 609 server.Handler.(*http.ServeMux).HandleFunc(_URL_USER_AGENT, uaRequestHandler) 610 server.Handler.(*http.ServeMux).HandleFunc(_URL_BASIC_AUTH, basicAuthRequestHandler) 611 server.Handler.(*http.ServeMux).HandleFunc(_URL_STRING_RESP, stringRespRequestHandler) 612 server.Handler.(*http.ServeMux).HandleFunc(_URL_JSON_RESP, jsonRespRequestHandler) 613 server.Handler.(*http.ServeMux).HandleFunc(_URL_DISCARD, discardRequestHandler) 614 615 err = server.Serve(listener) 616 617 if err != nil { 618 c.Fatal(err.Error()) 619 } 620 } 621 622 func getRequestHandler(w http.ResponseWriter, r *http.Request) { 623 if r.Method != GET { 624 w.WriteHeader(801) 625 return 626 } 627 628 w.WriteHeader(200) 629 } 630 631 func postRequestHandler(w http.ResponseWriter, r *http.Request) { 632 if r.Method != POST { 633 w.WriteHeader(802) 634 return 635 } 636 637 w.WriteHeader(200) 638 } 639 640 func postMultiRequestHandler(w http.ResponseWriter, r *http.Request) { 641 if r.Method != POST { 642 w.WriteHeader(802) 643 return 644 } 645 646 f, h, err := r.FormFile("file") 647 648 if f == nil { 649 w.WriteHeader(851) 650 return 651 } 652 653 if h == nil { 654 w.WriteHeader(852) 655 return 656 } 657 658 if err != nil { 659 w.WriteHeader(853) 660 return 661 } 662 663 w.WriteHeader(200) 664 } 665 666 func putRequestHandler(w http.ResponseWriter, r *http.Request) { 667 if r.Method != PUT { 668 w.WriteHeader(803) 669 return 670 } 671 672 w.WriteHeader(200) 673 } 674 func headRequestHandler(w http.ResponseWriter, r *http.Request) { 675 if r.Method != HEAD { 676 w.WriteHeader(804) 677 return 678 } 679 680 w.WriteHeader(200) 681 } 682 683 func patchRequestHandler(w http.ResponseWriter, r *http.Request) { 684 if r.Method != PATCH { 685 w.WriteHeader(805) 686 return 687 } 688 689 w.WriteHeader(200) 690 } 691 692 func deleteRequestHandler(w http.ResponseWriter, r *http.Request) { 693 if r.Method != DELETE { 694 w.WriteHeader(806) 695 return 696 } 697 698 w.WriteHeader(200) 699 } 700 701 func queryRequestHandler(w http.ResponseWriter, r *http.Request) { 702 query := r.URL.Query() 703 704 switch { 705 case query.Get("test01") != "john": 706 w.WriteHeader(901) 707 return 708 case query.Get("test02") != "1398": 709 w.WriteHeader(902) 710 return 711 case query.Get("test03") != "true": 712 w.WriteHeader(903) 713 return 714 case query.Get("test04") != "false": 715 w.WriteHeader(904) 716 return 717 case query.Get("test05") != "1": 718 w.WriteHeader(905) 719 return 720 case query.Get("test06") != "2": 721 w.WriteHeader(906) 722 return 723 case query.Get("test07") != "3": 724 w.WriteHeader(907) 725 return 726 case query.Get("test08") != "4": 727 w.WriteHeader(908) 728 return 729 case query.Get("test09") != "5": 730 w.WriteHeader(909) 731 return 732 case query.Get("test10") != "6": 733 w.WriteHeader(910) 734 return 735 case query.Get("test11") != "7": 736 w.WriteHeader(911) 737 return 738 case query.Get("test12") != "8": 739 w.WriteHeader(912) 740 return 741 case query.Get("test13") != "9": 742 w.WriteHeader(913) 743 return 744 case query.Get("test14") != "10": 745 w.WriteHeader(914) 746 return 747 case query.Get("test15") != "12.35": 748 w.WriteHeader(915) 749 return 750 case query.Get("test16") != "56.7895": 751 w.WriteHeader(916) 752 return 753 } 754 755 _, test17 := query["test17"] 756 757 if !test17 { 758 w.WriteHeader(917) 759 return 760 } 761 762 _, test18 := query["test18"] 763 764 if !test18 { 765 w.WriteHeader(918) 766 return 767 } 768 769 w.WriteHeader(200) 770 } 771 772 func headersRequestHandler(w http.ResponseWriter, r *http.Request) { 773 header1 := r.Header["Header1"] 774 775 if len(header1) != 1 { 776 w.WriteHeader(910) 777 return 778 } 779 780 if header1[0] != "Value1" { 781 w.WriteHeader(911) 782 return 783 } 784 785 header2 := r.Header["Header2"] 786 787 if len(header2) != 1 { 788 w.WriteHeader(912) 789 return 790 } 791 792 if header2[0] != "Value2" { 793 w.WriteHeader(913) 794 return 795 } 796 797 w.WriteHeader(200) 798 } 799 800 func contentTypeRequestHandler(w http.ResponseWriter, r *http.Request) { 801 header := r.Header["Content-Type"] 802 803 if len(header) != 1 { 804 w.WriteHeader(920) 805 return 806 } 807 808 if header[0] != _TEST_CONTENT_TYPE { 809 w.WriteHeader(921) 810 return 811 } 812 813 w.WriteHeader(200) 814 } 815 816 func acceptRequestHandler(w http.ResponseWriter, r *http.Request) { 817 header := r.Header["Accept"] 818 819 if len(header) != 1 { 820 w.WriteHeader(930) 821 return 822 } 823 824 if header[0] != _TEST_ACCEPT { 825 w.WriteHeader(931) 826 return 827 } 828 829 w.WriteHeader(200) 830 } 831 832 func uaRequestHandler(w http.ResponseWriter, r *http.Request) { 833 if r.UserAgent() != Global.UserAgent { 834 w.WriteHeader(940) 835 return 836 } 837 838 w.WriteHeader(200) 839 } 840 841 func basicAuthRequestHandler(w http.ResponseWriter, r *http.Request) { 842 user, pass, ok := r.BasicAuth() 843 844 if !ok { 845 w.WriteHeader(950) 846 return 847 } 848 849 if user != _TEST_BASIC_AUTH_USER { 850 w.WriteHeader(951) 851 return 852 } 853 854 if pass != _TEST_BASIC_AUTH_PASS { 855 w.WriteHeader(952) 856 return 857 } 858 859 w.WriteHeader(200) 860 } 861 862 func stringRespRequestHandler(w http.ResponseWriter, r *http.Request) { 863 w.Write([]byte(_TEST_STRING_RESP)) 864 } 865 866 func jsonRespRequestHandler(w http.ResponseWriter, r *http.Request) { 867 w.Write([]byte(`{ 868 "string": "test", 869 "integer": 912, 870 "boolean": true }`, 871 )) 872 } 873 874 func discardRequestHandler(w http.ResponseWriter, r *http.Request) { 875 w.WriteHeader(500) 876 877 w.Write([]byte(`{ 878 "string": "test", 879 "integer": 912, 880 "boolean": true }`, 881 )) 882 }