networkHttpController_test.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package controller
  2. import (
  3. "testing"
  4. "github.com/gravitl/netmaker/models"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. type NetworkValidationTestCase struct {
  8. testname string
  9. network models.Network
  10. errMessage string
  11. }
  12. func TestGetNetworks(t *testing.T) {
  13. //calls functions.ListNetworks --- nothing to be don
  14. }
  15. func TestCreateNetwork(t *testing.T) {
  16. }
  17. func TestGetNetwork(t *testing.T) {
  18. }
  19. func TestUpdateNetwork(t *testing.T) {
  20. }
  21. func TestDeleteNetwork(t *testing.T) {
  22. }
  23. func TestKeyUpdate(t *testing.T) {
  24. }
  25. func TestCreateKey(t *testing.T) {
  26. }
  27. func TestGetKey(t *testing.T) {
  28. }
  29. func TestDeleteKey(t *testing.T) {
  30. }
  31. func TestSecurityCheck(t *testing.T) {
  32. }
  33. func TestValidateNetworkUpdate(t *testing.T) {
  34. }
  35. func TestValidateNetworkCreate(t *testing.T) {
  36. yes := true
  37. no := false
  38. //DeleteNetworks
  39. cases := []NetworkValidationTestCase{
  40. NetworkValidationTestCase{
  41. testname: "InvalidAddress",
  42. network: models.Network{
  43. AddressRange: "10.0.0.256",
  44. NetID: "skynet",
  45. IsDualStack: &no,
  46. },
  47. errMessage: "Field validation for 'AddressRange' failed on the 'cidr' tag",
  48. },
  49. NetworkValidationTestCase{
  50. testname: "BadDisplayName",
  51. network: models.Network{
  52. AddressRange: "10.0.0.1/24",
  53. NetID: "skynet",
  54. DisplayName: "skynet*",
  55. IsDualStack: &no,
  56. },
  57. errMessage: "Field validation for 'DisplayName' failed on the 'alphanum' tag",
  58. },
  59. NetworkValidationTestCase{
  60. testname: "DisplayNameTooLong",
  61. network: models.Network{
  62. AddressRange: "10.0.0.1/24",
  63. NetID: "skynet",
  64. DisplayName: "Thisisareallylongdisplaynamethatistoolong",
  65. IsDualStack: &no,
  66. },
  67. errMessage: "Field validation for 'DisplayName' failed on the 'max' tag",
  68. },
  69. NetworkValidationTestCase{
  70. testname: "DisplayNameTooShort",
  71. network: models.Network{
  72. AddressRange: "10.0.0.1/24",
  73. NetID: "skynet",
  74. DisplayName: "1",
  75. IsDualStack: &no,
  76. },
  77. errMessage: "Field validation for 'DisplayName' failed on the 'min' tag",
  78. },
  79. NetworkValidationTestCase{
  80. testname: "NetIDMissing",
  81. network: models.Network{
  82. AddressRange: "10.0.0.1/24",
  83. IsDualStack: &no,
  84. },
  85. errMessage: "Field validation for 'NetID' failed on the 'required' tag",
  86. },
  87. NetworkValidationTestCase{
  88. testname: "InvalidNetID",
  89. network: models.Network{
  90. AddressRange: "10.0.0.1/24",
  91. NetID: "contains spaces",
  92. IsDualStack: &no,
  93. },
  94. errMessage: "Field validation for 'NetID' failed on the 'alphanum' tag",
  95. },
  96. NetworkValidationTestCase{
  97. testname: "NetIDTooShort",
  98. network: models.Network{
  99. AddressRange: "10.0.0.1/24",
  100. NetID: "",
  101. IsDualStack: &no,
  102. },
  103. errMessage: "Field validation for 'NetID' failed on the 'required' tag",
  104. },
  105. NetworkValidationTestCase{
  106. testname: "NetIDTooLong",
  107. network: models.Network{
  108. AddressRange: "10.0.0.1/24",
  109. NetID: "LongNetIDName",
  110. IsDualStack: &no,
  111. },
  112. errMessage: "Field validation for 'NetID' failed on the 'max' tag",
  113. },
  114. NetworkValidationTestCase{
  115. testname: "ListenPortTooLow",
  116. network: models.Network{
  117. AddressRange: "10.0.0.1/24",
  118. NetID: "skynet",
  119. DefaultListenPort: 1023,
  120. IsDualStack: &no,
  121. },
  122. errMessage: "Field validation for 'DefaultListenPort' failed on the 'min' tag",
  123. },
  124. NetworkValidationTestCase{
  125. testname: "ListenPortTooHigh",
  126. network: models.Network{
  127. AddressRange: "10.0.0.1/24",
  128. NetID: "skynet",
  129. DefaultListenPort: 65536,
  130. IsDualStack: &no,
  131. },
  132. errMessage: "Field validation for 'DefaultListenPort' failed on the 'max' tag",
  133. },
  134. NetworkValidationTestCase{
  135. testname: "KeepAliveTooBig",
  136. network: models.Network{
  137. AddressRange: "10.0.0.1/24",
  138. NetID: "skynet",
  139. DefaultKeepalive: 1010,
  140. IsDualStack: &no,
  141. },
  142. errMessage: "Field validation for 'DefaultKeepalive' failed on the 'max' tag",
  143. },
  144. NetworkValidationTestCase{
  145. testname: "InvalidLocalRange",
  146. network: models.Network{
  147. AddressRange: "10.0.0.1/24",
  148. NetID: "skynet",
  149. LocalRange: "192.168.0.1",
  150. IsDualStack: &no,
  151. },
  152. errMessage: "Field validation for 'LocalRange' failed on the 'cidr' tag",
  153. },
  154. NetworkValidationTestCase{
  155. testname: "DualStackWithoutIPv6",
  156. network: models.Network{
  157. AddressRange: "10.0.0.1/24",
  158. NetID: "skynet",
  159. IsDualStack: &yes,
  160. },
  161. errMessage: "Field validation for 'AddressRange6' failed on the 'addressrange6_valid' tag",
  162. },
  163. NetworkValidationTestCase{
  164. testname: "CheckInIntervalTooBig",
  165. network: models.Network{
  166. AddressRange: "10.0.0.1/24",
  167. NetID: "skynet",
  168. IsDualStack: &no,
  169. DefaultCheckInInterval: 100001,
  170. },
  171. errMessage: "Field validation for 'DefaultCheckInInterval' failed on the 'max' tag",
  172. },
  173. NetworkValidationTestCase{
  174. testname: "CheckInIntervalTooSmall",
  175. network: models.Network{
  176. AddressRange: "10.0.0.1/24",
  177. NetID: "skynet",
  178. IsDualStack: &no,
  179. DefaultCheckInInterval: 1,
  180. },
  181. errMessage: "Field validation for 'DefaultCheckInInterval' failed on the 'min' tag",
  182. },
  183. }
  184. for _, tc := range cases {
  185. t.Run(tc.testname, func(t *testing.T) {
  186. err := ValidateNetworkCreate(tc.network)
  187. assert.NotNil(t, err)
  188. assert.Contains(t, err.Error(), tc.errMessage)
  189. })
  190. }
  191. t.Run("DuplicateNetID", func(t *testing.T) {
  192. var net1, net2 models.Network
  193. net1.NetID = "skylink"
  194. net1.AddressRange = "10.0.0.1/24"
  195. net1.DisplayName = "mynetwork"
  196. net2.NetID = "skylink"
  197. net2.AddressRange = "10.0.1.1/24"
  198. net2.IsDualStack = &no
  199. err := CreateNetwork(net1)
  200. assert.Nil(t, err)
  201. err = ValidateNetworkCreate(net2)
  202. assert.NotNil(t, err)
  203. assert.Contains(t, err.Error(), "Field validation for 'NetID' failed on the 'netid_valid' tag")
  204. })
  205. t.Run("DuplicateDisplayName", func(t *testing.T) {
  206. var network models.Network
  207. network.NetID = "wirecat"
  208. network.AddressRange = "10.0.100.1/24"
  209. network.IsDualStack = &no
  210. network.DisplayName = "mynetwork"
  211. err := ValidateNetworkCreate(network)
  212. assert.NotNil(t, err)
  213. assert.Contains(t, err.Error(), "Field validation for 'DisplayName' failed on the 'displayname_unique' tag")
  214. })
  215. }