common_test.go 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. package controller
  2. import (
  3. "testing"
  4. "github.com/gravitl/netmaker/models"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. type NodeValidationTC struct {
  8. testname string
  9. node models.Node
  10. errorMessage string
  11. }
  12. type NodeValidationUpdateTC struct {
  13. testname string
  14. node models.NodeUpdate
  15. errorMessage string
  16. }
  17. func TestCreateNode(t *testing.T) {
  18. }
  19. func TestDeleteNode(t *testing.T) {
  20. }
  21. func TestGetNode(t *testing.T) {
  22. }
  23. func TestGetPeerList(t *testing.T) {
  24. }
  25. func TestNodeCheckIn(t *testing.T) {
  26. }
  27. func TestSetNetworkNodesLastModified(t *testing.T) {
  28. }
  29. func TestTimestampNode(t *testing.T) {
  30. }
  31. func TestUpdateNode(t *testing.T) {
  32. }
  33. func TestValidateNodeCreate(t *testing.T) {
  34. cases := []NodeValidationTC{
  35. // NodeValidationTC{
  36. // testname: "EmptyAddress",
  37. // node: models.Node{
  38. // Address: "",
  39. // },
  40. // errorMessage: "Field validation for 'Endpoint' failed on the 'address_check' tag",
  41. // },
  42. NodeValidationTC{
  43. testname: "BadAddress",
  44. node: models.Node{
  45. Address: "256.0.0.1",
  46. },
  47. errorMessage: "Field validation for 'Address' failed on the 'ipv4' tag",
  48. },
  49. NodeValidationTC{
  50. testname: "BadAddress6",
  51. node: models.Node{
  52. Address6: "2607::abcd:efgh::1",
  53. },
  54. errorMessage: "Field validation for 'Address6' failed on the 'ipv6' tag",
  55. },
  56. NodeValidationTC{
  57. testname: "BadLocalAddress",
  58. node: models.Node{
  59. LocalAddress: "10.0.200.300",
  60. },
  61. errorMessage: "Field validation for 'LocalAddress' failed on the 'ip' tag",
  62. },
  63. NodeValidationTC{
  64. testname: "InvalidName",
  65. node: models.Node{
  66. Name: "mynode*",
  67. },
  68. errorMessage: "Field validation for 'Name' failed on the 'alphanum' tag",
  69. },
  70. NodeValidationTC{
  71. testname: "NameTooLong",
  72. node: models.Node{
  73. Name: "mynodexmynode",
  74. },
  75. errorMessage: "Field validation for 'Name' failed on the 'max' tag",
  76. },
  77. NodeValidationTC{
  78. testname: "ListenPortMin",
  79. node: models.Node{
  80. ListenPort: 1023,
  81. },
  82. errorMessage: "Field validation for 'ListenPort' failed on the 'min' tag",
  83. },
  84. NodeValidationTC{
  85. testname: "ListenPortMax",
  86. node: models.Node{
  87. ListenPort: 65536,
  88. },
  89. errorMessage: "Field validation for 'ListenPort' failed on the 'max' tag",
  90. },
  91. NodeValidationTC{
  92. testname: "PublicKeyEmpty",
  93. node: models.Node{
  94. PublicKey: "",
  95. },
  96. errorMessage: "Field validation for 'PublicKey' failed on the 'required' tag",
  97. },
  98. NodeValidationTC{
  99. testname: "PublicKeyInvalid",
  100. node: models.Node{
  101. PublicKey: "junk%key",
  102. },
  103. errorMessage: "Field validation for 'PublicKey' failed on the 'base64' tag",
  104. },
  105. NodeValidationTC{
  106. testname: "EndpointInvalid",
  107. node: models.Node{
  108. Endpoint: "10.2.0.300",
  109. },
  110. errorMessage: "Field validation for 'Endpoint' failed on the 'ip' tag",
  111. },
  112. NodeValidationTC{
  113. testname: "EndpointEmpty",
  114. node: models.Node{
  115. Endpoint: "",
  116. },
  117. errorMessage: "Field validation for 'Endpoint' failed on the 'required' tag",
  118. },
  119. NodeValidationTC{
  120. testname: "PersistentKeepaliveMax",
  121. node: models.Node{
  122. PersistentKeepalive: 1001,
  123. },
  124. errorMessage: "Field validation for 'PersistentKeepalive' failed on the 'max' tag",
  125. },
  126. NodeValidationTC{
  127. testname: "MacAddressInvalid",
  128. node: models.Node{
  129. MacAddress: "01:02:03:04:05",
  130. },
  131. errorMessage: "Field validation for 'MacAddress' failed on the 'mac' tag",
  132. },
  133. NodeValidationTC{
  134. testname: "MacAddressMissing",
  135. node: models.Node{
  136. MacAddress: "",
  137. },
  138. errorMessage: "Field validation for 'MacAddress' failed on the 'required' tag",
  139. },
  140. NodeValidationTC{
  141. testname: "EmptyPassword",
  142. node: models.Node{
  143. Password: "",
  144. },
  145. errorMessage: "Field validation for 'Password' failed on the 'required' tag",
  146. },
  147. NodeValidationTC{
  148. testname: "ShortPassword",
  149. node: models.Node{
  150. Password: "1234",
  151. },
  152. errorMessage: "Field validation for 'Password' failed on the 'min' tag",
  153. },
  154. NodeValidationTC{
  155. testname: "NoNetwork",
  156. node: models.Node{
  157. Network: "badnet",
  158. },
  159. errorMessage: "Field validation for 'Network' failed on the 'network_exists' tag",
  160. },
  161. }
  162. for _, tc := range cases {
  163. t.Run(tc.testname, func(t *testing.T) {
  164. err := ValidateNodeCreate("skynet", tc.node)
  165. assert.NotNil(t, err)
  166. assert.Contains(t, err.Error(), tc.errorMessage)
  167. })
  168. }
  169. t.Run("MacAddresUnique", func(t *testing.T) {
  170. createNet()
  171. node := models.Node{MacAddress: "01:02:03:04:05:06", Network: "skynet"}
  172. _, err := CreateNode(node, "skynet")
  173. assert.Nil(t, err)
  174. err = ValidateNodeCreate("skynet", node)
  175. assert.NotNil(t, err)
  176. assert.Contains(t, err.Error(), "Field validation for 'MacAddress' failed on the 'macaddress_unique' tag")
  177. })
  178. t.Run("EmptyAddress", func(t *testing.T) {
  179. node := models.Node{Address: ""}
  180. err := ValidateNodeCreate("skynet", node)
  181. assert.NotNil(t, err)
  182. assert.NotContains(t, err.Error(), "Field validation for 'Address' failed on the 'address_check' tag")
  183. })
  184. }
  185. func TestValidateNodeUpdate(t *testing.T) {
  186. //cases
  187. cases := []NodeValidationUpdateTC{
  188. NodeValidationUpdateTC{
  189. testname: "BadAddress",
  190. node: models.NodeUpdate{
  191. Address: "256.0.0.1",
  192. },
  193. errorMessage: "Field validation for 'Address' failed on the 'address_check' tag",
  194. },
  195. NodeValidationUpdateTC{
  196. testname: "BadAddress6",
  197. node: models.NodeUpdate{
  198. Address6: "2607::abcd:efgh::1",
  199. },
  200. errorMessage: "Field validation for 'Address6' failed on the 'address6_check' tag",
  201. },
  202. NodeValidationUpdateTC{
  203. testname: "BadLocalAddress",
  204. node: models.NodeUpdate{
  205. LocalAddress: "10.0.200.300",
  206. },
  207. errorMessage: "Field validation for 'LocalAddress' failed on the 'localaddress_check' tag",
  208. },
  209. NodeValidationUpdateTC{
  210. testname: "InvalidName",
  211. node: models.NodeUpdate{
  212. Name: "mynode*",
  213. },
  214. errorMessage: "Field validation for 'Name' failed on the 'name_valid' tag",
  215. },
  216. NodeValidationUpdateTC{
  217. testname: "NameTooLong",
  218. node: models.NodeUpdate{
  219. Name: "mynodexmynode",
  220. },
  221. errorMessage: "Field validation for 'Name' failed on the 'max' tag",
  222. },
  223. NodeValidationUpdateTC{
  224. testname: "ListenPortMin",
  225. node: models.NodeUpdate{
  226. ListenPort: 1023,
  227. },
  228. errorMessage: "Field validation for 'ListenPort' failed on the 'min' tag",
  229. },
  230. NodeValidationUpdateTC{
  231. testname: "ListenPortMax",
  232. node: models.NodeUpdate{
  233. ListenPort: 65536,
  234. },
  235. errorMessage: "Field validation for 'ListenPort' failed on the 'max' tag",
  236. },
  237. NodeValidationUpdateTC{
  238. testname: "PublicKeyInvalid",
  239. node: models.NodeUpdate{
  240. PublicKey: "",
  241. },
  242. errorMessage: "Field validation for 'PublicKey' failed on the 'pubkey_check' tag",
  243. },
  244. NodeValidationUpdateTC{
  245. testname: "EndpointInvalid",
  246. node: models.NodeUpdate{
  247. Endpoint: "10.2.0.300",
  248. },
  249. errorMessage: "Field validation for 'Endpoint' failed on the 'endpoint_check' tag",
  250. },
  251. NodeValidationUpdateTC{
  252. testname: "PersistentKeepaliveMax",
  253. node: models.NodeUpdate{
  254. PersistentKeepalive: 1001,
  255. },
  256. errorMessage: "Field validation for 'PersistentKeepalive' failed on the 'max' tag",
  257. },
  258. NodeValidationUpdateTC{
  259. testname: "MacAddressInvalid",
  260. node: models.NodeUpdate{
  261. MacAddress: "01:02:03:04:05",
  262. },
  263. errorMessage: "Field validation for 'MacAddress' failed on the 'macaddress_valid' tag",
  264. },
  265. NodeValidationUpdateTC{
  266. testname: "MacAddressMissing",
  267. node: models.NodeUpdate{
  268. MacAddress: "",
  269. },
  270. errorMessage: "Field validation for 'MacAddress' failed on the 'required' tag",
  271. },
  272. NodeValidationUpdateTC{
  273. testname: "EmptyPassword",
  274. node: models.NodeUpdate{
  275. Password: "",
  276. },
  277. errorMessage: "Field validation for 'Password' failed on the 'password_check' tag",
  278. },
  279. NodeValidationUpdateTC{
  280. testname: "ShortPassword",
  281. node: models.NodeUpdate{
  282. Password: "1234",
  283. },
  284. errorMessage: "Field validation for 'Password' failed on the 'password_check' tag",
  285. },
  286. NodeValidationUpdateTC{
  287. testname: "NoNetwork",
  288. node: models.NodeUpdate{
  289. Network: "badnet",
  290. },
  291. errorMessage: "Field validation for 'Network' failed on the 'network_exists' tag",
  292. },
  293. }
  294. for _, tc := range cases {
  295. t.Run(tc.testname, func(t *testing.T) {
  296. err := ValidateNodeUpdate("skynet", tc.node)
  297. assert.NotNil(t, err)
  298. assert.Contains(t, err.Error(), tc.errorMessage)
  299. })
  300. }
  301. }