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 }