(zipChecks func(zipReader *zip.Reader))
| 342 | const maxMultipartResponseSizeInBytes = 4096 |
| 343 | |
| 344 | func uploadBodyMatcher(zipChecks func(zipReader *zip.Reader)) func(*http.Request) { |
| 345 | return func(request *http.Request) { |
| 346 | defer GinkgoRecover() |
| 347 | err := request.ParseMultipartForm(maxMultipartResponseSizeInBytes) |
| 348 | if err != nil { |
| 349 | Fail(fmt.Sprintf("Failed parsing multipart form %v", err)) |
| 350 | return |
| 351 | } |
| 352 | defer request.MultipartForm.RemoveAll() |
| 353 | |
| 354 | Expect(len(request.MultipartForm.Value)).To(Equal(1), "Should have 1 value") |
| 355 | valuePart, ok := request.MultipartForm.Value["resources"] |
| 356 | Expect(ok).To(BeTrue(), "Resource manifest not present") |
| 357 | Expect(len(valuePart)).To(Equal(1), "Wrong number of values") |
| 358 | |
| 359 | resourceManifest := valuePart[0] |
| 360 | chompedResourceManifest := strings.Replace(resourceManifest, "\n", "", -1) |
| 361 | Expect(chompedResourceManifest).To(Equal(unmatchedResources), "Resources do not match") |
| 362 | |
| 363 | Expect(len(request.MultipartForm.File)).To(Equal(1), "Wrong number of files") |
| 364 | |
| 365 | fileHeaders, ok := request.MultipartForm.File["application"] |
| 366 | Expect(ok).To(BeTrue(), "Application file part not present") |
| 367 | Expect(len(fileHeaders)).To(Equal(1), "Wrong number of files") |
| 368 | |
| 369 | applicationFile := fileHeaders[0] |
| 370 | Expect(applicationFile.Filename).To(Equal("application.zip"), "Wrong file name") |
| 371 | |
| 372 | file, err := applicationFile.Open() |
| 373 | if err != nil { |
| 374 | Fail(fmt.Sprintf("Cannot get multipart file %v", err.Error())) |
| 375 | return |
| 376 | } |
| 377 | |
| 378 | length, err := strconv.ParseInt(applicationFile.Header.Get("content-length"), 10, 64) |
| 379 | if err != nil { |
| 380 | Fail(fmt.Sprintf("Cannot convert content-length to int %v", err.Error())) |
| 381 | return |
| 382 | } |
| 383 | |
| 384 | if zipChecks != nil { |
| 385 | zipReader, err := zip.NewReader(file, length) |
| 386 | if err != nil { |
| 387 | Fail(fmt.Sprintf("Error reading zip content %v", err.Error())) |
| 388 | return |
| 389 | } |
| 390 | |
| 391 | zipChecks(zipReader) |
| 392 | } |
| 393 | } |
| 394 | } |
| 395 | |
| 396 | func createProgressEndpoint(status string) (req testnet.TestRequest) { |
| 397 | body := fmt.Sprintf(` |
no test coverage detected