blob: 8842f7908185039d9e0f21d260de4ef56ba883b3 [file] [log] [blame]
package catapult
import (
"context"
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/mockhttpclient"
"go.skia.org/infra/go/skerr"
pinpoint_proto "go.skia.org/infra/pinpoint/proto/v1"
)
const (
mockJobId = "179a34b2be0000"
mockDatastoreResp = `{"kind":"Job","id":"13c71a26-8ae0-4404-bfdd-d377352898a6"}`
)
var mockPinpointLegacyJobResp = &pinpoint_proto.LegacyJobResponse{
JobId: mockJobId,
}
func unmarshalMockDatastoreResp(data string) (*DatastoreResponse, error) {
var resp DatastoreResponse
if err := json.Unmarshal([]byte(data), &resp); err != nil {
return nil, skerr.Wrapf(err, "could not generate expected mock response")
}
return &resp, nil
}
func TestNewCatapultClient_GivenProd_ReturnsProdClient(t *testing.T) {
cc, err := NewCatapultClient(context.Background(), true)
assert.NoError(t, err)
assert.NotNil(t, cc)
assert.Equal(t, cc.url, catapultBisectPostUrl)
}
func TestNewCatapultClient_GivenStaging_ReturnsStagingClient(t *testing.T) {
cc, err := NewCatapultClient(context.Background(), false)
assert.NoError(t, err)
assert.NotNil(t, cc)
assert.Equal(t, cc.url, catapultStagingPostUrl)
}
func TestWriteBisectToCatapault_GivenValidInput_ReturnsResponse(t *testing.T) {
b, err := json.Marshal(mockPinpointLegacyJobResp)
require.NoError(t, err)
expected, err := unmarshalMockDatastoreResp(mockDatastoreResp)
require.NoError(t, err)
ctx := context.Background()
m := mockhttpclient.NewURLMock()
mockPost := mockhttpclient.MockPostDialogue(contentType, b, []byte(mockDatastoreResp))
m.MockOnce(catapultStagingPostUrl, mockPost)
cc, err := NewCatapultClient(ctx, false)
require.NoError(t, err)
cc.httpClient = m.Client()
resp, err := cc.WriteBisectToCatapult(ctx, mockPinpointLegacyJobResp)
require.NoError(t, err)
assert.Equal(t, expected, resp)
}
func TestWriteBisectToCatapault_GivenBadStatusCode_ReturnsError(t *testing.T) {
b, err := json.Marshal(mockPinpointLegacyJobResp)
require.NoError(t, err)
ctx := context.Background()
m := mockhttpclient.NewURLMock()
mockPost := mockhttpclient.MockPostDialogueWithResponseCode(contentType, b, []byte(""), 400)
m.MockOnce(catapultStagingPostUrl, mockPost)
cc, err := NewCatapultClient(ctx, false)
require.NoError(t, err)
cc.httpClient = m.Client()
resp, err := cc.WriteBisectToCatapult(ctx, mockPinpointLegacyJobResp)
require.Error(t, err)
assert.Nil(t, resp)
}