123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package base
- import (
- "bytes"
- "encoding/json"
- "io"
- "io/ioutil"
- "mime/multipart"
- "net/http"
- "net/url"
- "os"
- "path/filepath"
- "strings"
- "github.com/stretchr/testify/assert"
- )
- type UploadFile struct {
- Name string
- Filepath string
- }
- func HttpGet(url string, headers map[string]string) ([]byte, int, error) {
- return httpRequest(http.MethodGet, url, headers, "")
- }
- func HttpDelete(url string, headers map[string]string) ([]byte, int, error) {
- return httpRequest(http.MethodDelete, url, headers, "")
- }
- func HttpPut(url string, headers map[string]string, reqBody string) ([]byte, int, error) {
- return httpRequest(http.MethodPut, url, headers, reqBody)
- }
- func HttpPost(url string, headers map[string]string, reqBody string) ([]byte, int, error) {
- return httpRequest(http.MethodPost, url, headers, reqBody)
- }
- func httpRequest(method, url string, headers map[string]string, reqBody string) ([]byte, int, error) {
- var requestBody = new(bytes.Buffer)
- if reqBody != "" {
- requestBody = bytes.NewBuffer([]byte(reqBody))
- }
- req, err := http.NewRequest(method, url, requestBody)
- if err != nil {
- return nil, 0, err
- }
- req.Close = true
- // set header
- for key, val := range headers {
- req.Header.Add(key, val)
- }
- client := &http.Client{}
- resp, err := client.Do(req)
- if err != nil {
- return nil, 0, err
- }
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- return nil, 0, err
- }
- return body, resp.StatusCode, nil
- }
- func BatchTestServerPort(times int, headers map[string]string, queryString string) map[string]int {
- t := getTestingHandle()
- url := APISIXSingleWorkerHost + "/server_port"
- if queryString != "" {
- url = url + "?" + queryString
- }
- res := map[string]int{}
- for i := 0; i < times; i++ {
- bodyByte, status, err := HttpGet(url, headers)
- assert.Nil(t, err)
- assert.Equal(t, 200, status)
- body := string(bodyByte)
- if _, ok := res[body]; !ok {
- res[body] = 1
- } else {
- res[body] += 1
- }
- }
- return res
- }
- func GetReader(reqParams map[string]string, contentType string, files []UploadFile) (io.Reader, string, error) {
- if strings.Index(contentType, "json") > -1 {
- bytesData, _ := json.Marshal(reqParams)
- return bytes.NewReader(bytesData), contentType, nil
- }
- if files != nil {
- body := &bytes.Buffer{}
- writer := multipart.NewWriter(body)
- for _, uploadFile := range files {
- file, err := os.Open(uploadFile.Filepath)
- if err != nil {
- return nil, "", err
- }
- defer file.Close()
- part, err := writer.CreateFormFile(uploadFile.Name, filepath.Base(uploadFile.Filepath))
- if err != nil {
- return nil, "", err
- }
- _, err = io.Copy(part, file)
- }
- for k, v := range reqParams {
- if err := writer.WriteField(k, v); err != nil {
- return nil, "", err
- }
- }
- if err := writer.Close(); err != nil {
- return nil, "", err
- }
- return body, writer.FormDataContentType(), nil
- }
- urlValues := url.Values{}
- for key, val := range reqParams {
- urlValues.Set(key, val)
- }
- reqBody := urlValues.Encode()
- return strings.NewReader(reqBody), contentType, nil
- }
|