ip_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package pflag
  2. import (
  3. "fmt"
  4. "net"
  5. "os"
  6. "testing"
  7. )
  8. func setUpIP(ip *net.IP) *FlagSet {
  9. f := NewFlagSet("test", ContinueOnError)
  10. f.IPVar(ip, "address", net.ParseIP("0.0.0.0"), "IP Address")
  11. return f
  12. }
  13. func TestIP(t *testing.T) {
  14. testCases := []struct {
  15. input string
  16. success bool
  17. expected string
  18. }{
  19. {"0.0.0.0", true, "0.0.0.0"},
  20. {" 0.0.0.0 ", true, "0.0.0.0"},
  21. {"1.2.3.4", true, "1.2.3.4"},
  22. {"127.0.0.1", true, "127.0.0.1"},
  23. {"255.255.255.255", true, "255.255.255.255"},
  24. {"", false, ""},
  25. {"0", false, ""},
  26. {"localhost", false, ""},
  27. {"0.0.0", false, ""},
  28. {"0.0.0.", false, ""},
  29. {"0.0.0.0.", false, ""},
  30. {"0.0.0.256", false, ""},
  31. {"0 . 0 . 0 . 0", false, ""},
  32. }
  33. devnull, _ := os.Open(os.DevNull)
  34. os.Stderr = devnull
  35. for i := range testCases {
  36. var addr net.IP
  37. f := setUpIP(&addr)
  38. tc := &testCases[i]
  39. arg := fmt.Sprintf("--address=%s", tc.input)
  40. err := f.Parse([]string{arg})
  41. if err != nil && tc.success == true {
  42. t.Errorf("expected success, got %q", err)
  43. continue
  44. } else if err == nil && tc.success == false {
  45. t.Errorf("expected failure")
  46. continue
  47. } else if tc.success {
  48. ip, err := f.GetIP("address")
  49. if err != nil {
  50. t.Errorf("Got error trying to fetch the IP flag: %v", err)
  51. }
  52. if ip.String() != tc.expected {
  53. t.Errorf("expected %q, got %q", tc.expected, ip.String())
  54. }
  55. }
  56. }
  57. }