group_test.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660
  1. package main
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "testing"
  7. "github.com/gravitl/netmaker/models"
  8. "github.com/stretchr/testify/assert"
  9. "go.mongodb.org/mongo-driver/mongo"
  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("CreateNetwork", func(t *testing.T) {
  17. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "secretkey")
  18. assert.Nil(t, err, err)
  19. assert.Equal(t, http.StatusOK, response.StatusCode)
  20. })
  21. t.Run("InvalidToken", func(t *testing.T) {
  22. response, err := api(t, network, http.MethodPost, baseURL+"/api/networks", "badkey")
  23. assert.Nil(t, err, err)
  24. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  25. defer response.Body.Close()
  26. var message models.ErrorResponse
  27. err = json.NewDecoder(response.Body).Decode(&message)
  28. assert.Nil(t, err, err)
  29. assert.Equal(t, http.StatusUnauthorized, message.Code)
  30. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  31. })
  32. t.Run("BadName", func(t *testing.T) {
  33. //issue #42
  34. t.Skip()
  35. })
  36. t.Run("BadAddress", func(t *testing.T) {
  37. //issue #42
  38. t.Skip()
  39. })
  40. t.Run("DuplicateNetwork", func(t *testing.T) {
  41. //issue #42
  42. t.Skip()
  43. })
  44. }
  45. func TestGetNetworks(t *testing.T) {
  46. t.Run("ValidToken", func(t *testing.T) {
  47. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks", "secretkey")
  48. assert.Nil(t, err, err)
  49. defer response.Body.Close()
  50. assert.Equal(t, http.StatusOK, response.StatusCode)
  51. err = json.NewDecoder(response.Body).Decode(&Networks)
  52. assert.Nil(t, err, err)
  53. })
  54. t.Run("InvalidToken", func(t *testing.T) {
  55. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks", "badkey")
  56. assert.Nil(t, err, err)
  57. defer response.Body.Close()
  58. var message models.ErrorResponse
  59. err = json.NewDecoder(response.Body).Decode(&message)
  60. assert.Nil(t, err, err)
  61. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  62. assert.Equal(t, http.StatusUnauthorized, message.Code)
  63. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  64. })
  65. }
  66. func TestGetNetwork(t *testing.T) {
  67. t.Run("ValidToken", func(t *testing.T) {
  68. var network models.Network
  69. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet", "secretkey")
  70. assert.Nil(t, err, err)
  71. defer response.Body.Close()
  72. assert.Equal(t, http.StatusOK, response.StatusCode)
  73. err = json.NewDecoder(response.Body).Decode(&network)
  74. assert.Nil(t, err, err)
  75. // --- needs fixing ------ returns previous name
  76. //assert.Equal(t, "skynet", network.DisplayName)
  77. })
  78. t.Run("InvalidToken", func(t *testing.T) {
  79. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet", "badkey")
  80. assert.Nil(t, err, err)
  81. defer response.Body.Close()
  82. var message models.ErrorResponse
  83. err = json.NewDecoder(response.Body).Decode(&message)
  84. assert.Nil(t, err, err)
  85. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  86. assert.Equal(t, http.StatusUnauthorized, message.Code)
  87. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  88. })
  89. t.Run("InvalidNetwork", func(t *testing.T) {
  90. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork", "secretkey")
  91. assert.Nil(t, err, err)
  92. defer response.Body.Close()
  93. var message models.ErrorResponse
  94. err = json.NewDecoder(response.Body).Decode(&message)
  95. assert.Nil(t, err, err)
  96. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  97. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  98. })
  99. }
  100. func TestGetnetworkNodeNumber(t *testing.T) {
  101. t.Skip()
  102. //not part of api anymore
  103. t.Run("ValidKey", func(t *testing.T) {
  104. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/numnodes", "secretkey")
  105. assert.Nil(t, err, err)
  106. defer response.Body.Close()
  107. var message int
  108. err = json.NewDecoder(response.Body).Decode(&message)
  109. assert.Nil(t, err, err)
  110. //assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  111. assert.Equal(t, http.StatusOK, response.StatusCode)
  112. })
  113. t.Run("InvalidKey", func(t *testing.T) {
  114. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/numnodes", "badkey")
  115. assert.Nil(t, err, err)
  116. defer response.Body.Close()
  117. var message models.ErrorResponse
  118. err = json.NewDecoder(response.Body).Decode(&message)
  119. assert.Nil(t, err, err)
  120. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  121. assert.Equal(t, http.StatusUnauthorized, message.Code)
  122. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  123. })
  124. t.Run("Badnetwork", func(t *testing.T) {
  125. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork/numnodes", "secretkey")
  126. assert.Nil(t, err, err)
  127. defer response.Body.Close()
  128. var message models.ErrorResponse
  129. err = json.NewDecoder(response.Body).Decode(&message)
  130. assert.Nil(t, err, err)
  131. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  132. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  133. })
  134. }
  135. func TestDeletenetwork(t *testing.T) {
  136. t.Run("InvalidKey", func(t *testing.T) {
  137. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "badkey")
  138. assert.Nil(t, err, err)
  139. defer response.Body.Close()
  140. var message models.ErrorResponse
  141. err = json.NewDecoder(response.Body).Decode(&message)
  142. assert.Nil(t, err, err)
  143. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  144. assert.Equal(t, http.StatusUnauthorized, message.Code)
  145. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  146. })
  147. t.Run("ValidKey", func(t *testing.T) {
  148. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet", "secretkey")
  149. assert.Nil(t, err, err)
  150. defer response.Body.Close()
  151. var message mongo.DeleteResult
  152. err = json.NewDecoder(response.Body).Decode(&message)
  153. assert.Nil(t, err, err)
  154. assert.Equal(t, http.StatusOK, response.StatusCode)
  155. assert.Equal(t, int64(1), message.DeletedCount)
  156. })
  157. t.Run("Badnetwork", func(t *testing.T) {
  158. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/badnetwork", "secretkey")
  159. assert.Nil(t, err, err)
  160. defer response.Body.Close()
  161. var message models.ErrorResponse
  162. err = json.NewDecoder(response.Body).Decode(&message)
  163. assert.Nil(t, err, err)
  164. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  165. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  166. })
  167. t.Run("NodesExist", func(t *testing.T) {
  168. t.Skip()
  169. })
  170. //Create network for follow-on tests
  171. }
  172. func TestCreateAccessKey(t *testing.T) {
  173. if !networkExists(t) {
  174. createNetwork(t)
  175. }
  176. key := models.AccessKey{}
  177. key.Name = "skynet"
  178. key.Uses = 10
  179. t.Run("MultiUse", func(t *testing.T) {
  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, key.Uses, returnedkey.Uses)
  190. })
  191. deleteKey(t, "skynet", "skynet")
  192. t.Run("ZeroUse", func(t *testing.T) {
  193. //t.Skip()
  194. key.Uses = 0
  195. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
  196. assert.Nil(t, err, err)
  197. assert.Equal(t, http.StatusOK, response.StatusCode)
  198. defer response.Body.Close()
  199. message, err := ioutil.ReadAll(response.Body)
  200. assert.Nil(t, err, err)
  201. assert.NotNil(t, message, message)
  202. returnedkey := getKey(t, key.Name)
  203. assert.Equal(t, key.Name, returnedkey.Name)
  204. assert.Equal(t, 1, returnedkey.Uses)
  205. })
  206. t.Run("DuplicateAccessKey", func(t *testing.T) {
  207. //this is allowed I think it should fail fail
  208. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "secretkey")
  209. assert.Nil(t, err, err)
  210. assert.Equal(t, http.StatusOK, response.StatusCode)
  211. deleteKey(t, key.Name, "skynet")
  212. })
  213. t.Run("InvalidToken", func(t *testing.T) {
  214. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/skynet/keys", "badkey")
  215. assert.Nil(t, err, err)
  216. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  217. defer response.Body.Close()
  218. var message models.ErrorResponse
  219. err = json.NewDecoder(response.Body).Decode(&message)
  220. assert.Nil(t, err, err)
  221. assert.Equal(t, http.StatusUnauthorized, message.Code)
  222. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  223. })
  224. t.Run("Badnetwork", func(t *testing.T) {
  225. response, err := api(t, key, http.MethodPost, baseURL+"/api/networks/badnetwork/keys", "secretkey")
  226. assert.Nil(t, err, err)
  227. defer response.Body.Close()
  228. var message models.ErrorResponse
  229. err = json.NewDecoder(response.Body).Decode(&message)
  230. assert.Nil(t, err, err)
  231. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  232. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  233. })
  234. }
  235. func TestDeleteKey(t *testing.T) {
  236. t.Run("KeyValid", func(t *testing.T) {
  237. //fails -- deletecount not returned
  238. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "secretkey")
  239. assert.Nil(t, err, err)
  240. defer response.Body.Close()
  241. //var message mongo.DeleteResult
  242. var messages []models.AccessKey
  243. err = json.NewDecoder(response.Body).Decode(&messages)
  244. assert.Nil(t, err, err)
  245. assert.Equal(t, http.StatusOK, response.StatusCode)
  246. for _, message := range messages {
  247. assert.Equal(t, "skynet", message.Name)
  248. }
  249. })
  250. t.Run("InValidKey", func(t *testing.T) {
  251. t.Skip()
  252. //responds ok, will nil record returned.. should be an error.
  253. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/badkey", "secretkey")
  254. assert.Nil(t, err, err)
  255. defer response.Body.Close()
  256. var message models.ErrorResponse
  257. err = json.NewDecoder(response.Body).Decode(&message)
  258. assert.Nil(t, err, err)
  259. assert.Equal(t, "W1R3: This key does not exist.", message.Message)
  260. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  261. })
  262. t.Run("KeyInValidnetwork", func(t *testing.T) {
  263. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/badnetwork/keys/skynet", "secretkey")
  264. assert.Nil(t, err, err)
  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, "W1R3: This network does not exist.", message.Message)
  270. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  271. })
  272. t.Run("InvalidCredentials", func(t *testing.T) {
  273. response, err := api(t, "", http.MethodDelete, baseURL+"/api/networks/skynet/keys/skynet", "badkey")
  274. assert.Nil(t, err, err)
  275. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  276. defer response.Body.Close()
  277. var message models.ErrorResponse
  278. err = json.NewDecoder(response.Body).Decode(&message)
  279. assert.Nil(t, err, err)
  280. assert.Equal(t, http.StatusUnauthorized, message.Code)
  281. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  282. })
  283. }
  284. func TestGetKeys(t *testing.T) {
  285. createKey(t)
  286. t.Run("Valid", func(t *testing.T) {
  287. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/keys", "secretkey")
  288. assert.Nil(t, err, err)
  289. assert.Equal(t, http.StatusOK, response.StatusCode)
  290. defer response.Body.Close()
  291. var keys []models.AccessKey
  292. err = json.NewDecoder(response.Body).Decode(&keys)
  293. assert.Nil(t, err, err)
  294. })
  295. //deletekeys
  296. t.Run("Invalidnetwork", func(t *testing.T) {
  297. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/badnetwork/keys", "secretkey")
  298. assert.Nil(t, err, err)
  299. defer response.Body.Close()
  300. var message models.ErrorResponse
  301. err = json.NewDecoder(response.Body).Decode(&message)
  302. assert.Nil(t, err, err)
  303. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  304. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  305. })
  306. t.Run("InvalidCredentials", func(t *testing.T) {
  307. response, err := api(t, "", http.MethodGet, baseURL+"/api/networks/skynet/keys", "badkey")
  308. assert.Nil(t, err, err)
  309. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  310. defer response.Body.Close()
  311. var message models.ErrorResponse
  312. err = json.NewDecoder(response.Body).Decode(&message)
  313. assert.Nil(t, err, err)
  314. assert.Equal(t, http.StatusUnauthorized, message.Code)
  315. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  316. })
  317. }
  318. func TestUpdatenetwork(t *testing.T) {
  319. //ensure we are working with known networks
  320. deleteNetworks(t)
  321. createNetwork(t)
  322. var returnedNetwork models.Network
  323. t.Run("UpdateNetID", func(t *testing.T) {
  324. type Network struct {
  325. NetID string
  326. }
  327. var network Network
  328. network.NetID = "wirecat"
  329. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  330. assert.Nil(t, err, err)
  331. assert.Equal(t, http.StatusOK, response.StatusCode)
  332. defer response.Body.Close()
  333. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  334. assert.Nil(t, err, err)
  335. //returns previous value not the updated value
  336. // ----- needs fixing -----
  337. //assert.Equal(t, network.NetID, returnedNetwork.NetID)
  338. })
  339. t.Run("NetIDInvalidCredentials", func(t *testing.T) {
  340. type Network struct {
  341. NetID string
  342. }
  343. var network Network
  344. network.NetID = "wirecat"
  345. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "badkey")
  346. assert.Nil(t, err, err)
  347. var message models.ErrorResponse
  348. err = json.NewDecoder(response.Body).Decode(&message)
  349. assert.Nil(t, err, err)
  350. assert.Equal(t, http.StatusUnauthorized, message.Code)
  351. assert.Equal(t, "W1R3: You are unauthorized to access this endpoint.", message.Message)
  352. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  353. })
  354. t.Run("Invalidnetwork", func(t *testing.T) {
  355. type Network struct {
  356. NetID string
  357. }
  358. var network Network
  359. network.NetID = "wirecat"
  360. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/badnetwork", "secretkey")
  361. assert.Nil(t, err, err)
  362. defer response.Body.Close()
  363. var message models.ErrorResponse
  364. err = json.NewDecoder(response.Body).Decode(&message)
  365. assert.Nil(t, err, err)
  366. assert.Equal(t, http.StatusNotFound, message.Code)
  367. assert.Equal(t, "W1R3: This network does not exist.", message.Message)
  368. assert.Equal(t, http.StatusNotFound, response.StatusCode)
  369. })
  370. t.Run("UpdateNetIDTooLong", func(t *testing.T) {
  371. // ---- needs fixing -----
  372. // succeeds for some reason
  373. t.Skip()
  374. type Network struct {
  375. NetID string
  376. }
  377. var network Network
  378. network.NetID = "wirecat-skynet"
  379. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  380. assert.Nil(t, err, err)
  381. assert.Equal(t, http.StatusUnprocessableEntity, response.StatusCode)
  382. })
  383. t.Run("UpdateAddress", func(t *testing.T) {
  384. type Network struct {
  385. AddressRange string
  386. }
  387. var network Network
  388. network.AddressRange = "10.0.0.1/24"
  389. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  390. assert.Nil(t, err, err)
  391. assert.Equal(t, http.StatusOK, response.StatusCode)
  392. defer response.Body.Close()
  393. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  394. assert.Nil(t, err, err)
  395. assert.Equal(t, network.AddressRange, returnedNetwork.AddressRange)
  396. })
  397. t.Run("UpdateAddressInvalid", func(t *testing.T) {
  398. type Network struct {
  399. AddressRange string
  400. }
  401. var network Network
  402. network.AddressRange = "10.0.0.1/36"
  403. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  404. assert.Nil(t, err, err)
  405. assert.Equal(t, http.StatusInternalServerError, response.StatusCode)
  406. defer response.Body.Close()
  407. var message models.ErrorResponse
  408. err = json.NewDecoder(response.Body).Decode(&message)
  409. assert.Nil(t, err, err)
  410. assert.Equal(t, http.StatusInternalServerError, message.Code)
  411. assert.Contains(t, message.Message, "Invalid Range")
  412. })
  413. t.Run("UpdateDisplayName", func(t *testing.T) {
  414. type Network struct {
  415. DisplayName string
  416. }
  417. var network Network
  418. network.DisplayName = "wirecat"
  419. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  420. assert.Nil(t, err, err)
  421. assert.Equal(t, http.StatusOK, response.StatusCode)
  422. defer response.Body.Close()
  423. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  424. assert.Nil(t, err, err)
  425. assert.Equal(t, network.DisplayName, returnedNetwork.DisplayName)
  426. })
  427. t.Run("UpdateDisplayNameInvalidName", func(t *testing.T) {
  428. // -----needs fixing ----
  429. // fails silently
  430. t.Skip()
  431. type Network struct {
  432. DisplayName string
  433. }
  434. var network Network
  435. //create name that is longer than 100 chars
  436. name := ""
  437. for i := 0; i < 101; i++ {
  438. name = name + "a"
  439. }
  440. network.DisplayName = name
  441. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  442. assert.Nil(t, err, err)
  443. var message models.ErrorResponse
  444. err = json.NewDecoder(response.Body).Decode(&message)
  445. assert.Nil(t, err, err)
  446. assert.Equal(t, http.StatusUnprocessableEntity, message.Code)
  447. assert.Equal(t, "W1R3: Field validation for 'DisplayName' failed.", message.Message)
  448. assert.Equal(t, http.StatusUnprocessableEntity, response.StatusCode)
  449. })
  450. t.Run("UpdateInterface", func(t *testing.T) {
  451. type Network struct {
  452. DefaultInterface string
  453. }
  454. var network Network
  455. network.DefaultInterface = "netmaker"
  456. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  457. assert.Nil(t, err, err)
  458. assert.Equal(t, http.StatusOK, response.StatusCode)
  459. defer response.Body.Close()
  460. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  461. assert.Nil(t, err, err)
  462. assert.Equal(t, network.DefaultInterface, returnedNetwork.DefaultInterface)
  463. })
  464. t.Run("UpdateListenPort", func(t *testing.T) {
  465. type Network struct {
  466. DefaultListenPort int32
  467. }
  468. var network Network
  469. network.DefaultListenPort = 6000
  470. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  471. assert.Nil(t, err, err)
  472. assert.Equal(t, http.StatusOK, response.StatusCode)
  473. defer response.Body.Close()
  474. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  475. assert.Nil(t, err, err)
  476. assert.Equal(t, network.DefaultListenPort, returnedNetwork.DefaultListenPort)
  477. })
  478. t.Run("UpdateListenPortInvalidPort", func(t *testing.T) {
  479. // ---needs fixing -----
  480. // value is updated anyways
  481. t.Skip()
  482. type Network struct {
  483. DefaultListenPort int32
  484. }
  485. var network Network
  486. network.DefaultListenPort = 65540
  487. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  488. assert.Nil(t, err, err)
  489. var message models.ErrorResponse
  490. err = json.NewDecoder(response.Body).Decode(&message)
  491. assert.Nil(t, err, err)
  492. assert.Equal(t, http.StatusUnprocessableEntity, message.Code)
  493. assert.Equal(t, "W1R3: Field validation for 'DefaultListenPort' failed.", message.Message)
  494. assert.Equal(t, http.StatusUnprocessableEntity, response.StatusCode)
  495. })
  496. t.Run("UpdatePostUP", func(t *testing.T) {
  497. type Network struct {
  498. DefaultPostUp string
  499. }
  500. var network Network
  501. network.DefaultPostUp = "sudo wg add-conf wc-netmaker /etc/wireguard/peers/conf"
  502. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  503. assert.Nil(t, err, err)
  504. assert.Equal(t, http.StatusOK, response.StatusCode)
  505. defer response.Body.Close()
  506. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  507. assert.Nil(t, err, err)
  508. assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp)
  509. })
  510. t.Run("UpdatePreUp", func(t *testing.T) {
  511. // -------needs fixing ------
  512. // mismatch in models.Network between struc name and json/bson name
  513. // does not get updated.
  514. t.Skip()
  515. type Network struct {
  516. DefaultPostDown string
  517. }
  518. var network Network
  519. network.DefaultPostDown = "test string"
  520. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  521. assert.Nil(t, err, err)
  522. assert.Equal(t, http.StatusOK, response.StatusCode)
  523. defer response.Body.Close()
  524. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  525. assert.Nil(t, err, err)
  526. assert.Equal(t, network.DefaultPostDown, returnedNetwork.DefaultPostDown)
  527. })
  528. t.Run("UpdateKeepAlive", func(t *testing.T) {
  529. type Network struct {
  530. DefaultKeepalive int32
  531. }
  532. var network Network
  533. network.DefaultKeepalive = 60
  534. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  535. assert.Nil(t, err, err)
  536. assert.Equal(t, http.StatusOK, response.StatusCode)
  537. defer response.Body.Close()
  538. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  539. assert.Nil(t, err, err)
  540. assert.Equal(t, network.DefaultKeepalive, returnedNetwork.DefaultKeepalive)
  541. })
  542. t.Run("UpdateKeepAliveTooBig", func(t *testing.T) {
  543. //fails silently
  544. // ----- needs fixing -----
  545. t.Skip()
  546. type Network struct {
  547. DefaultKeepAlive int32
  548. }
  549. var network Network
  550. network.DefaultKeepAlive = 1001
  551. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  552. assert.Nil(t, err, err)
  553. var message models.ErrorResponse
  554. err = json.NewDecoder(response.Body).Decode(&message)
  555. assert.Nil(t, err, err)
  556. assert.Equal(t, http.StatusUnprocessableEntity, message.Code)
  557. assert.Equal(t, "W1R3: Field validation for 'DefaultKeepAlive' failed.", message.Message)
  558. assert.Equal(t, http.StatusUnprocessableEntity, response.StatusCode)
  559. })
  560. t.Run("UpdateSaveConfig", func(t *testing.T) {
  561. //causes panic
  562. t.Skip()
  563. type Network struct {
  564. DefaultSaveConfig *bool
  565. }
  566. var network Network
  567. value := false
  568. network.DefaultSaveConfig = &value
  569. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  570. assert.Nil(t, err, err)
  571. assert.Equal(t, http.StatusOK, response.StatusCode)
  572. defer response.Body.Close()
  573. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  574. assert.Nil(t, err, err)
  575. assert.Equal(t, *network.DefaultSaveConfig, *returnedNetwork.DefaultSaveConfig)
  576. })
  577. t.Run("UpdateManualSignUP", func(t *testing.T) {
  578. t.Skip()
  579. type Network struct {
  580. AllowManualSignUp *bool
  581. }
  582. var network Network
  583. value := true
  584. network.AllowManualSignUp = &value
  585. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  586. assert.Nil(t, err, err)
  587. assert.Equal(t, http.StatusOK, response.StatusCode)
  588. defer response.Body.Close()
  589. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  590. assert.Nil(t, err, err)
  591. assert.Equal(t, *network.AllowManualSignUp, *returnedNetwork.AllowManualSignUp)
  592. })
  593. t.Run("DefaultCheckInterval", func(t *testing.T) {
  594. //value is not returned in struct ---
  595. t.Skip()
  596. type Network struct {
  597. DefaultCheckInInterval int32
  598. }
  599. var network Network
  600. network.DefaultCheckInInterval = 6000
  601. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  602. assert.Nil(t, err, err)
  603. assert.Equal(t, http.StatusOK, response.StatusCode)
  604. defer response.Body.Close()
  605. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  606. assert.Nil(t, err, err)
  607. assert.Equal(t, network.DefaultCheckInInterval, returnedNetwork.DefaultCheckInInterval)
  608. })
  609. t.Run("DefaultCheckIntervalTooBig", func(t *testing.T) {
  610. //value is not returned in struct ---
  611. t.Skip()
  612. type Network struct {
  613. DefaultCheckInInterval int32
  614. }
  615. var network Network
  616. network.DefaultCheckInInterval = 100001
  617. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  618. assert.Nil(t, err, err)
  619. var message models.ErrorResponse
  620. err = json.NewDecoder(response.Body).Decode(&message)
  621. assert.Nil(t, err, err)
  622. assert.Equal(t, http.StatusUnprocessableEntity, message.Code)
  623. assert.Equal(t, "W1R3: Field validation for 'DefaultCheckInInterval' failed.", message.Message)
  624. assert.Equal(t, http.StatusUnprocessableEntity, response.StatusCode)
  625. })
  626. t.Run("MultipleFields", func(t *testing.T) {
  627. type Network struct {
  628. DisplayName string
  629. DefaultListenPort int32
  630. }
  631. var network Network
  632. network.DefaultListenPort = 7777
  633. network.DisplayName = "multi"
  634. response, err := api(t, network, http.MethodPut, baseURL+"/api/networks/skynet", "secretkey")
  635. assert.Nil(t, err, err)
  636. assert.Equal(t, http.StatusOK, response.StatusCode)
  637. defer response.Body.Close()
  638. err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
  639. assert.Nil(t, err, err)
  640. assert.Equal(t, network.DisplayName, returnedNetwork.DisplayName)
  641. assert.Equal(t, network.DefaultListenPort, returnedNetwork.DefaultListenPort)
  642. })
  643. }