github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgControllerRunner/kmgControllerTest/MockKmgController.go (about)

     1  package kmgControllerTest
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"io/ioutil"
     7  	"mime/multipart"
     8  	"net/http"
     9  	"net/http/httptest"
    10  	"os"
    11  	"path/filepath"
    12  
    13  	"github.com/bronze1man/kmg/kmgControllerRunner"
    14  	"github.com/bronze1man/kmg/kmgNet/kmgHttp"
    15  )
    16  
    17  func CallApiByHttp(uri string, c *kmgHttp.Context) string {
    18  	return CallApiByHttpWithUploadFile(uri, c, map[string]string{})
    19  }
    20  
    21  func CallApiByHttpWithUploadFile(uri string, c *kmgHttp.Context, uploadFileList map[string]string) string {
    22  	server := httptest.NewServer(kmgControllerRunner.HttpHandler)
    23  	defer server.Close()
    24  	var response *http.Response
    25  	var err error
    26  	uri = server.URL + uri
    27  	if c.IsGet() {
    28  		response, err = http.Get(uri)
    29  		handleErr(err)
    30  	} else {
    31  		buf := &bytes.Buffer{}
    32  		formDataWriter := multipart.NewWriter(buf)
    33  		defer formDataWriter.Close()
    34  		for key, fullFilePath := range uploadFileList {
    35  			formFilePart, err := formDataWriter.CreateFormFile(key, filepath.Base(fullFilePath))
    36  			handleErr(err)
    37  			file, err := os.Open(fullFilePath)
    38  			defer file.Close()
    39  			handleErr(err)
    40  			_, err = io.Copy(formFilePart, file)
    41  			handleErr(err)
    42  		}
    43  
    44  		for key, value := range c.GetInMap() {
    45  			formDataWriter.WriteField(key, value)
    46  		}
    47  		contentType := formDataWriter.FormDataContentType()
    48  		formDataWriter.Close()
    49  		response, err = http.Post(uri, contentType, buf)
    50  		handleErr(err)
    51  	}
    52  	respContent, err := ioutil.ReadAll(response.Body)
    53  	response.Body.Close()
    54  	handleErr(err)
    55  	return string(respContent)
    56  }
    57  
    58  func handleErr(err error) {
    59  	if err != nil {
    60  		panic(err)
    61  	}
    62  }