group_test.go 25 KB

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