networkHttpController_test.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. package controller
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/gravitl/netmaker/database"
  6. "github.com/gravitl/netmaker/logic"
  7. "github.com/gravitl/netmaker/models"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. type NetworkValidationTestCase struct {
  11. testname string
  12. network models.Network
  13. errMessage string
  14. }
  15. func TestCreateNetwork(t *testing.T) {
  16. database.InitializeDatabase()
  17. deleteAllNetworks()
  18. var network models.Network
  19. network.NetID = "skynet"
  20. network.AddressRange = "10.0.0.1/24"
  21. network.DisplayName = "mynetwork"
  22. err := CreateNetwork(network)
  23. assert.Nil(t, err)
  24. }
  25. func TestGetNetwork(t *testing.T) {
  26. database.InitializeDatabase()
  27. createNet()
  28. t.Run("GetExistingNetwork", func(t *testing.T) {
  29. network, err := GetNetwork("skynet")
  30. assert.Nil(t, err)
  31. assert.Equal(t, "skynet", network.NetID)
  32. })
  33. t.Run("GetNonExistantNetwork", func(t *testing.T) {
  34. network, err := GetNetwork("doesnotexist")
  35. assert.EqualError(t, err, "no result found")
  36. assert.Equal(t, "", network.NetID)
  37. })
  38. }
  39. func TestDeleteNetwork(t *testing.T) {
  40. database.InitializeDatabase()
  41. createNet()
  42. //create nodes
  43. t.Run("NetworkwithNodes", func(t *testing.T) {
  44. })
  45. t.Run("DeleteExistingNetwork", func(t *testing.T) {
  46. err := DeleteNetwork("skynet")
  47. assert.Nil(t, err)
  48. })
  49. t.Run("NonExistantNetwork", func(t *testing.T) {
  50. err := DeleteNetwork("skynet")
  51. assert.Nil(t, err)
  52. })
  53. }
  54. func TestKeyUpdate(t *testing.T) {
  55. database.InitializeDatabase()
  56. deleteAllNetworks()
  57. createNet()
  58. t.Run("InvalidNetwork", func(*testing.T) {
  59. _, err := KeyUpdate("badnet")
  60. assert.Nil(t, err)
  61. nodes, err := logic.GetNetworkNodes("badnet")
  62. assert.Nil(t, err)
  63. assert.Equal(t, 0, len(nodes))
  64. })
  65. t.Run("ValidNetwork", func(*testing.T) {
  66. createTestNode()
  67. _, err := KeyUpdate("skynet")
  68. assert.Nil(t, err)
  69. nodes, err := logic.GetNetworkNodes("skynet")
  70. assert.Nil(t, err)
  71. for _, node := range nodes {
  72. assert.Equal(t, models.NODE_UPDATE_KEY, node.Action)
  73. }
  74. })
  75. }
  76. func TestCreateKey(t *testing.T) {
  77. database.InitializeDatabase()
  78. createNet()
  79. keys, _ := GetKeys("skynet")
  80. for _, key := range keys {
  81. DeleteKey(key.Name, "skynet")
  82. }
  83. var accesskey models.AccessKey
  84. var network models.Network
  85. network.NetID = "skynet"
  86. t.Run("NameTooLong", func(t *testing.T) {
  87. network, err := GetNetwork("skynet")
  88. assert.Nil(t, err)
  89. accesskey.Name = "Thisisareallylongkeynamethatwillfail"
  90. _, err = CreateAccessKey(accesskey, network)
  91. assert.NotNil(t, err)
  92. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'max' tag")
  93. })
  94. t.Run("BlankName", func(t *testing.T) {
  95. network, err := GetNetwork("skynet")
  96. assert.Nil(t, err)
  97. accesskey.Name = ""
  98. key, err := CreateAccessKey(accesskey, network)
  99. assert.Nil(t, err)
  100. assert.NotEqual(t, "", key.Name)
  101. })
  102. t.Run("InvalidValue", func(t *testing.T) {
  103. network, err := GetNetwork("skynet")
  104. assert.Nil(t, err)
  105. accesskey.Value = "bad-value"
  106. _, err = CreateAccessKey(accesskey, network)
  107. assert.NotNil(t, err)
  108. assert.Contains(t, err.Error(), "Field validation for 'Value' failed on the 'alphanum' tag")
  109. })
  110. t.Run("BlankValue", func(t *testing.T) {
  111. network, err := GetNetwork("skynet")
  112. assert.Nil(t, err)
  113. accesskey.Name = "mykey"
  114. accesskey.Value = ""
  115. key, err := CreateAccessKey(accesskey, network)
  116. assert.Nil(t, err)
  117. assert.NotEqual(t, "", key.Value)
  118. assert.Equal(t, accesskey.Name, key.Name)
  119. })
  120. t.Run("ValueTooLong", func(t *testing.T) {
  121. network, err := GetNetwork("skynet")
  122. assert.Nil(t, err)
  123. accesskey.Name = "keyname"
  124. accesskey.Value = "AccessKeyValuethatistoolong"
  125. _, err = CreateAccessKey(accesskey, network)
  126. assert.NotNil(t, err)
  127. assert.Contains(t, err.Error(), "Field validation for 'Value' failed on the 'max' tag")
  128. })
  129. t.Run("BlankUses", func(t *testing.T) {
  130. network, err := GetNetwork("skynet")
  131. assert.Nil(t, err)
  132. accesskey.Uses = 0
  133. accesskey.Value = ""
  134. key, err := CreateAccessKey(accesskey, network)
  135. assert.Nil(t, err)
  136. assert.Equal(t, 1, key.Uses)
  137. })
  138. t.Run("DuplicateKey", func(t *testing.T) {
  139. network, err := GetNetwork("skynet")
  140. assert.Nil(t, err)
  141. accesskey.Name = "mykey"
  142. _, err = CreateAccessKey(accesskey, network)
  143. assert.NotNil(t, err)
  144. assert.EqualError(t, err, "duplicate AccessKey Name")
  145. })
  146. }
  147. func TestGetKeys(t *testing.T) {
  148. database.InitializeDatabase()
  149. deleteAllNetworks()
  150. createNet()
  151. network, err := GetNetwork("skynet")
  152. assert.Nil(t, err)
  153. var key models.AccessKey
  154. key.Name = "mykey"
  155. _, err = CreateAccessKey(key, network)
  156. assert.Nil(t, err)
  157. t.Run("KeyExists", func(t *testing.T) {
  158. keys, err := GetKeys(network.NetID)
  159. assert.Nil(t, err)
  160. assert.NotEqual(t, models.AccessKey{}, keys)
  161. })
  162. t.Run("NonExistantKey", func(t *testing.T) {
  163. err := DeleteKey("mykey", "skynet")
  164. assert.Nil(t, err)
  165. keys, err := GetKeys(network.NetID)
  166. assert.Nil(t, err)
  167. assert.Equal(t, []models.AccessKey(nil), keys)
  168. })
  169. }
  170. func TestDeleteKey(t *testing.T) {
  171. database.InitializeDatabase()
  172. createNet()
  173. network, err := GetNetwork("skynet")
  174. assert.Nil(t, err)
  175. var key models.AccessKey
  176. key.Name = "mykey"
  177. _, err = CreateAccessKey(key, network)
  178. assert.Nil(t, err)
  179. t.Run("ExistingKey", func(t *testing.T) {
  180. err := DeleteKey("mykey", "skynet")
  181. assert.Nil(t, err)
  182. })
  183. t.Run("NonExistantKey", func(t *testing.T) {
  184. err := DeleteKey("mykey", "skynet")
  185. assert.NotNil(t, err)
  186. assert.Equal(t, "key mykey does not exist", err.Error())
  187. })
  188. }
  189. func TestSecurityCheck(t *testing.T) {
  190. //these seem to work but not sure it the tests are really testing the functionality
  191. database.InitializeDatabase()
  192. t.Run("NoNetwork", func(t *testing.T) {
  193. err, networks, username := SecurityCheck(false, "", "Bearer secretkey")
  194. assert.Nil(t, err)
  195. t.Log(networks, username)
  196. })
  197. t.Run("WithNetwork", func(t *testing.T) {
  198. err, networks, username := SecurityCheck(false, "skynet", "Bearer secretkey")
  199. assert.Nil(t, err)
  200. t.Log(networks, username)
  201. })
  202. t.Run("BadNet", func(t *testing.T) {
  203. t.Skip()
  204. err, networks, username := SecurityCheck(false, "badnet", "Bearer secretkey")
  205. assert.NotNil(t, err)
  206. t.Log(err)
  207. t.Log(networks, username)
  208. })
  209. t.Run("BadToken", func(t *testing.T) {
  210. err, networks, username := SecurityCheck(false, "skynet", "Bearer badkey")
  211. assert.NotNil(t, err)
  212. t.Log(err)
  213. t.Log(networks, username)
  214. })
  215. }
  216. func TestGetSignupToken(t *testing.T) {
  217. database.InitializeDatabase()
  218. key, err := GetSignupToken("skynet")
  219. assert.Nil(t, err)
  220. assert.NotNil(t, key.AccessString)
  221. }
  222. func TestAlertNetwork(t *testing.T) {
  223. database.InitializeDatabase()
  224. deleteAllNetworks()
  225. createNet()
  226. t.Run("ValidNetwork", func(*testing.T) {
  227. now, err := GetNetwork("skynet")
  228. time.Sleep(1 * time.Second)
  229. assert.Nil(t, err)
  230. err = AlertNetwork("skynet")
  231. assert.Nil(t, err)
  232. updated, err := GetNetwork("skynet")
  233. assert.Nil(t, err)
  234. assert.Greater(t, updated.NodesLastModified, now.NodesLastModified)
  235. assert.Greater(t, updated.NetworkLastModified, now.NetworkLastModified)
  236. })
  237. t.Run("BadNetwork", func(*testing.T) {
  238. err := AlertNetwork("badnet")
  239. assert.EqualError(t, err, "no result found")
  240. })
  241. }
  242. func TestNetworkUpdate(t *testing.T) {
  243. //var newNet models.Network
  244. database.InitializeDatabase()
  245. deleteAllNetworks()
  246. createNet()
  247. t.Run("SimpleChange", func(*testing.T) {
  248. network, err := GetNetwork("skynet")
  249. assert.Nil(t, err)
  250. newnet, err := GetNetwork("skynet")
  251. assert.Nil(t, err)
  252. newnet.DisplayName = "HelloWorld"
  253. rangeupdate, localupdate, err := network.Update(&newnet)
  254. assert.Nil(t, err)
  255. assert.False(t, rangeupdate)
  256. assert.False(t, localupdate)
  257. net, err := GetNetwork("skynet")
  258. assert.Nil(t, err)
  259. assert.Equal(t, "HelloWorld", net.DisplayName)
  260. })
  261. t.Run("RangeChange", func(*testing.T) {
  262. network, err := GetNetwork("skynet")
  263. assert.Nil(t, err)
  264. newnet, err := GetNetwork("skynet")
  265. assert.Nil(t, err)
  266. newnet.AddressRange = "10.100.100.0/24"
  267. rangeupdate, localupdate, err := network.Update(&newnet)
  268. assert.Nil(t, err)
  269. assert.True(t, rangeupdate)
  270. assert.False(t, localupdate)
  271. net, err := GetNetwork("skynet")
  272. assert.Nil(t, err)
  273. assert.Equal(t, "10.100.100.0/24", net.AddressRange)
  274. })
  275. t.Run("LocalChange", func(*testing.T) {
  276. network, err := GetNetwork("skynet")
  277. assert.Nil(t, err)
  278. newnet, err := GetNetwork("skynet")
  279. assert.Nil(t, err)
  280. newnet.LocalRange = "192.168.0.0/24"
  281. rangeupdate, localupdate, err := network.Update(&newnet)
  282. assert.Nil(t, err)
  283. assert.False(t, rangeupdate)
  284. assert.True(t, localupdate)
  285. net, err := GetNetwork("skynet")
  286. assert.Nil(t, err)
  287. assert.Equal(t, "192.168.0.0/24", net.LocalRange)
  288. })
  289. t.Run("NetID", func(*testing.T) {
  290. network, err := GetNetwork("skynet")
  291. assert.Nil(t, err)
  292. newnet, err := GetNetwork("skynet")
  293. assert.Nil(t, err)
  294. newnet.NetID = "bad"
  295. rangeupdate, localupdate, err := network.Update(&newnet)
  296. assert.EqualError(t, err, "failed to update network bad, cannot change netid.")
  297. assert.False(t, rangeupdate)
  298. assert.False(t, localupdate)
  299. net, err := GetNetwork("skynet")
  300. assert.Nil(t, err)
  301. assert.Equal(t, "skynet", net.NetID)
  302. })
  303. }
  304. func deleteAllNetworks() {
  305. deleteAllNodes()
  306. nets, _ := logic.GetNetworks()
  307. for _, net := range nets {
  308. DeleteNetwork(net.NetID)
  309. }
  310. }
  311. func createNet() {
  312. var network models.Network
  313. network.NetID = "skynet"
  314. network.AddressRange = "10.0.0.1/24"
  315. network.DisplayName = "mynetwork"
  316. _, err := GetNetwork("skynet")
  317. if err != nil {
  318. CreateNetwork(network)
  319. }
  320. }
  321. func getNet() models.Network {
  322. network, _ := GetNetwork("skynet")
  323. return network
  324. }