diff options
Diffstat (limited to 'cli/internal/client/client_test.go')
| -rw-r--r-- | cli/internal/client/client_test.go | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/cli/internal/client/client_test.go b/cli/internal/client/client_test.go new file mode 100644 index 0000000..36ff3fb --- /dev/null +++ b/cli/internal/client/client_test.go @@ -0,0 +1,159 @@ +package client + +import ( + "bytes" + "encoding/json" + "errors" + "io/ioutil" + "net/http" + "net/http/httptest" + "reflect" + "testing" + + "github.com/google/uuid" + "github.com/hashicorp/go-hclog" + "github.com/vercel/turbo/cli/internal/util" +) + +func Test_sendToServer(t *testing.T) { + ch := make(chan []byte, 1) + ts := httptest.NewServer( + http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + defer req.Body.Close() + b, err := ioutil.ReadAll(req.Body) + if err != nil { + t.Errorf("failed to read request %v", err) + } + ch <- b + w.WriteHeader(200) + w.Write([]byte{}) + })) + defer ts.Close() + + remoteConfig := RemoteConfig{ + TeamSlug: "my-team-slug", + APIURL: ts.URL, + Token: "my-token", + } + apiClient := NewClient(remoteConfig, hclog.Default(), "v1", Opts{}) + + myUUID, err := uuid.NewUUID() + if err != nil { + t.Errorf("failed to create uuid %v", err) + } + events := []map[string]interface{}{ + { + "sessionId": myUUID.String(), + "hash": "foo", + "source": "LOCAL", + "event": "hit", + }, + { + "sessionId": myUUID.String(), + "hash": "bar", + "source": "REMOTE", + "event": "MISS", + }, + } + + apiClient.RecordAnalyticsEvents(events) + + body := <-ch + + result := []map[string]interface{}{} + err = json.Unmarshal(body, &result) + if err != nil { + t.Errorf("unmarshalling body %v", err) + } + if !reflect.DeepEqual(events, result) { + t.Errorf("roundtrip got %v, want %v", result, events) + } +} + +func Test_PutArtifact(t *testing.T) { + ch := make(chan []byte, 1) + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + defer req.Body.Close() + b, err := ioutil.ReadAll(req.Body) + if err != nil { + t.Errorf("failed to read request %v", err) + } + ch <- b + w.WriteHeader(200) + w.Write([]byte{}) + })) + defer ts.Close() + + // Set up test expected values + remoteConfig := RemoteConfig{ + TeamSlug: "my-team-slug", + APIURL: ts.URL, + Token: "my-token", + } + apiClient := NewClient(remoteConfig, hclog.Default(), "v1", Opts{}) + expectedArtifactBody := []byte("My string artifact") + + // Test Put Artifact + apiClient.PutArtifact("hash", expectedArtifactBody, 500, "") + testBody := <-ch + if !bytes.Equal(expectedArtifactBody, testBody) { + t.Errorf("Handler read '%v', wants '%v'", testBody, expectedArtifactBody) + } + +} + +func Test_PutWhenCachingDisabled(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + defer func() { _ = req.Body.Close() }() + w.WriteHeader(403) + _, _ = w.Write([]byte("{\"code\": \"remote_caching_disabled\",\"message\":\"caching disabled\"}")) + })) + defer ts.Close() + + // Set up test expected values + remoteConfig := RemoteConfig{ + TeamSlug: "my-team-slug", + APIURL: ts.URL, + Token: "my-token", + } + apiClient := NewClient(remoteConfig, hclog.Default(), "v1", Opts{}) + expectedArtifactBody := []byte("My string artifact") + // Test Put Artifact + err := apiClient.PutArtifact("hash", expectedArtifactBody, 500, "") + cd := &util.CacheDisabledError{} + if !errors.As(err, &cd) { + t.Errorf("expected cache disabled error, got %v", err) + } + if cd.Status != util.CachingStatusDisabled { + t.Errorf("caching status: expected %v, got %v", util.CachingStatusDisabled, cd.Status) + } +} + +func Test_FetchWhenCachingDisabled(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + defer func() { _ = req.Body.Close() }() + w.WriteHeader(403) + _, _ = w.Write([]byte("{\"code\": \"remote_caching_disabled\",\"message\":\"caching disabled\"}")) + })) + defer ts.Close() + + // Set up test expected values + remoteConfig := RemoteConfig{ + TeamSlug: "my-team-slug", + APIURL: ts.URL, + Token: "my-token", + } + apiClient := NewClient(remoteConfig, hclog.Default(), "v1", Opts{}) + // Test Put Artifact + resp, err := apiClient.FetchArtifact("hash") + cd := &util.CacheDisabledError{} + if !errors.As(err, &cd) { + t.Errorf("expected cache disabled error, got %v", err) + } + if cd.Status != util.CachingStatusDisabled { + t.Errorf("caching status: expected %v, got %v", util.CachingStatusDisabled, cd.Status) + } + if resp != nil { + t.Errorf("response got %v, want <nil>", resp) + } +} |
