blob: ff4566b3658cbb4eb9bbbe872474e8816756d072 [file] [log] [blame]
package main
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/docker/build/pubsub"
"go.skia.org/infra/go/exec"
"go.skia.org/infra/go/testutils/unittest"
"golang.org/x/oauth2"
)
type testTokenSource struct {
token *oauth2.Token
}
func newTestToken() *testTokenSource {
return &testTokenSource{
token: &oauth2.Token{
AccessToken: "foo",
TokenType: "Bearer",
Expiry: time.Now().Add(10 * time.Minute),
},
}
}
func (t *testTokenSource) Token() (*oauth2.Token, error) {
return t.token, nil
}
func TestBaseImageName(t *testing.T) {
unittest.SmallTest(t)
Init()
assert.Equal(t, "", baseImageName(""))
assert.Equal(t, "", baseImageName("debian"))
assert.Equal(t, "fiddler", baseImageName("gcr.io/skia-public/fiddler"))
assert.Equal(t, "fiddler", baseImageName("gcr.io/skia-public/fiddler:prod"))
assert.Equal(t, "docserver", baseImageName("gcr.io/skia-public/docserver:123456"))
}
func TestAddDockerProdTag(t *testing.T) {
unittest.SmallTest(t)
Init()
docker = "docker"
loginCalled := false
pullCalled := false
tagCalled := false
pushCalled := false
mockRun := &exec.CommandCollector{}
mockRun.SetDelegateRun(func(ctx context.Context, cmd *exec.Command) error {
assert.Equal(t, "docker", cmd.Name)
if cmd.Args[0] == "login" {
assert.Equal(t, []string{"login", "-u", "oauth2accesstoken", "-p", "foo", "https://gcr.io"}, cmd.Args)
loginCalled = true
} else if cmd.Args[0] == "pull" {
assert.Equal(t, []string{"pull", "TestImageName:TestTag"}, cmd.Args)
pullCalled = true
} else if cmd.Args[0] == "tag" {
assert.Equal(t, []string{"tag", "TestImageName:TestTag", "TestImageName:prod"}, cmd.Args)
tagCalled = true
} else if cmd.Args[0] == "push" {
assert.Equal(t, []string{"push", "TestImageName:prod"}, cmd.Args)
pushCalled = true
}
return nil
})
mockRunCtx := exec.NewContext(context.Background(), mockRun.Run)
b := pubsub.BuildInfo{
ImageName: "TestImageName",
Tag: "TestTag",
}
err := addDockerProdTag(mockRunCtx, newTestToken(), b)
require.NoError(t, err)
assert.True(t, loginCalled)
assert.True(t, pullCalled)
assert.True(t, tagCalled)
assert.True(t, pushCalled)
}
func TestDeployImage(t *testing.T) {
unittest.SmallTest(t)
Init()
pushk = "pushk"
pushkCalled := false
mockRun := &exec.CommandCollector{}
mockRun.SetDelegateRun(func(ctx context.Context, cmd *exec.Command) error {
assert.Equal(t, "pushk", cmd.Name)
assert.Equal(t, []string{"--do-not-override-dirty-image", "--logtostderr", "--running-in-k8s", "test-app"}, cmd.Args)
pushkCalled = true
return nil
})
mockRunCtx := exec.NewContext(context.Background(), mockRun.Run)
err := deployImage(mockRunCtx, "test-app")
require.NoError(t, err)
assert.True(t, pushkCalled)
}