blob: 4324ba85f473e44c57ef77a476c12be61163abba [file] [log] [blame]
package gcr
import (
"context"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"go.skia.org/infra/go/mockhttpclient"
"go.skia.org/infra/go/testutils/unittest"
)
func TestTags(t *testing.T) {
unittest.SmallTest(t)
ctx := context.Background()
url := fmt.Sprintf("https://%s/v2/skia-public/docserver/tags/list?n=100", Server)
m := mockhttpclient.NewURLMock()
m.Mock(url, mockhttpclient.MockGetDialogue([]byte(`{
"name": "docserver",
"manifest": {"sha256:abc123": {
"imageSizeBytes": "32",
"layerId": "0",
"tag": ["foo", "bar"],
"timeCreatedMs": "1655387750000",
"timeUploadedMs": "1655387810000"
}},
"tags": ["foo", "bar"]
}`)))
c := &Client{
client: m.Client(),
projectId: "skia-public",
imageName: "docserver",
}
tagsResp, err := c.Tags(ctx)
assert.NoError(t, err)
assert.Equal(t, &TagsResponse{
Name: "docserver",
Manifest: map[string]struct {
ImageSizeBytes string `json:"imageSizeBytes"`
LayerID string `json:"layerId"`
Tags []string `json:"tag"`
TimeCreatedMs string `json:"timeCreatedMs"`
TimeUploadedMs string `json:"timeUploadedMs"`
}{
"sha256:abc123": {
ImageSizeBytes: "32",
LayerID: "0",
Tags: []string{"foo", "bar"},
TimeCreatedMs: "1655387750000",
TimeUploadedMs: "1655387810000",
},
},
Tags: []string{"foo", "bar"},
}, tagsResp)
c.imageName = "unknown"
tagsResp, err = c.Tags(ctx)
assert.Error(t, err)
}
func TestTags_Pagination(t *testing.T) {
unittest.SmallTest(t)
ctx := context.Background()
url := fmt.Sprintf("https://%s/v2/skia-public/docserver/tags/list?n=100", Server)
m := mockhttpclient.NewURLMock()
nextUrl := fmt.Sprintf("https://%s/v2/skia-public/docserver/tags/list?n=100&last=bar", Server)
m.Mock(url, mockhttpclient.MockGetDialogueWithResponseHeaders(
[]byte(`{
"name": "docserver",
"manifest": {"sha256:abc123": {
"imageSizeBytes": "32",
"layerId": "0",
"tag": ["foo", "bar"],
"timeCreatedMs": "1655387750000",
"timeUploadedMs": "1655387810000"
}},
"tags": ["foo", "bar"]
}`),
map[string][]string{
"Link": {nextUrl + "; rel=\"next\""},
},
))
m.Mock(nextUrl, mockhttpclient.MockGetDialogue([]byte(`{
"name": "docserver",
"manifest": {"sha256:def456": {
"imageSizeBytes": "64",
"layerId": "0",
"tag": ["baz"],
"timeCreatedMs": "1655387750000",
"timeUploadedMs": "1655387810000"
}},
"tags": ["baz"]
}`)))
c := &Client{
client: m.Client(),
projectId: "skia-public",
imageName: "docserver",
}
tagsResp, err := c.Tags(ctx)
assert.NoError(t, err)
assert.Equal(t, &TagsResponse{
Name: "docserver",
Manifest: map[string]struct {
ImageSizeBytes string `json:"imageSizeBytes"`
LayerID string `json:"layerId"`
Tags []string `json:"tag"`
TimeCreatedMs string `json:"timeCreatedMs"`
TimeUploadedMs string `json:"timeUploadedMs"`
}{
"sha256:abc123": {
ImageSizeBytes: "32",
LayerID: "0",
Tags: []string{"foo", "bar"},
TimeCreatedMs: "1655387750000",
TimeUploadedMs: "1655387810000",
},
"sha256:def456": {
ImageSizeBytes: "64",
LayerID: "0",
Tags: []string{"baz"},
TimeCreatedMs: "1655387750000",
TimeUploadedMs: "1655387810000",
},
},
Tags: []string{"foo", "bar", "baz"},
}, tagsResp)
c.imageName = "unknown"
tagsResp, err = c.Tags(ctx)
assert.Error(t, err)
}
func TestGcrTokenSource(t *testing.T) {
unittest.SmallTest(t)
m := mockhttpclient.NewURLMock()
url := fmt.Sprintf("https://%s/v2/token?scope=repository:skia-public/docserver:pull", Server)
m.Mock(url, mockhttpclient.MockGetDialogue([]byte(`{"token": "foo", "expires_in": 3600}`)))
ts := &gcrTokenSource{
client: m.Client(),
projectId: "skia-public",
imageName: "docserver",
}
token, err := ts.Token()
assert.NoError(t, err)
assert.Equal(t, "foo", token.AccessToken)
assert.Equal(t, "Bearer", token.TokenType)
ts.imageName = "unknown"
token, err = ts.Token()
assert.Error(t, err)
}