Files
envctl/climatecontrol_test.go

179 lines
3.3 KiB
Go

package climatecontrol
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
)
func TestWithEnv(t *testing.T) {
tests := []struct {
name string
env map[string]string
}{
{
name: "empty",
env: map[string]string{},
},
{
name: "new vars",
env: map[string]string{
"CC_TEST_INSIDE": "new var is here",
"CC_TEST_FOO": "bar",
},
},
{
name: "set existing",
env: map[string]string{
"CC_TEST_INSIDE": "new var is here",
"CC_TEST_OUTSIDE": "this is not the same",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
os.Setenv("CC_TEST_OUTSIDE", t.Name())
outside := parseEnviron(os.Environ())
WithEnv(tt.env, func() {
os.Setenv("CC_TEST_SET_INSIDE", t.Name()+"-manual")
for k, v := range tt.env {
got := os.Getenv(k)
assert.Equal(t, v, got)
}
for k, v := range outside {
if _, ok := tt.env[k]; !ok {
assert.Equal(t, v, os.Getenv(k))
}
}
})
_, exists := os.LookupEnv("CC_TEST_SET_INSIDE")
assert.Equal(t, false, exists)
for k := range tt.env {
if _, ok := outside[k]; !ok {
_, exists := os.LookupEnv(k)
assert.Equal(t, false, exists)
}
}
for k, v := range outside {
assert.Equal(t, v, os.Getenv(k))
}
os.Unsetenv("CC_TEST_OUTSIDE")
})
}
}
func TestWithCleanEnv(t *testing.T) {
tests := []struct {
name string
env map[string]string
}{
{
name: "empty",
env: map[string]string{},
},
{
name: "new vars",
env: map[string]string{
"CC_TEST_INSIDE": "new var is here",
"CC_TEST_FOO": "bar",
},
},
{
name: "set existing",
env: map[string]string{
"CC_TEST_INSIDE": "new var is here",
"CC_TEST_OUTSIDE": "is is not the same",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
os.Setenv("CC_TEST_OUTSIDE", t.Name())
outside := parseEnviron(os.Environ())
WithCleanEnv(tt.env, func() {
os.Setenv("CC_TEST_SET_INSIDE", t.Name()+"-manual")
for k, v := range tt.env {
got := os.Getenv(k)
assert.Equal(t, v, got)
}
for k := range outside {
if _, ok := tt.env[k]; !ok {
_, exists := os.LookupEnv(k)
assert.Equal(t, false, exists)
}
}
})
_, exists := os.LookupEnv("CC_TEST_SET_INSIDE")
assert.Equal(t, false, exists)
for k := range tt.env {
if _, ok := outside[k]; !ok {
_, exists := os.LookupEnv(k)
assert.Equal(t, false, exists)
}
}
for k, v := range outside {
assert.Equal(t, v, os.Getenv(k))
}
os.Unsetenv("CC_TEST_OUTSIDE")
})
}
}
func Test_parseEnviron(t *testing.T) {
tests := []struct {
name string
vars []string
want map[string]string
}{
{
name: "empty",
vars: []string{},
want: map[string]string{},
},
{
name: "various",
vars: []string{
"USER=john",
"NAME=John Doe",
"SHELL=/bin/bash",
"GOPRIVATE=",
"X=11",
"TAGS=foo=bar,hello=world",
"_=go",
"INVALID-var",
},
want: map[string]string{
"USER": "john",
"NAME": "John Doe",
"SHELL": "/bin/bash",
"GOPRIVATE": "",
"X": "11",
"TAGS": "foo=bar,hello=world",
"_": "go",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := parseEnviron(tt.vars)
assert.Equal(t, tt.want, got)
})
}
}