dnsHttpController_test.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package controller
  2. import (
  3. "io/ioutil"
  4. "testing"
  5. "github.com/gravitl/netmaker/models"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestGetNodeDNS(t *testing.T) {
  9. dns, err := GetNodeDNS("skynet")
  10. assert.Nil(t, err)
  11. t.Log(dns)
  12. }
  13. func TestGetCustomDNS(t *testing.T) {
  14. dns, err := GetCustomDNS("skynet")
  15. assert.Nil(t, err)
  16. t.Log(dns)
  17. }
  18. func TestGetDNSEntryNum(t *testing.T) {
  19. num, err := GetDNSEntryNum("myhost", "skynet")
  20. assert.Nil(t, err)
  21. t.Log(num)
  22. }
  23. func TestGetDNS(t *testing.T) {
  24. dns, err := GetDNS("skynet")
  25. assert.Nil(t, err)
  26. t.Log(dns)
  27. }
  28. func TestCreateDNS(t *testing.T) {
  29. deleteNet(t)
  30. createNet()
  31. //dns, err := GetDNS("skynet")
  32. //assert.Nil(t, err)
  33. //for _, entry := range dns {
  34. // _, _ = DeleteDNS(entry.Name, "skynet")
  35. //}
  36. entry := models.DNSEntry{"10.0.0.2", "myhost", "skynet"}
  37. err := ValidateDNSCreate(entry)
  38. assert.Nil(t, err)
  39. if err != nil {
  40. return
  41. }
  42. dns, err := CreateDNS(entry)
  43. assert.Nil(t, err)
  44. t.Log(dns)
  45. }
  46. func TestGetDNSEntry(t *testing.T) {
  47. entry, err := GetDNSEntry("myhost", "skynet")
  48. assert.Nil(t, err)
  49. t.Log(entry)
  50. }
  51. func TestUpdateDNS(t *testing.T) {
  52. }
  53. func TestDeleteDNS(t *testing.T) {
  54. t.Run("EntryExists", func(t *testing.T) {
  55. success, err := DeleteDNS("myhost", "skynet")
  56. assert.Nil(t, err)
  57. assert.True(t, success)
  58. })
  59. t.Run("NoEntry", func(t *testing.T) {
  60. success, err := DeleteDNS("myhost", "skynet")
  61. assert.Nil(t, err)
  62. assert.False(t, success)
  63. })
  64. }
  65. func TestWriteHosts(t *testing.T) {
  66. err := WriteHosts()
  67. assert.Nil(t, err)
  68. files, err := ioutil.ReadDir("./config")
  69. assert.Nil(t, err)
  70. for _, file := range files {
  71. if file.Name() == "netmaker.hosts" {
  72. return
  73. }
  74. }
  75. t.Fail()
  76. }
  77. func TestValidateDNSUpdate(t *testing.T) {
  78. entry := models.DNSEntry{"10.0.0.2", "myhost", "skynet"}
  79. _, _ = DeleteDNS("mynode", "skynet")
  80. t.Run("BadNetwork", func(t *testing.T) {
  81. change := models.DNSEntry{"10.0.0.2", "myhost", "badnet"}
  82. err := ValidateDNSUpdate(change, entry)
  83. assert.NotNil(t, err)
  84. assert.Contains(t, err.Error(), "Field validation for 'Network' failed on the 'network_exists' tag")
  85. })
  86. t.Run("EmptyNetwork", func(t *testing.T) {
  87. //this can't actually happen as change.Network is populated if is blank
  88. change := models.DNSEntry{"10.0.0.2", "myhost", ""}
  89. err := ValidateDNSUpdate(change, entry)
  90. assert.NotNil(t, err)
  91. assert.Contains(t, err.Error(), "Field validation for 'Network' failed on the 'network_exists' tag")
  92. })
  93. t.Run("EmptyAddress", func(t *testing.T) {
  94. //this can't actually happen as change.Address is populated if is blank
  95. change := models.DNSEntry{"", "myhost", "skynet"}
  96. err := ValidateDNSUpdate(change, entry)
  97. assert.NotNil(t, err)
  98. assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'required' tag")
  99. })
  100. t.Run("BadAddress", func(t *testing.T) {
  101. change := models.DNSEntry{"10.0.256.1", "myhost", "skynet"}
  102. err := ValidateDNSUpdate(change, entry)
  103. assert.NotNil(t, err)
  104. assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'ip' tag")
  105. })
  106. t.Run("BadName", func(t *testing.T) {
  107. change := models.DNSEntry{"10.0.0.2", "myhostr*", "skynet"}
  108. err := ValidateDNSUpdate(change, entry)
  109. assert.NotNil(t, err)
  110. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'alphanum' tag")
  111. })
  112. t.Run("EmptyName", func(t *testing.T) {
  113. //this can't actually happen as change.Name is populated if is blank
  114. change := models.DNSEntry{"10.0.0.2", "", "skynet"}
  115. err := ValidateDNSUpdate(change, entry)
  116. assert.NotNil(t, err)
  117. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'required' tag")
  118. })
  119. t.Run("NameTooLong", func(t *testing.T) {
  120. name := ""
  121. for i := 1; i < 122; i++ {
  122. name = name + "a"
  123. }
  124. change := models.DNSEntry{"10.0.0.2", name, "skynet"}
  125. err := ValidateDNSUpdate(change, entry)
  126. assert.NotNil(t, err)
  127. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'max' tag")
  128. })
  129. t.Run("NameUnique", func(t *testing.T) {
  130. change := models.DNSEntry{"10.0.0.2", "myhost", "wirecat"}
  131. _, _ = CreateDNS(entry)
  132. _, _ = CreateDNS(change)
  133. err := ValidateDNSUpdate(change, entry)
  134. assert.NotNil(t, err)
  135. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'name_unique' tag")
  136. })
  137. }
  138. func TestValidateDNSCreate(t *testing.T) {
  139. _, _ = DeleteDNS("mynode", "skynet")
  140. t.Run("NoNetwork", func(t *testing.T) {
  141. entry := models.DNSEntry{"10.0.0.2", "myhost", "badnet"}
  142. err := ValidateDNSCreate(entry)
  143. assert.NotNil(t, err)
  144. assert.Contains(t, err.Error(), "Field validation for 'Network' failed on the 'network_exists' tag")
  145. })
  146. t.Run("EmptyAddress", func(t *testing.T) {
  147. entry := models.DNSEntry{"", "myhost", "skynet"}
  148. err := ValidateDNSCreate(entry)
  149. assert.NotNil(t, err)
  150. assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'required' tag")
  151. })
  152. t.Run("BadAddress", func(t *testing.T) {
  153. entry := models.DNSEntry{"10.0.256.1", "myhost", "skynet"}
  154. err := ValidateDNSCreate(entry)
  155. assert.NotNil(t, err)
  156. assert.Contains(t, err.Error(), "Field validation for 'Address' failed on the 'ip' tag")
  157. })
  158. t.Run("BadName", func(t *testing.T) {
  159. entry := models.DNSEntry{"10.0.0.2", "myhostr*", "skynet"}
  160. err := ValidateDNSCreate(entry)
  161. assert.NotNil(t, err)
  162. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'alphanum' tag")
  163. })
  164. t.Run("EmptyName", func(t *testing.T) {
  165. entry := models.DNSEntry{"10.0.0.2", "", "skynet"}
  166. err := ValidateDNSCreate(entry)
  167. assert.NotNil(t, err)
  168. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'required' tag")
  169. })
  170. t.Run("NameTooLong", func(t *testing.T) {
  171. name := ""
  172. for i := 1; i < 122; i++ {
  173. name = name + "a"
  174. }
  175. entry := models.DNSEntry{"10.0.0.2", name, "skynet"}
  176. err := ValidateDNSCreate(entry)
  177. assert.NotNil(t, err)
  178. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'max' tag")
  179. })
  180. t.Run("NameUnique", func(t *testing.T) {
  181. entry := models.DNSEntry{"10.0.0.2", "myhost", "skynet"}
  182. _, _ = CreateDNS(entry)
  183. err := ValidateDNSCreate(entry)
  184. assert.NotNil(t, err)
  185. assert.Contains(t, err.Error(), "Field validation for 'Name' failed on the 'name_unique' tag")
  186. })
  187. }