0
0
mirror of https://github.com/thegeeklab/wp-docker-buildx.git synced 2024-11-23 06:30:40 +00:00
wp-docker-buildx/docker/docker_test.go
Robert Kaussow a2bc0869af
fix: use StringMap for build_args instead of StringSlice (#277)
BREAKING CHANGE: The type of the `build_args` property was changed from `list` to `map` to support the use of secrets for certain build arguments. During this refactoring, the `build_args_from_env` behavior was also changed to achieve the intended behavior. Environment variable names passed to this list will be used as build arguments if the environment variable is set.
2024-11-15 21:45:29 +01:00

198 lines
4.0 KiB
Go

package docker
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestHasProxyBuildArg(t *testing.T) {
tests := []struct {
name string
args map[string]string
key string
expected bool
}{
{
name: "lowercase key exists",
args: map[string]string{"http_proxy": "http://proxy.example.com"},
key: "http_proxy",
expected: true,
},
{
name: "uppercase key exists",
args: map[string]string{"HTTP_PROXY": "http://proxy.example.com"},
key: "http_proxy",
expected: true,
},
{
name: "key does not exist",
args: map[string]string{},
key: "http_proxy",
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b := &Build{Args: tt.args}
result := b.hasProxyBuildArg(tt.key)
assert.Equal(t, tt.expected, result)
})
}
}
func TestGetProxyValue(t *testing.T) {
tests := []struct {
name string
envVars map[string]string
key string
expected string
}{
{
name: "lowercase env var exists",
envVars: map[string]string{
"http_proxy": "http://proxy.local",
},
key: "http_proxy",
expected: "http://proxy.local",
},
{
name: "uppercase env var exists",
envVars: map[string]string{
"HTTP_PROXY": "http://proxy.upper.local",
},
key: "http_proxy",
expected: "http://proxy.upper.local",
},
{
name: "both cases exist, lowercase preferred",
envVars: map[string]string{
"http_proxy": "http://proxy.lower.local",
"HTTP_PROXY": "http://proxy.upper.local",
},
key: "http_proxy",
expected: "http://proxy.lower.local",
},
{
name: "no env vars exist",
envVars: map[string]string{},
key: "http_proxy",
expected: "",
},
{
name: "different proxy type",
envVars: map[string]string{
"https_proxy": "https://secure.proxy.local",
"HTTPS_PROXY": "https://secure.proxy.upper.local",
},
key: "https_proxy",
expected: "https://secure.proxy.local",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Set test environment variables
for k, v := range tt.envVars {
t.Setenv(k, v)
}
b := &Build{}
result := b.getProxyValue(tt.key)
assert.Equal(t, tt.expected, result)
})
}
}
func TestAddArgFromEnv(t *testing.T) {
tests := []struct {
name string
envVars map[string]string
key string
existing map[string]string
expected map[string]string
}{
{
name: "add new env var",
envVars: map[string]string{
"NEW_VAR": "test_value",
},
key: "NEW_VAR",
expected: map[string]string{
"NEW_VAR": "test_value",
},
},
{
name: "empty env var",
envVars: map[string]string{},
key: "MISSING_VAR",
expected: map[string]string{},
},
{
name: "env var with empty value",
envVars: map[string]string{
"EMPTY_VAR": "",
},
key: "EMPTY_VAR",
expected: map[string]string{},
},
{
name: "multiple env vars",
envVars: map[string]string{
"VAR1": "value1",
"VAR2": "value2",
},
key: "VAR1",
expected: map[string]string{
"VAR1": "value1",
},
},
{
name: "special characters in value",
envVars: map[string]string{
"SPECIAL_VAR": "!@#$%^&*()",
},
key: "SPECIAL_VAR",
expected: map[string]string{
"SPECIAL_VAR": "!@#$%^&*()",
},
},
{
name: "preserve existing args",
envVars: map[string]string{
"TEST_VAR": "new_value",
},
key: "TEST_VAR",
existing: map[string]string{
"TEST_VAR": "old_value",
},
expected: map[string]string{
"TEST_VAR": "old_value",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Clear environment before each test
for k := range tt.envVars {
t.Setenv(k, "")
}
// Set test environment variables
for k, v := range tt.envVars {
t.Setenv(k, v)
}
b := &Build{Args: make(map[string]string)}
if tt.existing != nil {
b.Args = tt.existing
}
b.addArgFromEnv(tt.key)
assert.Equal(t, tt.expected, b.Args)
})
}
}