github.com/saucelabs/saucectl@v0.175.1/internal/http/imagerunner_test.go (about) 1 package http 2 3 import ( 4 "context" 5 "fmt" 6 "io" 7 "net/http" 8 "net/http/httptest" 9 "testing" 10 11 "github.com/hashicorp/go-retryablehttp" 12 "github.com/saucelabs/saucectl/internal/iam" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestImageRunner_GetArtifacts(t *testing.T) { 17 type fields struct { 18 Client *retryablehttp.Client 19 URL string 20 Creds iam.Credentials 21 } 22 type args struct { 23 ctx context.Context 24 id string 25 } 26 tests := []struct { 27 name string 28 fields fields 29 args args 30 want assert.ValueAssertionFunc 31 wantErr assert.ErrorAssertionFunc 32 }{ 33 { 34 name: "Empty Payload", 35 fields: fields{}, 36 args: args{ 37 ctx: context.Background(), 38 id: "run-id-1", 39 }, 40 want: func(t assert.TestingT, i interface{}, input ...interface{}) bool { 41 rd := i.(io.ReadCloser) 42 buf, err := io.ReadAll(rd) 43 if err != nil { 44 return false 45 } 46 return string(buf) == "expected-run-1" 47 }, 48 wantErr: func(t assert.TestingT, err error, i ...interface{}) bool { 49 return err == nil 50 }, 51 }, 52 } 53 ta := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 54 var err error 55 switch r.URL.Path { 56 case "/artifacts/run-id-1": 57 w.WriteHeader(200) 58 _, err = w.Write([]byte("expected-run-1")) 59 default: 60 w.WriteHeader(http.StatusInternalServerError) 61 } 62 63 if err != nil { 64 t.Errorf("failed to respond: %v", err) 65 } 66 })) 67 defer ta.Close() 68 69 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 70 var err error 71 switch r.URL.Path { 72 case "/v1alpha1/hosted/image/runners/run-id-1/artifacts/url": 73 w.WriteHeader(200) 74 _, err = w.Write([]byte(fmt.Sprintf(`{"url":"%s/artifacts/run-id-1"}`, ta.URL))) 75 default: 76 w.WriteHeader(http.StatusInternalServerError) 77 } 78 79 if err != nil { 80 t.Errorf("failed to respond: %v", err) 81 } 82 })) 83 defer ts.Close() 84 for _, tt := range tests { 85 t.Run(tt.name, func(t *testing.T) { 86 c := &ImageRunner{ 87 Client: retryablehttp.NewClient(), 88 URL: ts.URL, 89 Creds: tt.fields.Creds, 90 } 91 got, err := c.DownloadArtifacts(tt.args.ctx, tt.args.id) 92 if !tt.wantErr(t, err, fmt.Sprintf("GetArtifacts(%v, %v)", tt.args.ctx, tt.args.id)) { 93 return 94 } 95 tt.want(t, got, fmt.Sprintf("GetArtifacts(%v, %v)", tt.args.ctx, tt.args.id)) 96 }) 97 } 98 }