dockerbuild/main_test.go
Ondrej Vlach 302df33baa
All checks were successful
Go Test / test (push) Successful in 25s
initial commit
2025-05-30 20:10:33 +02:00

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)
}
}