env/env_test.go

103 lines
2.3 KiB
Go

package env
import (
"testing"
"os"
"time"
"github.com/stretchr/testify/assert"
)
type config struct {
App string
Port int `default:"8000"`
IsDebug bool `env:"DEBUG"`
Hosts []string `slice_sep:","`
Timeout time.Duration
Redis struct {
Version string `sep:""` // no sep between `CONFIG` and `REDIS`
Host string
Port int
}
MySQL struct {
Version string `default:"5.7"`
Host string
Port int
}
}
func TestGeneralEnv(t *testing.T) {
os.Setenv("CONFIG_APP", "ENV APP")
// os.Setenv("CONFIG_PORT", "default") // default value
os.Setenv("CONFIG_DEBUG", "1")
os.Setenv("CONFIG_HOSTS", "192.168.0.1,127.0.0.1")
os.Setenv("CONFIG_TIMEOUT", "5s")
os.Setenv("CONFIG_REDISVERSION", "3.2")
os.Setenv("CONFIG_REDIS_HOST", "rdb")
os.Setenv("CONFIG_REDIS_PORT", "6379")
os.Setenv("CONFIG_MYSQL_HOST", "mysqldb")
os.Setenv("CONFIG_MYSQL_PORT", "3306")
defer os.Clearenv()
cfg := new(config)
err := Fill(cfg)
if err != nil {
t.Error(err)
}
assert := assert.New(t)
assert.Equal(cfg.App, "ENV APP")
assert.Equal(cfg.Port, 8000)
assert.Equal(cfg.IsDebug, true)
assert.Equal(cfg.Hosts, []string{"192.168.0.1", "127.0.0.1"})
assert.Equal(cfg.Timeout, 5*time.Second)
assert.Equal(cfg.Redis.Version, "3.2")
assert.Equal(cfg.Redis.Host, "rdb")
assert.Equal(cfg.MySQL.Version, "5.7")
assert.Equal(cfg.MySQL.Host, "mysqldb")
assert.Equal(cfg.MySQL.Port, 3306)
}
func TestNoPrefixEnv(t *testing.T) {
os.Setenv("APP", "ENV_APP")
// os.Setenv("PORT", "default") // default value
os.Setenv("DEBUG", "1")
os.Setenv("HOSTS", "192.168.1.1,127.0.0.1")
os.Setenv("TIMEOUT", "5s")
os.Setenv("REDISVERSION", "3.2")
os.Setenv("REDIS_HOST", "rdb")
os.Setenv("REDIS_PORT", "6379")
os.Setenv("MYSQL_HOST", "mysqldb")
os.Setenv("MYSQL_PORT", "3306")
defer os.Clearenv()
cfg := new(config)
IgnorePrefix()
err := Fill(cfg)
if err != nil {
t.Error(err)
}
assert := assert.New(t)
assert.Equal(cfg.App, "ENV_APP")
assert.Equal(cfg.Port, 8000)
assert.Equal(cfg.IsDebug, true)
assert.Equal(cfg.Hosts, []string{"192.168.1.1", "127.0.0.1"})
assert.Equal(cfg.Timeout, 5*time.Second)
assert.Equal(cfg.Redis.Version, "3.2")
assert.Equal(cfg.Redis.Host, "rdb")
assert.Equal(cfg.MySQL.Version, "5.7")
assert.Equal(cfg.MySQL.Host, "mysqldb")
assert.Equal(cfg.MySQL.Port, 3306)
}