mirror of
https://github.com/portainer/portainer.git
synced 2026-08-08 03:02:00 +00:00
80 lines
2.0 KiB
Go
80 lines
2.0 KiB
Go
package stackutils
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/filesystem"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuildEnvMap_Priority(t *testing.T) {
|
|
t.Setenv("HOST_PORT", "1111")
|
|
|
|
tmpDir := t.TempDir()
|
|
err := os.WriteFile(filesystem.JoinPaths(tmpDir, ".env"), []byte("HOST_PORT=2222\n"), 0o600)
|
|
require.NoError(t, err)
|
|
|
|
stack := &portainer.Stack{
|
|
ProjectPath: tmpDir,
|
|
EntryPoint: "docker-compose.yml",
|
|
Env: []portainer.Pair{{Name: "HOST_PORT", Value: "3333"}},
|
|
}
|
|
|
|
env, err := BuildEnvMap(stack)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "3333", env["HOST_PORT"])
|
|
}
|
|
|
|
func TestBuildEnvMap_EmptyStackEnv(t *testing.T) {
|
|
t.Setenv("HOST_PORT", "1111")
|
|
|
|
stack := &portainer.Stack{
|
|
ProjectPath: t.TempDir(),
|
|
EntryPoint: "docker-compose.yml",
|
|
}
|
|
|
|
env, err := BuildEnvMap(stack)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "1111", env["HOST_PORT"])
|
|
}
|
|
|
|
func TestBuildEnvMap_VariableExpansionFromOSEnv(t *testing.T) {
|
|
t.Setenv("HOST_PORT", "3000")
|
|
|
|
stack := &portainer.Stack{
|
|
ProjectPath: t.TempDir(),
|
|
EntryPoint: "docker-compose.yml",
|
|
Env: []portainer.Pair{{Name: "GREETING", Value: "port-is-${HOST_PORT}"}},
|
|
}
|
|
|
|
env, err := BuildEnvMap(stack)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "port-is-3000", env["GREETING"])
|
|
}
|
|
|
|
func TestBuildEnvMap_QuotedValue(t *testing.T) {
|
|
stack := &portainer.Stack{
|
|
ProjectPath: t.TempDir(),
|
|
EntryPoint: "docker-compose.yml",
|
|
Env: []portainer.Pair{{Name: "API_PORT", Value: `"8005"`}},
|
|
}
|
|
|
|
env, err := BuildEnvMap(stack)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "8005", env["API_PORT"])
|
|
}
|
|
|
|
func TestBuildEnvMap_InvalidStackEnv_ReturnsError(t *testing.T) {
|
|
stack := &portainer.Stack{
|
|
ProjectPath: t.TempDir(),
|
|
EntryPoint: "docker-compose.yml",
|
|
Env: []portainer.Pair{{Name: "API_PORT", Value: `"unterminated`}},
|
|
}
|
|
|
|
env, err := BuildEnvMap(stack)
|
|
require.ErrorContains(t, err, "failed to parse stack environment variables")
|
|
require.Nil(t, env)
|
|
}
|