ipnet_test.go 1.6 KB

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