1
0

net_test.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package ovpm
  2. import (
  3. "fmt"
  4. "testing"
  5. )
  6. func TestVPNCreateNewNetwork(t *testing.T) {
  7. // Initialize:
  8. setupTestCase()
  9. CreateDB("sqlite3", ":memory:")
  10. defer db.Cease()
  11. Init("localhost", "", UDPProto, "", "")
  12. // Prepare:
  13. // Test:
  14. netName := "testnet"
  15. cidrStr := "192.168.1.0/24"
  16. netType := SERVERNET
  17. n, err := CreateNewNetwork(netName, cidrStr, netType, "")
  18. if err != nil {
  19. t.Fatalf("unexpected error when creating a new network: %v", err)
  20. }
  21. if n.Name != netName {
  22. t.Fatalf("network Name is expected to be '%s' but it's '%s' instead", netName, n.Name)
  23. }
  24. if n.CIDR != cidrStr {
  25. t.Fatalf("network CIDR is expected to be '%s' but it's '%s' instead", cidrStr, n.CIDR)
  26. }
  27. var network dbNetworkModel
  28. db.First(&network)
  29. if db.NewRecord(&network) {
  30. t.Fatalf("network is not created in the database.")
  31. }
  32. if network.Name != netName {
  33. t.Fatalf("network Name is expected to be '%s' but it's '%s' instead", netName, network.Name)
  34. }
  35. if network.CIDR != cidrStr {
  36. t.Fatalf("network CIDR is expected to be '%s' but it's '%s' instead", cidrStr, network.CIDR)
  37. }
  38. if network.Type != netType {
  39. t.Fatalf("network CIDR is expected to be '%s' but it's '%s' instead", netType, network.Type)
  40. }
  41. // Test username validation.
  42. var networknametests = []struct {
  43. networkname string
  44. ok bool
  45. }{
  46. {"asdf1240asfd", true},
  47. {"asdf.asfd", true},
  48. {"asdf12.12asfd", true},
  49. {"asd1f-as4fd", false},
  50. {"as0df a01sfd", false},
  51. {"as0df$a01sfd", false},
  52. {"as0df#a01sfd", false},
  53. {"a6sdf_as1fd", true},
  54. }
  55. for i, tt := range networknametests {
  56. _, err := CreateNewNetwork(tt.networkname, fmt.Sprintf("192.168.%d.0/24", i), SERVERNET, "")
  57. if ok := (err == nil); ok != tt.ok {
  58. t.Fatalf("expcted condition failed '%s': %v", tt.networkname, err)
  59. }
  60. }
  61. }
  62. func TestVPNDeleteNetwork(t *testing.T) {
  63. // Initialize:
  64. setupTestCase()
  65. CreateDB("sqlite3", ":memory:")
  66. defer db.Cease()
  67. Init("localhost", "", UDPProto, "", "")
  68. // Prepare:
  69. // Test:
  70. netName := "testnet"
  71. cidrStr := "192.168.1.0/24"
  72. netType := SERVERNET
  73. n, err := CreateNewNetwork(netName, cidrStr, netType, "")
  74. if err != nil {
  75. t.Fatalf("unexpected error when creating a new network: %v", err)
  76. }
  77. var network dbNetworkModel
  78. db.First(&network)
  79. if db.NewRecord(&network) {
  80. t.Fatalf("network is not created in the database.")
  81. }
  82. err = n.Delete()
  83. if err != nil {
  84. t.Fatalf("can't delete network: %v", err)
  85. }
  86. // Empty the existing network object.
  87. network = dbNetworkModel{}
  88. db.First(&network)
  89. if !db.NewRecord(&network) {
  90. t.Fatalf("network is not deleted from the database. %+v", network)
  91. }
  92. }
  93. func TestVPNGetNetwork(t *testing.T) {
  94. // Initialize:
  95. setupTestCase()
  96. CreateDB("sqlite3", ":memory:")
  97. defer db.Cease()
  98. Init("localhost", "", UDPProto, "", "")
  99. // Prepare:
  100. // Test:
  101. netName := "testnet"
  102. cidrStr := "192.168.1.0/24"
  103. netType := SERVERNET
  104. _, err := CreateNewNetwork(netName, cidrStr, netType, "")
  105. if err != nil {
  106. t.Fatalf("unexpected error when creating a new network: %v", err)
  107. }
  108. var network dbNetworkModel
  109. db.First(&network)
  110. if db.NewRecord(&network) {
  111. t.Fatalf("network is not created in the database.")
  112. }
  113. n, err := GetNetwork(netName)
  114. if err != nil {
  115. t.Fatalf("unexpected error: %v", err)
  116. }
  117. if db.NewRecord(&n.dbNetworkModel) {
  118. t.Fatalf("network is not correctly returned from db.")
  119. }
  120. }
  121. func TestVPNGetAllNetworks(t *testing.T) {
  122. // Initialize:
  123. setupTestCase()
  124. CreateDB("sqlite3", ":memory:")
  125. defer db.Cease()
  126. Init("localhost", "", UDPProto, "", "")
  127. // Prepare:
  128. // Test:
  129. var getallnettests = []struct {
  130. name string
  131. cidr string
  132. netType NetworkType
  133. passing bool
  134. }{
  135. {"testnet1", "192.168.1.0/24", SERVERNET, true},
  136. {"testnet2", "10.10.0.0/16", SERVERNET, true},
  137. {"testnet3", "asdkfjadflsa", SERVERNET, false},
  138. }
  139. for _, tt := range getallnettests {
  140. _, err := CreateNewNetwork(tt.name, tt.cidr, tt.netType, "")
  141. if (err == nil) != tt.passing {
  142. t.Fatalf("unexpected error when creating a new network: %v", err)
  143. }
  144. }
  145. for _, tt := range getallnettests {
  146. n, err := GetNetwork(tt.name)
  147. if (err == nil) != tt.passing {
  148. t.Fatalf("network's presence is expected to be '%t' but it's '%t' instead", tt.passing, !tt.passing)
  149. }
  150. if tt.passing {
  151. if n.Name != tt.name {
  152. t.Fatalf("network Name is expected to be '%s' but it's '%s'", tt.name, n.Name)
  153. }
  154. if n.CIDR != tt.cidr {
  155. t.Fatalf("network CIDR is expected to be '%s' but it's '%s'", tt.cidr, n.CIDR)
  156. }
  157. if n.Type != tt.netType {
  158. t.Fatalf("network CIDR is expected to be '%s' but it's '%s' instead", tt.netType, n.Type)
  159. }
  160. }
  161. }
  162. }
  163. func TestNetAssociate(t *testing.T) {
  164. // Initialize:
  165. setupTestCase()
  166. CreateDB("sqlite3", ":memory:")
  167. defer db.Cease()
  168. Init("localhost", "", UDPProto, "", "")
  169. // Prepare:
  170. // Test:
  171. netName := "testnet"
  172. cidrStr := "192.168.1.0/24"
  173. netType := SERVERNET
  174. userName := "testUser2"
  175. user, err := CreateNewUser(userName, "123", false, 0, true)
  176. if err != nil {
  177. t.Fatal(err)
  178. }
  179. n, err := CreateNewNetwork(netName, cidrStr, netType, "")
  180. if err != nil {
  181. t.Fatal(err)
  182. }
  183. err = n.Associate(user.dbUserModel.Username)
  184. if err != nil {
  185. t.Fatal(err)
  186. }
  187. n = nil
  188. n, err = GetNetwork(netName)
  189. if err != nil {
  190. t.Fatal(err)
  191. }
  192. // Does number of associated users in the network object matches the number that we have created?
  193. if count := len(n.dbNetworkModel.Users); count != 1 {
  194. t.Fatalf("network.Users count is expexted to be %d, but it's %d", 1, count)
  195. }
  196. err = n.Associate(user.dbUserModel.Username)
  197. if err == nil {
  198. t.Fatalf("expected to get error but got no error instead")
  199. }
  200. }
  201. func TestNetDissociate(t *testing.T) {
  202. // Initialize:
  203. setupTestCase()
  204. CreateDB("sqlite3", ":memory:")
  205. defer db.Cease()
  206. err := Init("localhost", "", UDPProto, "", "")
  207. if err != nil {
  208. t.Fatal(err)
  209. }
  210. // Prepare:
  211. // Test:
  212. netName := "testnet"
  213. cidrStr := "192.168.1.0/24"
  214. netType := SERVERNET
  215. userName := "testUser2"
  216. user, err := CreateNewUser(userName, "123", false, 0, true)
  217. if err != nil {
  218. t.Fatal(err)
  219. }
  220. n, err := CreateNewNetwork(netName, cidrStr, netType, "")
  221. if err != nil {
  222. t.Fatal(err)
  223. }
  224. n.Associate(user.Username)
  225. n = nil
  226. n, _ = GetNetwork(netName)
  227. // Does number of associated users in the network object matches the number that we have created?
  228. if count := len(n.Users); count != 1 {
  229. t.Fatalf("network.Users count is expexted to be %d, but it's %d", 1, count)
  230. }
  231. err = n.Dissociate(user.Username)
  232. if err != nil {
  233. t.Fatalf("unexpected error: %v", err)
  234. }
  235. n = nil
  236. n, _ = GetNetwork(netName)
  237. // Does number of associated users in the network object matches the number that we have created?
  238. if count := len(n.Users); count != 0 {
  239. t.Fatalf("network.Users count is expexted to be %d, but it's %d", 0, count)
  240. }
  241. err = n.Dissociate(user.Username)
  242. if err == nil {
  243. t.Fatalf("expected error but got no error instead")
  244. }
  245. }
  246. func TestNetGetAssociatedUsers(t *testing.T) {
  247. // Initialize:
  248. setupTestCase()
  249. CreateDB("sqlite3", ":memory:")
  250. defer db.Cease()
  251. Init("localhost", "", UDPProto, "", "")
  252. // Prepare:
  253. // Test:
  254. netName := "testnet"
  255. cidrStr := "192.168.1.0/24"
  256. netType := SERVERNET
  257. userName := "testUser2"
  258. user, _ := CreateNewUser(userName, "123", false, 0, true)
  259. n, _ := CreateNewNetwork(netName, cidrStr, netType, "")
  260. n.Associate(user.Username)
  261. n = nil
  262. n, _ = GetNetwork(netName)
  263. // Test:
  264. if n.GetAssociatedUsers()[0].Username != user.Username {
  265. t.Fatalf("returned associated user is expected to be the same user with the one we have created, but its not")
  266. }
  267. }
  268. func init() {
  269. // Init
  270. Testing = true
  271. }