generic_http_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package generichttp
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestVerifySourceNetwork(t *testing.T) {
  7. testCases := []struct {
  8. name string
  9. addr string
  10. allowLoopback bool
  11. allowLinkLocal bool
  12. allowPrivate bool
  13. expectErr bool
  14. }{
  15. {
  16. name: "Invalid IP address",
  17. addr: "not-an-ip",
  18. allowLoopback: true,
  19. allowLinkLocal: true,
  20. allowPrivate: true,
  21. expectErr: true,
  22. },
  23. {
  24. name: "Loopback local not allowed",
  25. addr: "127.0.0.1",
  26. allowLoopback: false,
  27. allowLinkLocal: true,
  28. allowPrivate: true,
  29. expectErr: true,
  30. },
  31. {
  32. name: "Loopback local allowed",
  33. addr: "127.0.0.1",
  34. allowLoopback: true,
  35. allowLinkLocal: true,
  36. allowPrivate: true,
  37. expectErr: false,
  38. },
  39. {
  40. name: "Unspecified (0.0.0.0) not allowed",
  41. addr: "0.0.0.0",
  42. allowLoopback: false,
  43. allowLinkLocal: true,
  44. allowPrivate: true,
  45. expectErr: true,
  46. },
  47. {
  48. name: "Link local unicast not allowed",
  49. addr: "169.254.0.1",
  50. allowLoopback: true,
  51. allowLinkLocal: false,
  52. allowPrivate: true,
  53. expectErr: true,
  54. },
  55. {
  56. name: "Link local unicast allowed",
  57. addr: "169.254.0.1",
  58. allowLoopback: true,
  59. allowLinkLocal: true,
  60. allowPrivate: true,
  61. expectErr: false,
  62. },
  63. {
  64. name: "Private address not allowed",
  65. addr: "192.168.0.1",
  66. allowLoopback: true,
  67. allowLinkLocal: true,
  68. allowPrivate: false,
  69. expectErr: true,
  70. },
  71. {
  72. name: "Private address allowed",
  73. addr: "192.168.0.1",
  74. allowLoopback: true,
  75. allowLinkLocal: true,
  76. allowPrivate: true,
  77. expectErr: false,
  78. },
  79. {
  80. name: "Global unicast should be allowed",
  81. addr: "8.8.8.8",
  82. allowLoopback: false,
  83. allowLinkLocal: false,
  84. allowPrivate: false,
  85. expectErr: false,
  86. },
  87. {
  88. name: "Port in address with global IP",
  89. addr: "8.8.8.8:8080",
  90. allowLoopback: false,
  91. allowLinkLocal: false,
  92. allowPrivate: false,
  93. expectErr: false,
  94. },
  95. }
  96. for _, tc := range testCases {
  97. t.Run(tc.name, func(t *testing.T) {
  98. config := NewDefaultConfig()
  99. // Override config for the test
  100. config.AllowLoopbackSourceAddresses = tc.allowLoopback
  101. config.AllowLinkLocalSourceAddresses = tc.allowLinkLocal
  102. config.AllowPrivateSourceAddresses = tc.allowPrivate
  103. err := verifySourceNetwork(tc.addr, &config)
  104. if tc.expectErr {
  105. require.Error(t, err)
  106. } else {
  107. require.NoError(t, err)
  108. }
  109. })
  110. }
  111. }