network_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package ganserv_test
  2. import (
  3. "fmt"
  4. "net"
  5. "strconv"
  6. "testing"
  7. "imuslab.com/zoraxy/mod/ganserv"
  8. )
  9. func TestGetRandomFreeIP(t *testing.T) {
  10. n := ganserv.Network{
  11. CIDR: "172.16.0.0/12",
  12. Nodes: []*ganserv.Node{
  13. {
  14. Name: "nodeC1",
  15. ManagedIP: net.ParseIP("172.16.1.142"),
  16. },
  17. {
  18. Name: "nodeC2",
  19. ManagedIP: net.ParseIP("172.16.5.174"),
  20. },
  21. },
  22. }
  23. // Call the function for 10 times
  24. for i := 0; i < 10; i++ {
  25. freeIP, err := n.GetRandomFreeIP()
  26. fmt.Println("["+strconv.Itoa(i)+"] Free IP address assigned: ", freeIP)
  27. // Assert that no error occurred
  28. if err != nil {
  29. t.Errorf("Unexpected error: %s", err.Error())
  30. }
  31. // Assert that the returned IP is a valid IPv4 address
  32. if freeIP.To4() == nil {
  33. t.Errorf("Invalid IP address format: %s", freeIP.String())
  34. }
  35. // Assert that the returned IP is not already used by a node
  36. for _, node := range n.Nodes {
  37. if freeIP.Equal(node.ManagedIP) {
  38. t.Errorf("Returned IP is already in use: %s", freeIP.String())
  39. }
  40. }
  41. n.Nodes = append(n.Nodes, &ganserv.Node{
  42. Name: "NodeT" + strconv.Itoa(i),
  43. ManagedIP: freeIP,
  44. })
  45. }
  46. }