2019-01-12 22:45:25 -06:00
|
|
|
package actions
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/nektos/act/common"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestParseImageReference(t *testing.T) {
|
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
tables := []struct {
|
|
|
|
refIn string
|
|
|
|
refOut string
|
|
|
|
ok bool
|
|
|
|
}{
|
|
|
|
{"docker://myhost.com/foo/bar", "myhost.com/foo/bar", true},
|
|
|
|
{"docker://ubuntu", "ubuntu", true},
|
|
|
|
{"docker://ubuntu:18.04", "ubuntu:18.04", true},
|
|
|
|
{"docker://cibuilds/hugo:0.53", "cibuilds/hugo:0.53", true},
|
|
|
|
{"http://google.com:8080", "", false},
|
|
|
|
{"./foo", "", false},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, table := range tables {
|
|
|
|
refOut, ok := parseImageReference(table.refIn)
|
|
|
|
assert.Equal(t, table.refOut, refOut)
|
|
|
|
assert.Equal(t, table.ok, ok)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParseImageLocal(t *testing.T) {
|
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
tables := []struct {
|
|
|
|
pathIn string
|
|
|
|
contextDir string
|
|
|
|
refTag string
|
|
|
|
ok bool
|
|
|
|
}{
|
|
|
|
{"docker://myhost.com/foo/bar", "", "", false},
|
|
|
|
{"http://google.com:8080", "", "", false},
|
2019-01-25 00:17:58 -06:00
|
|
|
{"example/action1", "", "", false},
|
|
|
|
{"./example/action1", "/example/action1", "action1:", true},
|
2019-01-12 22:45:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
revision, _, err := common.FindGitRevision(".")
|
|
|
|
assert.Nil(t, err)
|
|
|
|
basedir, err := filepath.Abs("..")
|
|
|
|
assert.Nil(t, err)
|
|
|
|
for _, table := range tables {
|
|
|
|
contextDir, refTag, ok := parseImageLocal(basedir, table.pathIn)
|
|
|
|
assert.Equal(t, table.ok, ok, "ok match for %s", table.pathIn)
|
|
|
|
if ok {
|
|
|
|
assert.Equal(t, fmt.Sprintf("%s%s", basedir, table.contextDir), contextDir, "context dir doesn't match for %s", table.pathIn)
|
|
|
|
assert.Equal(t, fmt.Sprintf("%s%s", table.refTag, revision), refTag)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
func TestParseImageGithub(t *testing.T) {
|
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
tables := []struct {
|
|
|
|
image string
|
|
|
|
cloneURL string
|
|
|
|
ref string
|
|
|
|
path string
|
|
|
|
ok bool
|
|
|
|
}{
|
|
|
|
{"nektos/act", "https://github.com/nektos/act", "master", ".", true},
|
|
|
|
{"nektos/act/foo", "https://github.com/nektos/act", "master", "foo", true},
|
|
|
|
{"nektos/act@xxxxx", "https://github.com/nektos/act", "xxxxx", ".", true},
|
|
|
|
{"nektos/act/bar/baz@zzzzz", "https://github.com/nektos/act", "zzzzz", "bar/baz", true},
|
2019-01-15 11:05:27 -06:00
|
|
|
{"assimovt/actions-github-deploy/github-deploy@deployment-status-metadata", "https://github.com/assimovt/actions-github-deploy", "deployment-status-metadata", "github-deploy", true},
|
2019-01-12 22:45:25 -06:00
|
|
|
{"nektos/zzzzundefinedzzzz", "", "", "", false},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, table := range tables {
|
|
|
|
cloneURL, ref, path, ok := parseImageGithub(table.image)
|
|
|
|
assert.Equal(t, table.ok, ok, "ok match for %s", table.image)
|
|
|
|
if ok {
|
|
|
|
assert.Equal(t, table.cloneURL, cloneURL.String())
|
|
|
|
assert.Equal(t, table.ref, ref)
|
|
|
|
assert.Equal(t, table.path, path)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|