예제 #1
0
파일: env_test.go 프로젝트: richleigh/env
func TestParseStructWithInvalidFieldKind(t *testing.T) {
	type config struct {
		WontWork int64 `env:"BLAH"`
	}
	os.Setenv("BLAH", "10")
	cfg := config{}
	assert.Error(t, env.Parse(&cfg))
}
예제 #2
0
파일: env_test.go 프로젝트: richleigh/env
func TestParsesOptionalMissing(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	os.Setenv("PORT", "8080")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")
	defer os.Setenv("PORT", "")

	cfg := Config{}
	assert.NoError(t, env.Parse(&cfg))
	assert.Equal(t, "", cfg.DatabaseURL)
}
예제 #3
0
파일: env_test.go 프로젝트: richleigh/env
func TestInvalidInt(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")

	os.Setenv("PORT", "should-be-an-int")
	defer os.Setenv("PORT", "")

	cfg := Config{}
	assert.Error(t, env.Parse(&cfg))
}
예제 #4
0
파일: env_test.go 프로젝트: richleigh/env
func TestInvalidBool(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("PORT", "8080")
	defer os.Setenv("somevar", "")
	defer os.Setenv("PORT", "")

	os.Setenv("othervar", "should-be-a-bool")
	defer os.Setenv("othervar", "")

	cfg := Config{}
	assert.Error(t, env.Parse(&cfg))
}
예제 #5
0
파일: env_test.go 프로젝트: richleigh/env
func TestParseStructWithoutEnvTag(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	os.Setenv("PORT", "8080")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")
	defer os.Setenv("PORT", "")

	cfg := Config{}
	assert.NoError(t, env.Parse(&cfg))
	assert.Empty(t, cfg.NotAnEnv)
}
예제 #6
0
파일: first.go 프로젝트: richleigh/env
func main() {
	os.Setenv("HOME", "/tmp/fakehome")
	fmt.Printf("PASSWORD before: '%s'\n", os.Getenv("PASSWORD"))
	cfg := config{}
	err := env.Parse(&cfg)
	if err == nil {
		fmt.Println(cfg)
	} else {
		fmt.Println(err)
	}
	fmt.Printf("PASSWORD after: '%s'\n", os.Getenv("PASSWORD"))
}
예제 #7
0
파일: env_test.go 프로젝트: richleigh/env
func TestClearSensitiveOnError(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")

	cfg := Config{}
	pw := "MrGoodbytes"
	os.Setenv("PASSWORD", pw)
	// Should get an error, since we didn't pass in PORT
	assert.Error(t, env.Parse(&cfg))
	assert.Equal(t, "", os.Getenv("PASSWORD"))
}
예제 #8
0
파일: env_test.go 프로젝트: richleigh/env
func TestParsesOptionalPresent(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	os.Setenv("PORT", "8080")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")
	defer os.Setenv("PORT", "")

	cfg := Config{}
	db := "postgres://localhost:5432/db"
	os.Setenv("DATABASE_URL", db)
	assert.NoError(t, env.Parse(&cfg))
	assert.Equal(t, db, cfg.DatabaseURL)
}
예제 #9
0
파일: env_test.go 프로젝트: richleigh/env
func TestParsesEnv(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	os.Setenv("PORT", "8080")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")
	defer os.Setenv("PORT", "")

	cfg := Config{}
	assert.NoError(t, env.Parse(&cfg))
	assert.Equal(t, "somevalue", cfg.Some)
	assert.Equal(t, true, cfg.Other)
	assert.Equal(t, 8080, cfg.Port)
}
예제 #10
0
파일: env_test.go 프로젝트: richleigh/env
func TestParsesSensitive(t *testing.T) {
	os.Setenv("somevar", "somevalue")
	os.Setenv("othervar", "true")
	os.Setenv("PORT", "8080")
	defer os.Setenv("somevar", "")
	defer os.Setenv("othervar", "")
	defer os.Setenv("PORT", "")

	cfg := Config{}
	pw := "MrGoodbytes"
	os.Setenv("PASSWORD", pw)
	assert.NoError(t, env.Parse(&cfg))
	assert.Equal(t, pw, cfg.Password)
	assert.Equal(t, "", os.Getenv("PASSWORD"))
}
예제 #11
0
파일: env_test.go 프로젝트: richleigh/env
func ExampleFail() {
	type config struct {
		Home         string `env:"HOME"`
		Port         int    `env:"PORT"`
		IsProduction bool   `env:"PRODUCTION,optional"`
	}
	os.Setenv("HOME", "/tmp/fakehome")
	defer os.Setenv("HOME", "")

	cfg := config{}
	err := env.Parse(&cfg)
	if err == nil {
		fmt.Println(cfg)
	} else {
		fmt.Println(err)
	}
	// Output: Missing config environment variable 'PORT'
}
예제 #12
0
파일: env_test.go 프로젝트: richleigh/env
func ExampleParse() {
	type config struct {
		Home         string `env:"HOME"`
		Port         int    `env:"PORT"`
		IsProduction bool   `env:"PRODUCTION,optional"`
	}
	os.Setenv("HOME", "/tmp/fakehome")
	os.Setenv("PORT", "3000")
	defer os.Setenv("HOME", "")
	defer os.Setenv("PORT", "")

	cfg := config{}
	err := env.Parse(&cfg)
	if err == nil {
		fmt.Println(cfg)
	} else {
		fmt.Println(err)
	}
	// Output: {/tmp/fakehome 3000 false}
}
예제 #13
0
파일: env_test.go 프로젝트: richleigh/env
func TestPassReference(t *testing.T) {
	cfg := Config{}
	assert.Error(t, env.Parse(cfg))
}
예제 #14
0
파일: env_test.go 프로젝트: richleigh/env
func TestPassAnInvalidPtr(t *testing.T) {
	var thisShouldBreak int
	assert.Error(t, env.Parse(&thisShouldBreak))
}
예제 #15
0
파일: env_test.go 프로젝트: richleigh/env
func TestEmptyVars(t *testing.T) {
	cfg := Config{}
	assert.Error(t, env.Parse(&cfg))
}