(t *testing.T)
| 611 | } |
| 612 | |
| 613 | func TestDoPostRunRequest(t *testing.T) { |
| 614 | errDummyTr := errors.New("Post https://api.perfops.net/run/test: dummy impl") |
| 615 | reqTestCases := map[string]struct { |
| 616 | runReq RunRequest |
| 617 | tr *recordingTransport |
| 618 | expErr error |
| 619 | expReqBody string |
| 620 | }{ |
| 621 | "Invalid target": {RunRequest{Target: "example"}, &recordingTransport{}, &argError{"target"}, ``}, |
| 622 | "Target only": {RunRequest{Target: "example.com"}, &recordingTransport{}, errDummyTr, `{"target":"example.com"}`}, |
| 623 | "With invalid limit": {RunRequest{Target: "example.com", Limit: freeMaxNodeCap + 2}, &recordingTransport{}, &argError{"limit"}, ``}, |
| 624 | "With limit": {RunRequest{Target: "example.com", Limit: 2}, &recordingTransport{}, errDummyTr, `{"target":"example.com","limit":2}`}, |
| 625 | "With location": {RunRequest{Target: "example.com", Location: "Asia"}, &recordingTransport{}, errDummyTr, `{"target":"example.com","location":"Asia"}`}, |
| 626 | "With limit and location": {RunRequest{Target: "example.com", Limit: 2, Location: "Asia"}, &recordingTransport{}, errDummyTr, `{"target":"example.com","location":"Asia","limit":2}`}, |
| 627 | "With node IDs": {RunRequest{Target: "example.com", Nodes: NodeIDs([]int{12, 34})}, &recordingTransport{}, errDummyTr, `{"target":"example.com","nodes":"12,34"}`}, |
| 628 | } |
| 629 | ctx := context.Background() |
| 630 | for name, tc := range reqTestCases { |
| 631 | t.Run(name, func(t *testing.T) { |
| 632 | c, err := newTestClient(tc.tr) |
| 633 | if err != nil { |
| 634 | t.Fatalf("unexpected error %v", err) |
| 635 | } |
| 636 | _, err = c.Run.doPostRunRequest(ctx, "/run/test", &tc.runReq) |
| 637 | if !cmpError(err, tc.expErr) { |
| 638 | t.Fatalf("expected %v; got %v", tc.expErr, err) |
| 639 | } |
| 640 | if got := reqBody(tc.tr.req); tc.expReqBody != "" && tc.expReqBody != got { |
| 641 | t.Fatalf("expected %v; got %v", tc.expReqBody, got) |
| 642 | } |
| 643 | }) |
| 644 | } |
| 645 | |
| 646 | respTestCases := map[string]struct { |
| 647 | target string |
| 648 | testID string |
| 649 | tr *respondingTransport |
| 650 | err error |
| 651 | }{ |
| 652 | "Invalid target": {"meep", "", &respondingTransport{}, &argError{"target"}}, |
| 653 | "HTTP error": {"example.com", "", &respondingTransport{resp: dummyResp(400, "POST", `{"Error": "an error"}`)}, errors.New(`400: {"Error": "an error"}`)}, |
| 654 | "Unauthorized": {"example.com", "", &respondingTransport{resp: dummyResp(401, "POST", `Unauthorized`)}, errors.New(`401: Unauthorized`)}, |
| 655 | "Failed": {"example.com", "", &respondingTransport{resp: dummyResp(201, "POST", `{"Error": "an error"}`)}, errors.New("an error")}, |
| 656 | "Created": {"example.com", "0123456789abcdefghij", &respondingTransport{resp: dummyResp(201, "POST", `{"id": "0123456789abcdefghij"}`)}, nil}, |
| 657 | } |
| 658 | for name, tc := range respTestCases { |
| 659 | t.Run(name, func(t *testing.T) { |
| 660 | c, err := newTestClient(tc.tr) |
| 661 | if err != nil { |
| 662 | t.Fatalf("unexpected error %v", err) |
| 663 | } |
| 664 | got, err := c.Run.doPostRunRequest(ctx, "/run/test", &RunRequest{Target: tc.target}) |
| 665 | if !cmpError(err, tc.err) { |
| 666 | t.Fatalf("expected %v; got %v", tc.err, err) |
| 667 | } |
| 668 | if string(got) != tc.testID { |
| 669 | t.Fatalf("expected %v; got %v", tc.testID, got) |
| 670 | } |
nothing calls this directly
no test coverage detected