network_test.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. package main
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "testing"
  7. "time"
  8. "github.com/gravitl/netmaker/models"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestCreateNetwork(t *testing.T) {
  12. network := models.Network{}
  13. network.NetID = "skynet"
  14. network.AddressRange = "10.71.0.0/16"
  15. deleteNetworks(t)
  16. t.Run("InvalidToken", func(t *testing.T) {
  17. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "badkey")
  18. assert.Nil(t, err, err)
  19. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  20. defer response.Body.Close()
  21. var message models.ErrorResponse
  22. err = json.NewDecoder(response.Body).Decode(&message)
  23. assert.Nil(t, err, err)
  24. assert.Equal(t, http.StatusUnauthorized, message.Code)
  25. assert.Contains(t, message.Message, "rror verifying user toke")
  26. })
  27. t.Run("CreateNetwork", func(t *testing.T) {
  28. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  29. assert.Nil(t, err, err)
  30. assert.Equal(t, http.StatusOK, response.StatusCode)
  31. var message models.ErrorResponse
  32. err = json.NewDecoder(response.Body).Decode(&message)
  33. })
  34. t.Run("DuplicateNetwork", func(t *testing.T) {
  35. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  36. assert.Nil(t, err, err)
  37. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  38. })
  39. t.Run("BadName", func(t *testing.T) {
  40. network.NetID = "thisnameistoolong"
  41. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  42. assert.Nil(t, err, err)
  43. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  44. })
  45. t.Run("BadAddress", func(t *testing.T) {
  46. network.NetID = "wirecat"
  47. network.AddressRange = "10.300.20.56/36"
  48. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  49. assert.Nil(t, err, err)
  50. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  51. })
  52. }
  53. func TestGetNetworks(t *testing.T) {
  54. t.Run("ValidToken", func(t *testing.T) {
  55. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks", "secretkey")
  56. assert.Nil(t, err, err)
  57. defer response.Body.Close()
  58. assert.Equal(t, http.StatusOK, response.StatusCode)
  59. err = json.NewDecoder(response.Body).Decode(&Networks)
  60. assert.Nil(t, err, err)
  61. })
  62. t.Run("InvalidToken", func(t *testing.T) {
  63. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks", "badkey")
  64. assert.Nil(t, err, err)
  65. defer response.Body.Close()
  66. var message models.ErrorResponse
  67. err = json.NewDecoder(response.Body).Decode(&message)
  68. assert.Nil(t, err, err)
  69. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  70. assert.Equal(t, http.StatusUnauthorized, message.Code)
  71. assert.Contains(t, message.Message, "rror verifying user toke")
  72. })
  73. }
  74. func TestGetNetwork(t *testing.T) {
  75. t.Run("ValidToken", func(t *testing.T) {
  76. var network models.Network
  77. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet", "secretkey")
  78. assert.Nil(t, err, err)
  79. defer response.Body.Close()
  80. assert.Equal(t, http.StatusOK, response.StatusCode)
  81. err = json.NewDecoder(response.Body).Decode(&network)
  82. assert.Nil(t, err, err)
  83. // --- needs fixing ------ returns previous name
  84. //assert.Equal(t, "skynet", network.DisplayName)
  85. })
  86. t.Run("InvalidToken", func(t *testing.T) {
  87. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet", "badkey")
  88. assert.Nil(t, err, err)
  89. defer response.Body.Close()
  90. var message models.ErrorResponse
  91. err = json.NewDecoder(response.Body).Decode(&message)
  92. assert.Nil(t, err, err)
  93. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  94. assert.Equal(t, http.StatusUnauthorized, message.Code)
  95. assert.Contains(t, message.Message, "rror verifying user toke")
  96. })
  97. t.Run("InvalidNetwork", func(t *testing.T) {
  98. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork", "secretkey")
  99. assert.Nil(t, err, err)
  100. defer response.Body.Close()
  101. var message models.ErrorResponse
  102. err = json.NewDecoder(response.Body).Decode(&message)
  103. assert.Nil(t, err, err)
  104. assert.Equal(t, message.Message, "no result found")
  105. assert.Equal(t, http.StatusInternalServerError, response.StatusCode)
  106. })
  107. }
  108. func TestDeleteNetwork(t *testing.T) {
  109. t.Run("InvalidKey", func(t *testing.T) {
  110. setup(t)
  111. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "badkey")
  112. assert.Nil(t, err, err)
  113. defer response.Body.Close()
  114. var message models.ErrorResponse
  115. err = json.NewDecoder(response.Body).Decode(&message)
  116. assert.Nil(t, err, err)
  117. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  118. assert.Equal(t, http.StatusUnauthorized, message.Code)
  119. assert.Contains(t, message.Message, "rror verifying user toke")
  120. })
  121. t.Run("Badnetwork", func(t *testing.T) {
  122. // non-existant network deletion does not result in an error
  123. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/badnetwork", "secretkey")
  124. assert.Nil(t, err, err)
  125. defer response.Body.Close()
  126. var message string
  127. err = json.NewDecoder(response.Body).Decode(&message)
  128. assert.Nil(t, err, err)
  129. assert.Equal(t, http.StatusOK, response.StatusCode)
  130. assert.Equal(t, "success", message)
  131. })
  132. t.Run("NodesExist", func(t *testing.T) {
  133. setup(t)
  134. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "secretkey")
  135. assert.Nil(t, err, err)
  136. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  137. defer response.Body.Close()
  138. var message models.ErrorResponse
  139. err = json.NewDecoder(response.Body).Decode(&message)
  140. assert.Nil(t, err, err)
  141. assert.Equal(t, "node check failed. All nodes must be deleted before deleting network", message.Message)
  142. assert.Equal(t, http.StatusBadRequest, message.Code)
  143. })
  144. t.Run("ValidKey", func(t *testing.T) {
  145. setup(t)
  146. deleteAllNodes(t)
  147. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "secretkey")
  148. assert.Nil(t, err, err)
  149. defer response.Body.Close()
  150. var message string
  151. err = json.NewDecoder(response.Body).Decode(&message)
  152. assert.Nil(t, err, err)
  153. assert.Equal(t, http.StatusOK, response.StatusCode)
  154. assert.Equal(t, "success", message)
  155. })
  156. }
  157. func TestCreateKey(t *testing.T) {
  158. //ensure we are working with known networks
  159. deleteNetworks(t)
  160. createNetwork(t)
  161. key := models.AccessKey{}
  162. key.Name = "skynet"
  163. key.Uses = 10
  164. t.Run("MultiUse", func(t *testing.T) {
  165. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
  166. assert.Nil(t, err, err)
  167. assert.Equal(t, http.StatusOK, response.StatusCode)
  168. defer response.Body.Close()
  169. message, err := ioutil.ReadAll(response.Body)
  170. assert.Nil(t, err, err)
  171. assert.NotNil(t, message, message)
  172. returnedkey := getKey(t, key.Name)
  173. assert.Equal(t, key.Name, returnedkey.Name)
  174. assert.Equal(t, key.Uses, returnedkey.Uses)
  175. })
  176. deleteKey(t, "skynet", "skynet")
  177. t.Run("ZeroUse", func(t *testing.T) {
  178. //
  179. key.Uses = 0
  180. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
  181. assert.Nil(t, err, err)
  182. assert.Equal(t, http.StatusOK, response.StatusCode)
  183. defer response.Body.Close()
  184. message, err := ioutil.ReadAll(response.Body)
  185. assert.Nil(t, err, err)
  186. assert.NotNil(t, message, message)
  187. returnedkey := getKey(t, key.Name)
  188. assert.Equal(t, key.Name, returnedkey.Name)
  189. assert.Equal(t, 1, returnedkey.Uses)
  190. })
  191. t.Run("DuplicateAccessKey", func(t *testing.T) {
  192. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
  193. assert.Nil(t, err, err)
  194. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  195. defer response.Body.Close()
  196. var message models.ErrorResponse
  197. err = json.NewDecoder(response.Body).Decode(&message)
  198. assert.Nil(t, err)
  199. assert.Equal(t, http.StatusBadRequest, message.Code)
  200. assert.Equal(t, "duplicate AccessKey Name", message.Message)
  201. })
  202. t.Run("InvalidToken", func(t *testing.T) {
  203. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "badkey")
  204. assert.Nil(t, err, err)
  205. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  206. defer response.Body.Close()
  207. var message models.ErrorResponse
  208. err = json.NewDecoder(response.Body).Decode(&message)
  209. assert.Nil(t, err, err)
  210. assert.Equal(t, http.StatusUnauthorized, message.Code)
  211. assert.Contains(t, message.Message, "rror verifying user toke")
  212. })
  213. t.Run("Badnetwork", func(t *testing.T) {
  214. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/badnetwork/keys", "secretkey")
  215. assert.Nil(t, err, err)
  216. defer response.Body.Close()
  217. var message models.ErrorResponse
  218. err = json.NewDecoder(response.Body).Decode(&message)
  219. assert.Nil(t, err, err)
  220. assert.Equal(t, "no result found", message.Message)
  221. assert.Equal(t, http.StatusInternalServerError, response.StatusCode)
  222. })
  223. }
  224. func TestDeleteKey(t *testing.T) {
  225. //ensure we are working with known networks
  226. deleteNetworks(t)
  227. createNetwork(t)
  228. //ensure key exists
  229. createKey(t)
  230. t.Run("KeyValid", func(t *testing.T) {
  231. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "secretkey")
  232. assert.Nil(t, err, err)
  233. assert.Equal(t, http.StatusOK, response.StatusCode)
  234. })
  235. t.Run("InValidKey", func(t *testing.T) {
  236. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/badkey", "secretkey")
  237. assert.Nil(t, err, err)
  238. defer response.Body.Close()
  239. var message models.ErrorResponse
  240. err = json.NewDecoder(response.Body).Decode(&message)
  241. assert.Nil(t, err, err)
  242. assert.Equal(t, http.StatusBadRequest, message.Code)
  243. assert.Equal(t, "key badkey does not exist", message.Message)
  244. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  245. })
  246. t.Run("KeyInValidnetwork", func(t *testing.T) {
  247. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/badnetwork/keys/skynet", "secretkey")
  248. assert.Nil(t, err, err)
  249. defer response.Body.Close()
  250. var message models.ErrorResponse
  251. err = json.NewDecoder(response.Body).Decode(&message)
  252. assert.Nil(t, err, err)
  253. assert.Equal(t, "no result found", message.Message)
  254. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  255. })
  256. t.Run("InvalidCredentials", func(t *testing.T) {
  257. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "badkey")
  258. assert.Nil(t, err, err)
  259. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  260. defer response.Body.Close()
  261. var message models.ErrorResponse
  262. err = json.NewDecoder(response.Body).Decode(&message)
  263. assert.Nil(t, err, err)
  264. assert.Equal(t, http.StatusUnauthorized, message.Code)
  265. assert.Contains(t, message.Message, "rror verifying user toke")
  266. })
  267. }
  268. func TestGetKeys(t *testing.T) {
  269. //ensure we are working with known networks
  270. deleteNetworks(t)
  271. createNetwork(t)
  272. createKey(t)
  273. t.Run("Valid", func(t *testing.T) {
  274. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/keys", "secretkey")
  275. assert.Nil(t, err, err)
  276. assert.Equal(t, http.StatusOK, response.StatusCode)
  277. defer response.Body.Close()
  278. var keys []models.AccessKey
  279. err = json.NewDecoder(response.Body).Decode(&keys)
  280. assert.Nil(t, err, err)
  281. })
  282. t.Run("Invalidnetwork", func(t *testing.T) {
  283. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork/keys", "secretkey")
  284. assert.Nil(t, err, err)
  285. defer response.Body.Close()
  286. var message models.ErrorResponse
  287. err = json.NewDecoder(response.Body).Decode(&message)
  288. assert.Nil(t, err, err)
  289. assert.Equal(t, "no result found", message.Message)
  290. assert.Equal(t, http.StatusInternalServerError, response.StatusCode)
  291. })
  292. t.Run("InvalidCredentials", func(t *testing.T) {
  293. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/keys", "badkey")
  294. assert.Nil(t, err, err)
  295. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  296. defer response.Body.Close()
  297. var message models.ErrorResponse
  298. err = json.NewDecoder(response.Body).Decode(&message)
  299. assert.Nil(t, err, err)
  300. assert.Equal(t, http.StatusUnauthorized, message.Code)
  301. assert.Contains(t, message.Message, "rror verifying user toke")
  302. })
  303. }
  304. func TestUpdateNetwork(t *testing.T) {
  305. //ensure we are working with known networks
  306. deleteNetworks(t)
  307. createNetwork(t)
  308. var returnedNetwork models.Network
  309. t.Run("UpdateNetID", func(t *testing.T) {
  310. network := getNetwork(t, "skynet")
  311. network.NetID = "wirecat"
  312. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  313. assert.Nil(t, err, err)
  314. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  315. defer response.Body.Close()
  316. var message models.ErrorResponse
  317. err = json.NewDecoder(response.Body).Decode(&message)
  318. assert.Nil(t, err, err)
  319. assert.Equal(t, http.StatusBadRequest, message.Code)
  320. assert.Equal(t, "failed to update network wirecat, cannot change netid.", message.Message)
  321. })
  322. t.Run("Invalidnetwork", func(t *testing.T) {
  323. network := getNetwork(t, "skynet")
  324. network.NetID = "wirecat"
  325. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/badnetwork", "secretkey")
  326. assert.Nil(t, err, err)
  327. defer response.Body.Close()
  328. var message models.ErrorResponse
  329. err = json.NewDecoder(response.Body).Decode(&message)
  330. assert.Nil(t, err, err)
  331. assert.Equal(t, http.StatusInternalServerError, message.Code)
  332. assert.Equal(t, "no result found", message.Message)
  333. assert.Equal(t, http.StatusInternalServerError, response.StatusCode)
  334. })
  335. t.Run("UpdateAddress", func(t *testing.T) {
  336. t.Skip() // getting an Internal Server Error --- not sure why
  337. network := getNetwork(t, "skynet")
  338. network.AddressRange = "10.0.0.1/24"
  339. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  340. assert.Nil(t, err, err)
  341. assert.Equal(t, http.StatusOK, response.StatusCode)
  342. defer response.Body.Close()
  343. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  344. assert.Nil(t, err, err)
  345. assert.Equal(t, network.AddressRange, returnedNetwork.AddressRange)
  346. })
  347. t.Run("UpdateAddressInvalid", func(t *testing.T) {
  348. network := getNetwork(t, "skynet")
  349. network.AddressRange = "10.0.0.1/36"
  350. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  351. assert.Nil(t, err, err)
  352. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  353. defer response.Body.Close()
  354. var message models.ErrorResponse
  355. err = json.NewDecoder(response.Body).Decode(&message)
  356. assert.Nil(t, err, err)
  357. assert.Equal(t, http.StatusBadRequest, message.Code)
  358. assert.Contains(t, message.Message, "validation for 'AddressRange' failed")
  359. })
  360. t.Run("UpdateDisplayName", func(t *testing.T) {
  361. network := getNetwork(t, "skynet")
  362. network.DisplayName = "wirecat"
  363. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  364. assert.Nil(t, err, err)
  365. assert.Equal(t, http.StatusOK, response.StatusCode)
  366. defer response.Body.Close()
  367. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  368. assert.Nil(t, err, err)
  369. assert.Equal(t, network.DisplayName, returnedNetwork.DisplayName)
  370. })
  371. t.Run("UpdateDisplayNameInvalidName", func(t *testing.T) {
  372. network := getNetwork(t, "skynet")
  373. //create name that is longer than 100 chars
  374. name := ""
  375. for i := 0; i < 101; i++ {
  376. name = name + "a"
  377. }
  378. network.DisplayName = name
  379. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  380. assert.Nil(t, err, err)
  381. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  382. var message models.ErrorResponse
  383. err = json.NewDecoder(response.Body).Decode(&message)
  384. assert.Nil(t, err, err)
  385. assert.Equal(t, http.StatusBadRequest, message.Code)
  386. assert.Contains(t, message.Message, "Field validation for 'DisplayName' failed")
  387. })
  388. t.Run("UpdateInterface", func(t *testing.T) {
  389. network := getNetwork(t, "skynet")
  390. network.DefaultInterface = "netmaker"
  391. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  392. assert.Nil(t, err, err)
  393. assert.Equal(t, http.StatusOK, response.StatusCode)
  394. defer response.Body.Close()
  395. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  396. assert.Nil(t, err, err)
  397. assert.Equal(t, network.DefaultInterface, returnedNetwork.DefaultInterface)
  398. })
  399. t.Run("UpdateListenPort", func(t *testing.T) {
  400. network := getNetwork(t, "skynet")
  401. network.DefaultListenPort = 6000
  402. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  403. assert.Nil(t, err, err)
  404. assert.Equal(t, http.StatusOK, response.StatusCode)
  405. defer response.Body.Close()
  406. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  407. assert.Nil(t, err, err)
  408. assert.Equal(t, network.DefaultListenPort, returnedNetwork.DefaultListenPort)
  409. })
  410. t.Run("UpdateListenPortInvalidPort", func(t *testing.T) {
  411. network := getNetwork(t, "skynet")
  412. network.DefaultListenPort = 65540
  413. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  414. assert.Nil(t, err, err)
  415. var message models.ErrorResponse
  416. err = json.NewDecoder(response.Body).Decode(&message)
  417. assert.Nil(t, err, err)
  418. assert.Equal(t, http.StatusBadRequest, message.Code)
  419. assert.Contains(t, message.Message, "Field validation for 'DefaultListenPort' failed")
  420. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  421. })
  422. t.Run("UpdatePostUP", func(t *testing.T) {
  423. network := getNetwork(t, "skynet")
  424. network.DefaultPostUp = "sudo wg add-conf wc-netmaker /etc/wireguard/peers/conf"
  425. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  426. assert.Nil(t, err, err)
  427. assert.Equal(t, http.StatusOK, response.StatusCode)
  428. defer response.Body.Close()
  429. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  430. assert.Nil(t, err, err)
  431. assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp)
  432. })
  433. t.Run("UpdatePostDown", func(t *testing.T) {
  434. network := getNetwork(t, "skynet")
  435. network.DefaultPostDown = "test string"
  436. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  437. assert.Nil(t, err, err)
  438. assert.Equal(t, http.StatusOK, response.StatusCode)
  439. defer response.Body.Close()
  440. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  441. assert.Nil(t, err, err)
  442. assert.Equal(t, network.DefaultPostDown, returnedNetwork.DefaultPostDown)
  443. })
  444. t.Run("UpdateKeepAlive", func(t *testing.T) {
  445. network := getNetwork(t, "skynet")
  446. network.DefaultKeepalive = 60
  447. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  448. assert.Nil(t, err, err)
  449. assert.Equal(t, http.StatusOK, response.StatusCode)
  450. defer response.Body.Close()
  451. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  452. assert.Nil(t, err, err)
  453. assert.Equal(t, network.DefaultKeepalive, returnedNetwork.DefaultKeepalive)
  454. })
  455. t.Run("UpdateKeepAliveTooBig", func(t *testing.T) {
  456. network := getNetwork(t, "skynet")
  457. //does not fails ----- value gets updated.
  458. // ----- needs fixing -----
  459. //t.Skip()
  460. network.DefaultKeepalive = 2000
  461. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  462. assert.Nil(t, err, err)
  463. var message models.ErrorResponse
  464. err = json.NewDecoder(response.Body).Decode(&message)
  465. assert.Nil(t, err, err)
  466. assert.Equal(t, http.StatusBadRequest, message.Code)
  467. assert.Contains(t, message.Message, "Field validation for 'DefaultKeepalive' failed on the 'max' tag")
  468. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  469. })
  470. t.Run("UpdateSaveConfig", func(t *testing.T) {
  471. network := getNetwork(t, "skynet")
  472. //t.Skip()
  473. //not updatable, ensure attempt to change does not result in change
  474. if network.DefaultSaveConfig == "yes" {
  475. network.DefaultSaveConfig = "no"
  476. } else {
  477. network.DefaultSaveConfig = "yes"
  478. }
  479. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  480. assert.Nil(t, err, err)
  481. assert.Equal(t, http.StatusOK, response.StatusCode)
  482. newnet := getNetwork(t, "skynet")
  483. assert.Equal(t, network.DefaultSaveConfig, newnet.DefaultSaveConfig)
  484. })
  485. t.Run("UpdateManualSignUP", func(t *testing.T) {
  486. network := getNetwork(t, "skynet")
  487. if network.AllowManualSignUp == "yes" {
  488. network.AllowManualSignUp = "no"
  489. } else {
  490. network.AllowManualSignUp = "yes"
  491. }
  492. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  493. assert.Nil(t, err, err)
  494. assert.Equal(t, http.StatusOK, response.StatusCode)
  495. defer response.Body.Close()
  496. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  497. assert.Nil(t, err, err)
  498. assert.Equal(t, network.AllowManualSignUp, returnedNetwork.AllowManualSignUp)
  499. })
  500. t.Run("DefaultCheckInterval", func(t *testing.T) {
  501. network := getNetwork(t, "skynet")
  502. network.DefaultCheckInInterval = 60
  503. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  504. assert.Nil(t, err, err)
  505. assert.Equal(t, http.StatusOK, response.StatusCode)
  506. defer response.Body.Close()
  507. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  508. assert.Nil(t, err, err)
  509. assert.Equal(t, network.DefaultCheckInInterval, returnedNetwork.DefaultCheckInInterval)
  510. })
  511. t.Run("DefaultCheckIntervalTooBig", func(t *testing.T) {
  512. network := getNetwork(t, "skynet")
  513. network.DefaultCheckInInterval = 100001
  514. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  515. assert.Nil(t, err, err)
  516. var message models.ErrorResponse
  517. err = json.NewDecoder(response.Body).Decode(&message)
  518. assert.Nil(t, err, err)
  519. assert.Equal(t, http.StatusBadRequest, message.Code)
  520. assert.Contains(t, message.Message, "Field validation for 'DefaultCheckInInterval' failed")
  521. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  522. })
  523. t.Run("MultipleFields", func(t *testing.T) {
  524. network := getNetwork(t, "skynet")
  525. network.DefaultListenPort = 7777
  526. network.DisplayName = "multi"
  527. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  528. assert.Nil(t, err, err)
  529. assert.Equal(t, http.StatusOK, response.StatusCode)
  530. defer response.Body.Close()
  531. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  532. assert.Nil(t, err, err)
  533. assert.Equal(t, network.DisplayName, returnedNetwork.DisplayName)
  534. assert.Equal(t, network.DefaultListenPort, returnedNetwork.DefaultListenPort)
  535. })
  536. }
  537. func TestKeyUpdate(t *testing.T) {
  538. t.Skip() //test fails reasons unknown
  539. //get current network settings
  540. oldnet := getNetwork(t, "skynet")
  541. //update key
  542. time.Sleep(time.Second * 1)
  543. reply, err := api(t, "", http.MethodPost, baseURL+"/api/networks/skynet/keyupdate", "secretkey")
  544. assert.Nil(t, err, err)
  545. assert.Equal(t, http.StatusOK, reply.StatusCode)
  546. newnet := getNetwork(t, "skynet")
  547. assert.Greater(t, newnet.KeyUpdateTimeStamp, oldnet.KeyUpdateTimeStamp)
  548. }