network_test.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  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.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  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. })
  32. t.Run("DuplicateNetwork", func(t *testing.T) {
  33. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  34. assert.Nil(t, err, err)
  35. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  36. })
  37. t.Run("BadName", func(t *testing.T) {
  38. network.NetID = "thisnameistoolong"
  39. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  40. assert.Nil(t, err, err)
  41. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  42. })
  43. t.Run("BadAddress", func(t *testing.T) {
  44. network.NetID = "wirecat"
  45. network.AddressRange = "10.300.20.56/36"
  46. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  47. assert.Nil(t, err, err)
  48. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  49. })
  50. }
  51. func TestGetNetworks(t *testing.T) {
  52. t.Run("ValidToken", func(t *testing.T) {
  53. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks", "secretkey")
  54. assert.Nil(t, err, err)
  55. defer response.Body.Close()
  56. assert.Equal(t, http.StatusOK, response.StatusCode)
  57. err = json.NewDecoder(response.Body).Decode(&Networks)
  58. assert.Nil(t, err, err)
  59. })
  60. t.Run("InvalidToken", func(t *testing.T) {
  61. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks", "badkey")
  62. assert.Nil(t, err, err)
  63. defer response.Body.Close()
  64. var message models.ErrorResponse
  65. err = json.NewDecoder(response.Body).Decode(&message)
  66. assert.Nil(t, err, err)
  67. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  68. assert.Equal(t, http.StatusUnauthorized, message.Code)
  69. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  70. })
  71. }
  72. func TestGetNetwork(t *testing.T) {
  73. t.Run("ValidToken", func(t *testing.T) {
  74. var network models.Network
  75. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet", "secretkey")
  76. assert.Nil(t, err, err)
  77. defer response.Body.Close()
  78. assert.Equal(t, http.StatusOK, response.StatusCode)
  79. err = json.NewDecoder(response.Body).Decode(&network)
  80. assert.Nil(t, err, err)
  81. // --- needs fixing ------ returns previous name
  82. //assert.Equal(t, "skynet", network.DisplayName)
  83. })
  84. t.Run("InvalidToken", func(t *testing.T) {
  85. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet", "badkey")
  86. assert.Nil(t, err, err)
  87. defer response.Body.Close()
  88. var message models.ErrorResponse
  89. err = json.NewDecoder(response.Body).Decode(&message)
  90. assert.Nil(t, err, err)
  91. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  92. assert.Equal(t, http.StatusUnauthorized, message.Code)
  93. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  94. })
  95. t.Run("InvalidNetwork", func(t *testing.T) {
  96. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork", "secretkey")
  97. assert.Nil(t, err, err)
  98. defer response.Body.Close()
  99. var message models.ErrorResponse
  100. err = json.NewDecoder(response.Body).Decode(&message)
  101. assert.Nil(t, err, err)
  102. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  103. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  104. })
  105. }
  106. func TestDeleteNetwork(t *testing.T) {
  107. t.Run("InvalidKey", func(t *testing.T) {
  108. setup(t)
  109. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "badkey")
  110. assert.Nil(t, err, err)
  111. defer response.Body.Close()
  112. var message models.ErrorResponse
  113. err = json.NewDecoder(response.Body).Decode(&message)
  114. assert.Nil(t, err, err)
  115. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  116. assert.Equal(t, http.StatusUnauthorized, message.Code)
  117. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  118. })
  119. t.Run("Badnetwork", func(t *testing.T) {
  120. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/badnetwork", "secretkey")
  121. assert.Nil(t, err, err)
  122. defer response.Body.Close()
  123. var message models.ErrorResponse
  124. err = json.NewDecoder(response.Body).Decode(&message)
  125. assert.Nil(t, err, err)
  126. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  127. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  128. })
  129. t.Run("NodesExist", func(t *testing.T) {
  130. setup(t)
  131. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "secretkey")
  132. assert.Nil(t, err, err)
  133. assert.Equal(t, http.StatusForbidden, response.StatusCode)
  134. defer response.Body.Close()
  135. var message models.ErrorResponse
  136. err = json.NewDecoder(response.Body).Decode(&message)
  137. assert.Nil(t, err, err)
  138. assert.Contains(t, message.Message, "Node check failed")
  139. assert.Equal(t, http.StatusForbidden, message.Code)
  140. })
  141. t.Run("ValidKey", func(t *testing.T) {
  142. type Message struct {
  143. DeletedCount int64
  144. }
  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 Message
  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, int64(1), message.DeletedCount)
  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. //this is allowed I think it should fail fail
  193. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
  194. assert.Nil(t, err, err)
  195. assert.Equal(t, http.StatusOK, response.StatusCode)
  196. deleteKey(t, key.Name, "skynet")
  197. })
  198. t.Run("InvalidToken", func(t *testing.T) {
  199. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "badkey")
  200. assert.Nil(t, err, err)
  201. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  202. defer response.Body.Close()
  203. var message models.ErrorResponse
  204. err = json.NewDecoder(response.Body).Decode(&message)
  205. assert.Nil(t, err, err)
  206. assert.Equal(t, http.StatusUnauthorized, message.Code)
  207. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  208. })
  209. t.Run("Badnetwork", func(t *testing.T) {
  210. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/badnetwork/keys", "secretkey")
  211. assert.Nil(t, err, err)
  212. defer response.Body.Close()
  213. var message models.ErrorResponse
  214. err = json.NewDecoder(response.Body).Decode(&message)
  215. assert.Nil(t, err, err)
  216. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  217. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  218. })
  219. }
  220. func TestDeleteKey(t *testing.T) {
  221. //ensure we are working with known networks
  222. deleteNetworks(t)
  223. createNetwork(t)
  224. //ensure key exists
  225. createKey(t)
  226. t.Run("KeyValid", func(t *testing.T) {
  227. //fails -- deletecount not returned
  228. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "secretkey")
  229. assert.Nil(t, err, err)
  230. defer response.Body.Close()
  231. //var message mongo.DeleteResult
  232. var messages []models.AccessKey
  233. err = json.NewDecoder(response.Body).Decode(&messages)
  234. assert.Nil(t, err, err)
  235. assert.Equal(t, http.StatusOK, response.StatusCode)
  236. for _, message := range messages {
  237. assert.Equal(t, "skynet", message.Name)
  238. }
  239. })
  240. t.Run("InValidKey", func(t *testing.T) {
  241. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/badkey", "secretkey")
  242. assert.Nil(t, err, err)
  243. defer response.Body.Close()
  244. var message models.ErrorResponse
  245. err = json.NewDecoder(response.Body).Decode(&message)
  246. assert.Nil(t, err, err)
  247. assert.Equal(t, http.StatusBadRequest, message.Code)
  248. assert.Equal(t, "key badkey does not exist", message.Message)
  249. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  250. })
  251. t.Run("KeyInValidnetwork", func(t *testing.T) {
  252. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/badnetwork/keys/skynet", "secretkey")
  253. assert.Nil(t, err, err)
  254. defer response.Body.Close()
  255. var message models.ErrorResponse
  256. err = json.NewDecoder(response.Body).Decode(&message)
  257. assert.Nil(t, err, err)
  258. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  259. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  260. })
  261. t.Run("InvalidCredentials", func(t *testing.T) {
  262. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "badkey")
  263. assert.Nil(t, err, err)
  264. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  265. defer response.Body.Close()
  266. var message models.ErrorResponse
  267. err = json.NewDecoder(response.Body).Decode(&message)
  268. assert.Nil(t, err, err)
  269. assert.Equal(t, http.StatusUnauthorized, message.Code)
  270. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  271. })
  272. }
  273. func TestGetKeys(t *testing.T) {
  274. //ensure we are working with known networks
  275. deleteNetworks(t)
  276. createNetwork(t)
  277. createKey(t)
  278. t.Run("Valid", func(t *testing.T) {
  279. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/keys", "secretkey")
  280. assert.Nil(t, err, err)
  281. assert.Equal(t, http.StatusOK, response.StatusCode)
  282. defer response.Body.Close()
  283. var keys []models.AccessKey
  284. err = json.NewDecoder(response.Body).Decode(&keys)
  285. assert.Nil(t, err, err)
  286. })
  287. t.Run("Invalidnetwork", func(t *testing.T) {
  288. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork/keys", "secretkey")
  289. assert.Nil(t, err, err)
  290. defer response.Body.Close()
  291. var message models.ErrorResponse
  292. err = json.NewDecoder(response.Body).Decode(&message)
  293. assert.Nil(t, err, err)
  294. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  295. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  296. })
  297. t.Run("InvalidCredentials", func(t *testing.T) {
  298. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/keys", "badkey")
  299. assert.Nil(t, err, err)
  300. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  301. defer response.Body.Close()
  302. var message models.ErrorResponse
  303. err = json.NewDecoder(response.Body).Decode(&message)
  304. assert.Nil(t, err, err)
  305. assert.Equal(t, http.StatusUnauthorized, message.Code)
  306. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  307. })
  308. }
  309. func TestUpdateNetwork(t *testing.T) {
  310. //ensure we are working with known networks
  311. deleteNetworks(t)
  312. createNetwork(t)
  313. var returnedNetwork models.Network
  314. t.Run("UpdateNetID", func(t *testing.T) {
  315. type Network struct {
  316. NetID string
  317. }
  318. var network Network
  319. network.NetID = "wirecat"
  320. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  321. assert.Nil(t, err, err)
  322. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  323. defer response.Body.Close()
  324. var message models.ErrorResponse
  325. err = json.NewDecoder(response.Body).Decode(&message)
  326. assert.Nil(t, err, err)
  327. assert.Equal(t, http.StatusBadRequest, message.Code)
  328. assert.Equal(t, "NetID is not editable", message.Message)
  329. })
  330. t.Run("Invalidnetwork", func(t *testing.T) {
  331. type Network struct {
  332. NetID string
  333. }
  334. var network Network
  335. network.NetID = "wirecat"
  336. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/badnetwork", "secretkey")
  337. assert.Nil(t, err, err)
  338. defer response.Body.Close()
  339. var message models.ErrorResponse
  340. err = json.NewDecoder(response.Body).Decode(&message)
  341. assert.Nil(t, err, err)
  342. assert.Equal(t, http.StatusNotFound, message.Code)
  343. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  344. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  345. })
  346. t.Run("UpdateAddress", func(t *testing.T) {
  347. type Network struct {
  348. AddressRange string
  349. }
  350. var network Network
  351. network.AddressRange = "10.0.0.1/24"
  352. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  353. assert.Nil(t, err, err)
  354. assert.Equal(t, http.StatusOK, response.StatusCode)
  355. defer response.Body.Close()
  356. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  357. assert.Nil(t, err, err)
  358. assert.Equal(t, network.AddressRange, returnedNetwork.AddressRange)
  359. })
  360. t.Run("UpdateAddressInvalid", func(t *testing.T) {
  361. type Network struct {
  362. AddressRange string
  363. }
  364. var network Network
  365. network.AddressRange = "10.0.0.1/36"
  366. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  367. assert.Nil(t, err, err)
  368. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  369. defer response.Body.Close()
  370. var message models.ErrorResponse
  371. err = json.NewDecoder(response.Body).Decode(&message)
  372. assert.Nil(t, err, err)
  373. assert.Equal(t, http.StatusBadRequest, message.Code)
  374. assert.Contains(t, message.Message, "validation for 'AddressRange' failed")
  375. })
  376. t.Run("UpdateDisplayName", func(t *testing.T) {
  377. type Network struct {
  378. DisplayName string
  379. }
  380. var network Network
  381. network.DisplayName = "wirecat"
  382. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  383. assert.Nil(t, err, err)
  384. assert.Equal(t, http.StatusOK, response.StatusCode)
  385. defer response.Body.Close()
  386. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  387. assert.Nil(t, err, err)
  388. assert.Equal(t, network.DisplayName, returnedNetwork.DisplayName)
  389. })
  390. t.Run("UpdateDisplayNameInvalidName", func(t *testing.T) {
  391. type Network struct {
  392. DisplayName string
  393. }
  394. var network Network
  395. //create name that is longer than 100 chars
  396. name := ""
  397. for i := 0; i < 101; i++ {
  398. name = name + "a"
  399. }
  400. network.DisplayName = name
  401. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  402. assert.Nil(t, err, err)
  403. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  404. var message models.ErrorResponse
  405. err = json.NewDecoder(response.Body).Decode(&message)
  406. assert.Nil(t, err, err)
  407. assert.Equal(t, http.StatusBadRequest, message.Code)
  408. assert.Contains(t, message.Message, "Field validation for 'DisplayName' failed")
  409. })
  410. t.Run("UpdateInterface", func(t *testing.T) {
  411. type Network struct {
  412. DefaultInterface string
  413. }
  414. var network Network
  415. network.DefaultInterface = "netmaker"
  416. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  417. assert.Nil(t, err, err)
  418. assert.Equal(t, http.StatusOK, response.StatusCode)
  419. defer response.Body.Close()
  420. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  421. assert.Nil(t, err, err)
  422. assert.Equal(t, network.DefaultInterface, returnedNetwork.DefaultInterface)
  423. })
  424. t.Run("UpdateListenPort", func(t *testing.T) {
  425. type Network struct {
  426. DefaultListenPort int32
  427. }
  428. var network Network
  429. network.DefaultListenPort = 6000
  430. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  431. assert.Nil(t, err, err)
  432. assert.Equal(t, http.StatusOK, response.StatusCode)
  433. defer response.Body.Close()
  434. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  435. assert.Nil(t, err, err)
  436. assert.Equal(t, network.DefaultListenPort, returnedNetwork.DefaultListenPort)
  437. })
  438. t.Run("UpdateListenPortInvalidPort", func(t *testing.T) {
  439. type Network struct {
  440. DefaultListenPort int32
  441. }
  442. var network Network
  443. network.DefaultListenPort = 65540
  444. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  445. assert.Nil(t, err, err)
  446. var message models.ErrorResponse
  447. err = json.NewDecoder(response.Body).Decode(&message)
  448. assert.Nil(t, err, err)
  449. assert.Equal(t, http.StatusBadRequest, message.Code)
  450. assert.Contains(t, message.Message, "Field validation for 'DefaultListenPort' failed")
  451. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  452. })
  453. t.Run("UpdatePostUP", func(t *testing.T) {
  454. type Network struct {
  455. DefaultPostUp string
  456. }
  457. var network Network
  458. network.DefaultPostUp = "sudo wg add-conf wc-netmaker /etc/wireguard/peers/conf"
  459. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  460. assert.Nil(t, err, err)
  461. assert.Equal(t, http.StatusOK, response.StatusCode)
  462. defer response.Body.Close()
  463. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  464. assert.Nil(t, err, err)
  465. assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp)
  466. })
  467. t.Run("UpdatePostDown", func(t *testing.T) {
  468. type Network struct {
  469. DefaultPostDown string
  470. }
  471. var network Network
  472. network.DefaultPostDown = "test string"
  473. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  474. assert.Nil(t, err, err)
  475. assert.Equal(t, http.StatusOK, response.StatusCode)
  476. defer response.Body.Close()
  477. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  478. assert.Nil(t, err, err)
  479. assert.Equal(t, network.DefaultPostDown, returnedNetwork.DefaultPostDown)
  480. })
  481. t.Run("UpdateKeepAlive", func(t *testing.T) {
  482. type Network struct {
  483. DefaultKeepalive int32
  484. }
  485. var network Network
  486. network.DefaultKeepalive = 60
  487. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  488. assert.Nil(t, err, err)
  489. assert.Equal(t, http.StatusOK, response.StatusCode)
  490. defer response.Body.Close()
  491. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  492. assert.Nil(t, err, err)
  493. assert.Equal(t, network.DefaultKeepalive, returnedNetwork.DefaultKeepalive)
  494. })
  495. t.Run("UpdateKeepAliveTooBig", func(t *testing.T) {
  496. //does not fails ----- value gets updated.
  497. // ----- needs fixing -----
  498. t.Skip()
  499. type Network struct {
  500. DefaultKeepAlive int32
  501. }
  502. var network Network
  503. network.DefaultKeepAlive = 2000
  504. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  505. assert.Nil(t, err, err)
  506. var message models.ErrorResponse
  507. err = json.NewDecoder(response.Body).Decode(&message)
  508. assert.Nil(t, err, err)
  509. assert.Equal(t, http.StatusBadRequest, message.Code)
  510. assert.Contains(t, message.Message, "Field validation for 'DefaultKeepAlive' failed")
  511. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  512. })
  513. t.Run("UpdateSaveConfig", func(t *testing.T) {
  514. //t.Skip()
  515. //not updatable, ensure attempt to change does not result in change
  516. type Network struct {
  517. DefaultSaveConfig *bool
  518. }
  519. var network Network
  520. var value bool
  521. oldnet := getNetwork(t, "skynet")
  522. if *oldnet.DefaultSaveConfig == true {
  523. value = false
  524. } else {
  525. value = true
  526. }
  527. network.DefaultSaveConfig = &value
  528. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  529. assert.Nil(t, err, err)
  530. assert.Equal(t, http.StatusOK, response.StatusCode)
  531. newnet := getNetwork(t, "skynet")
  532. assert.Equal(t, oldnet.DefaultSaveConfig, newnet.DefaultSaveConfig)
  533. })
  534. t.Run("UpdateManualSignUP", func(t *testing.T) {
  535. type Network struct {
  536. AllowManualSignUp *bool
  537. }
  538. var network Network
  539. value := true
  540. network.AllowManualSignUp = &value
  541. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  542. assert.Nil(t, err, err)
  543. assert.Equal(t, http.StatusOK, response.StatusCode)
  544. defer response.Body.Close()
  545. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  546. assert.Nil(t, err, err)
  547. assert.Equal(t, network.AllowManualSignUp, returnedNetwork.AllowManualSignUp)
  548. })
  549. t.Run("DefaultCheckInterval", func(t *testing.T) {
  550. type Network struct {
  551. CheckInInterval int32
  552. }
  553. var network Network
  554. network.CheckInInterval = 60
  555. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  556. assert.Nil(t, err, err)
  557. assert.Equal(t, http.StatusOK, response.StatusCode)
  558. defer response.Body.Close()
  559. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  560. assert.Nil(t, err, err)
  561. assert.Equal(t, network.CheckInInterval, returnedNetwork.DefaultCheckInInterval)
  562. })
  563. t.Run("DefaultCheckIntervalTooBig", func(t *testing.T) {
  564. type Network struct {
  565. CheckInInterval int32
  566. }
  567. var network Network
  568. network.CheckInInterval = 100001
  569. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  570. assert.Nil(t, err, err)
  571. var message models.ErrorResponse
  572. err = json.NewDecoder(response.Body).Decode(&message)
  573. assert.Nil(t, err, err)
  574. assert.Equal(t, http.StatusBadRequest, message.Code)
  575. assert.Contains(t, message.Message, "Field validation for 'DefaultCheckInInterval' failed")
  576. assert.Equal(t, http.StatusBadRequest, response.StatusCode)
  577. })
  578. t.Run("MultipleFields", func(t *testing.T) {
  579. type Network struct {
  580. DisplayName string
  581. DefaultListenPort int32
  582. }
  583. var network Network
  584. network.DefaultListenPort = 7777
  585. network.DisplayName = "multi"
  586. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  587. assert.Nil(t, err, err)
  588. assert.Equal(t, http.StatusOK, response.StatusCode)
  589. defer response.Body.Close()
  590. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  591. assert.Nil(t, err, err)
  592. assert.Equal(t, network.DisplayName, returnedNetwork.DisplayName)
  593. assert.Equal(t, network.DefaultListenPort, returnedNetwork.DefaultListenPort)
  594. })
  595. }
  596. func TestKeyUpdate(t *testing.T) {
  597. //get current network settings
  598. oldnet := getNetwork(t, "skynet")
  599. //update key
  600. time.Sleep(time.Second * 1)
  601. reply, err := api(t, "", http.MethodPost, baseURL+"/api/networks/skynet/keyupdate", "secretkey")
  602. assert.Nil(t, err, err)
  603. assert.Equal(t, http.StatusOK, reply.StatusCode)
  604. newnet := getNetwork(t, "skynet")
  605. assert.Greater(t, newnet.KeyUpdateTimeStamp, oldnet.KeyUpdateTimeStamp)
  606. }