104 lines
2.8 KiB
Go
104 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Test parseSecrets with various input formats
|
|
func TestParseSecrets(t *testing.T) {
|
|
input := `
|
|
SECRET1=foo
|
|
SECRET2="bar"
|
|
# This is a comment
|
|
SECRET3= baz
|
|
`
|
|
expected := map[string]string{
|
|
"SECRET1": "foo",
|
|
"SECRET2": "bar",
|
|
"SECRET3": "baz",
|
|
}
|
|
result := parseSecrets(input)
|
|
if len(result) != len(expected) {
|
|
t.Fatalf("expected %d secrets, got %d", len(expected), len(result))
|
|
}
|
|
for k, v := range expected {
|
|
if result[k] != v {
|
|
t.Errorf("expected %s=%s, got %s", k, v, result[k])
|
|
}
|
|
}
|
|
}
|
|
|
|
// Test getShortHash (requires git repo)
|
|
func TestGetShortHash(t *testing.T) {
|
|
cmd := exec.Command("git", "rev-parse", "--short", "HEAD")
|
|
out, err := cmd.Output()
|
|
if err != nil {
|
|
t.Skip("Skipping getShortHash test: not a git repo", err)
|
|
}
|
|
expected := strings.TrimSpace(string(out))
|
|
got := getShortHash()
|
|
if got != expected {
|
|
t.Errorf("expected hash %s, got %s", expected, got)
|
|
}
|
|
}
|
|
|
|
// Test buildDockerCommand returns a valid *exec.Cmd with context and dockerfile
|
|
func TestBuildDockerCommandWithContextAndDockerfile(t *testing.T) {
|
|
secrets := map[string]string{
|
|
"FOO": "bar",
|
|
}
|
|
context := "./foo"
|
|
dockerfile := "Dockerfile"
|
|
tagLatest := "test:latest"
|
|
tagNightly := "test:nightly"
|
|
cmd := buildDockerCommand(context, dockerfile, secrets, tagLatest, tagNightly)
|
|
if cmd == nil {
|
|
t.Fatal("expected non-nil *exec.Cmd")
|
|
}
|
|
args := strings.Join(cmd.Args, " ")
|
|
if !strings.Contains(args, context) {
|
|
t.Errorf("docker build args missing context: %v", cmd.Args)
|
|
}
|
|
if !strings.Contains(args, "-f") || !strings.Contains(args, dockerfile) {
|
|
t.Errorf("docker build args missing dockerfile: %v", cmd.Args)
|
|
}
|
|
if !strings.Contains(args, tagLatest) || !strings.Contains(args, tagNightly) {
|
|
t.Errorf("docker build args missing tags: %v", cmd.Args)
|
|
}
|
|
if !strings.Contains(args, "--secret") {
|
|
t.Errorf("docker build args missing --secret: %v", cmd.Args)
|
|
}
|
|
}
|
|
|
|
// Test buildDockerCommand returns a valid *exec.Cmd without secrets
|
|
func TestBuildDockerCommandNoSecrets(t *testing.T) {
|
|
secrets := map[string]string{}
|
|
context := "."
|
|
dockerfile := "Dockerfile"
|
|
tagLatest := "test:latest"
|
|
tagNightly := "test:nightly"
|
|
cmd := buildDockerCommand(context, dockerfile, secrets, tagLatest, tagNightly)
|
|
if cmd == nil {
|
|
t.Fatal("expected non-nil *exec.Cmd")
|
|
}
|
|
args := strings.Join(cmd.Args, " ")
|
|
if strings.Contains(args, "--secret") {
|
|
t.Errorf("docker build args should not contain --secret when no secrets are provided: %v", cmd.Args)
|
|
}
|
|
}
|
|
|
|
// Test pushDockerCommand returns a valid *exec.Cmd
|
|
func TestPushDockerCommand(t *testing.T) {
|
|
tag := "test:latest"
|
|
cmd := pushDockerCommand(tag)
|
|
if cmd == nil {
|
|
t.Fatal("expected non-nil *exec.Cmd")
|
|
}
|
|
args := strings.Join(cmd.Args, " ")
|
|
if !strings.Contains(args, "push") || !strings.Contains(args, tag) {
|
|
t.Errorf("docker push args missing: %v", cmd.Args)
|
|
}
|
|
}
|