flag_test.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package pkg
  2. import (
  3. "flag"
  4. "os"
  5. "testing"
  6. )
  7. func TestSetFlagsFromEnv(t *testing.T) {
  8. fs := flag.NewFlagSet("testing", flag.ExitOnError)
  9. fs.String("a", "", "")
  10. fs.String("b", "", "")
  11. fs.String("c", "", "")
  12. fs.Parse([]string{})
  13. os.Clearenv()
  14. // flags should be settable using env vars
  15. os.Setenv("ETCD_A", "foo")
  16. // and command-line flags
  17. if err := fs.Set("b", "bar"); err != nil {
  18. t.Fatal(err)
  19. }
  20. // command-line flags take precedence over env vars
  21. os.Setenv("ETCD_C", "woof")
  22. if err := fs.Set("c", "quack"); err != nil {
  23. t.Fatal(err)
  24. }
  25. // first verify that flags are as expected before reading the env
  26. for f, want := range map[string]string{
  27. "a": "",
  28. "b": "bar",
  29. "c": "quack",
  30. } {
  31. if got := fs.Lookup(f).Value.String(); got != want {
  32. t.Fatalf("flag %q=%q, want %q", f, got, want)
  33. }
  34. }
  35. // now read the env and verify flags were updated as expected
  36. SetFlagsFromEnv(fs)
  37. for f, want := range map[string]string{
  38. "a": "foo",
  39. "b": "bar",
  40. "c": "quack",
  41. } {
  42. if got := fs.Lookup(f).Value.String(); got != want {
  43. t.Errorf("flag %q=%q, want %q", f, got, want)
  44. }
  45. }
  46. }