|
5 | 5 | package ahttp
|
6 | 6 |
|
7 | 7 | import (
|
| 8 | + "bytes" |
8 | 9 | "crypto/tls"
|
9 | 10 | "mime/multipart"
|
10 | 11 | "net/http"
|
11 | 12 | "net/http/httptest"
|
12 | 13 | "net/url"
|
| 14 | + "os" |
13 | 15 | "strings"
|
14 | 16 | "testing"
|
15 | 17 |
|
@@ -193,3 +195,124 @@ func TestRequestSchemeDerived(t *testing.T) {
|
193 | 195 | func createRequestWithHost(host, remote string) *http.Request {
|
194 | 196 | return &http.Request{Host: host, RemoteAddr: remote, Header: http.Header{}}
|
195 | 197 | }
|
| 198 | + |
| 199 | +func setUpRequestSaveFile(t *testing.T) (*Request, string, func()) { |
| 200 | + buf := new(bytes.Buffer) |
| 201 | + multipartWriter := multipart.NewWriter(buf) |
| 202 | + _, err := multipartWriter.CreateFormFile("framework", "aah") |
| 203 | + assert.Nil(t, err) |
| 204 | + |
| 205 | + multipartWriter.Close() |
| 206 | + |
| 207 | + req, _ := http.NewRequest("POST", "http://localhost:8080", buf) |
| 208 | + req.Header.Add(HeaderContentType, multipartWriter.FormDataContentType()) |
| 209 | + aahReq := AcquireRequest(req) |
| 210 | + aahReq.Params.File = make(map[string][]*multipart.FileHeader) |
| 211 | + |
| 212 | + _, header, err := req.FormFile("framework") |
| 213 | + assert.Nil(t, err) |
| 214 | + |
| 215 | + aahReq.Params.File["framework"] = []*multipart.FileHeader{header} |
| 216 | + |
| 217 | + path := "testdata/aah.txt" |
| 218 | + |
| 219 | + return aahReq, path, func() { |
| 220 | + os.Remove(path) //Teardown |
| 221 | + } |
| 222 | +} |
| 223 | + |
| 224 | +func TestRequestSaveFile(t *testing.T) { |
| 225 | + aahReq, path, teardown := setUpRequestSaveFile(t) |
| 226 | + defer teardown() |
| 227 | + |
| 228 | + assert.Nil(t, aahReq.SaveFile("framework", path)) |
| 229 | + _, err := os.Stat(path) |
| 230 | + assert.Nil(t, err) |
| 231 | +} |
| 232 | + |
| 233 | +func TestRequestSaveFileFailsValidation(t *testing.T) { |
| 234 | + aahReq, path, teardown := setUpRequestSaveFile(t) |
| 235 | + defer teardown() |
| 236 | + |
| 237 | + // Empty keys should error out |
| 238 | + assert.NotNil(t, aahReq.SaveFile("", path)) |
| 239 | + |
| 240 | + // Empty path should error out |
| 241 | + assert.NotNil(t, aahReq.SaveFile("framework", "")) |
| 242 | + |
| 243 | + // If "path" is a directory, it should error out |
| 244 | + assert.NotNil(t, aahReq.SaveFile("framework", "testdata")) |
| 245 | +} |
| 246 | + |
| 247 | +func TestRequestSaveFileFailsForNotFoundFile(t *testing.T) { |
| 248 | + aahReq, path, teardown := setUpRequestSaveFile(t) |
| 249 | + defer teardown() |
| 250 | + |
| 251 | + assert.NotNil(t, aahReq.SaveFile("unknown-key", path)) |
| 252 | +} |
| 253 | + |
| 254 | +func TestRequestSaveFileCannotCreateFile(t *testing.T) { |
| 255 | + aahReq, _, teardown := setUpRequestSaveFile(t) |
| 256 | + defer teardown() |
| 257 | + |
| 258 | + assert.NotNil(t, aahReq.SaveFile("framework", "/root/aah.txt")) |
| 259 | +} |
| 260 | + |
| 261 | +func setUpRequestSaveFiles(t *testing.T) (*Request, string, func()) { |
| 262 | + buf := new(bytes.Buffer) |
| 263 | + multipartWriter := multipart.NewWriter(buf) |
| 264 | + _, err := multipartWriter.CreateFormFile("framework", "aah") |
| 265 | + assert.Nil(t, err) |
| 266 | + _, err = multipartWriter.CreateFormFile("framework2", "aah2") |
| 267 | + assert.Nil(t, err) |
| 268 | + |
| 269 | + multipartWriter.Close() |
| 270 | + |
| 271 | + req, _ := http.NewRequest("POST", "http://localhost:8080", buf) |
| 272 | + req.Header.Add(HeaderContentType, multipartWriter.FormDataContentType()) |
| 273 | + aahReq := AcquireRequest(req) |
| 274 | + aahReq.Params.File = make(map[string][]*multipart.FileHeader) |
| 275 | + |
| 276 | + _, header, err := req.FormFile("framework") |
| 277 | + assert.Nil(t, err) |
| 278 | + _, header2, err := req.FormFile("framework2") |
| 279 | + assert.Nil(t, err) |
| 280 | + |
| 281 | + aahReq.Params.File["framework"] = []*multipart.FileHeader{header, header2} |
| 282 | + |
| 283 | + dir := "testdata/upload" |
| 284 | + |
| 285 | + os.Mkdir(dir, 0755) |
| 286 | + return aahReq, dir, func() { |
| 287 | + os.RemoveAll(dir) |
| 288 | + } |
| 289 | +} |
| 290 | + |
| 291 | +func TestRequestSaveFiles(t *testing.T) { |
| 292 | + aahReq, dir, teardown := setUpRequestSaveFiles(t) |
| 293 | + defer teardown() |
| 294 | + |
| 295 | + assert.Nil(t, aahReq.SaveFiles("framework", dir)) |
| 296 | + _, err := os.Stat(dir + "/aah") |
| 297 | + assert.Nil(t, err) |
| 298 | + _, err = os.Stat(dir + "/aah2") |
| 299 | + assert.Nil(t, err) |
| 300 | +} |
| 301 | + |
| 302 | +func TestRequestSaveFilesFailsVaildation(t *testing.T) { |
| 303 | + aahReq, dir, teardown := setUpRequestSaveFiles(t) |
| 304 | + defer teardown() |
| 305 | + |
| 306 | + // Empty key |
| 307 | + assert.NotNil(t, aahReq.SaveFiles("", dir)) |
| 308 | + |
| 309 | + // Empty directory |
| 310 | + assert.NotNil(t, aahReq.SaveFiles("key", "")) |
| 311 | +} |
| 312 | + |
| 313 | +func TestRequestSaveFilesCannotCreateFile(t *testing.T) { |
| 314 | + aahReq, _, teardown := setUpRequestSaveFiles(t) |
| 315 | + defer teardown() |
| 316 | + |
| 317 | + assert.NotNil(t, aahReq.SaveFiles("framework", "/root")) |
| 318 | +} |
0 commit comments