setup_ipv4_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //go:build linux
  2. // +build linux
  3. package bridge
  4. import (
  5. "net"
  6. "testing"
  7. "github.com/docker/docker/libnetwork/testutils"
  8. "github.com/vishvananda/netlink"
  9. )
  10. func setupTestInterface(t *testing.T, nh *netlink.Handle) (*networkConfiguration, *bridgeInterface) {
  11. config := &networkConfiguration{
  12. BridgeName: DefaultBridgeName}
  13. br := &bridgeInterface{nlh: nh}
  14. if err := setupDevice(config, br); err != nil {
  15. t.Fatalf("Bridge creation failed: %v", err)
  16. }
  17. return config, br
  18. }
  19. func TestSetupBridgeIPv4Fixed(t *testing.T) {
  20. defer testutils.SetupTestOSContext(t)()
  21. ip, netw, err := net.ParseCIDR("192.168.1.1/24")
  22. if err != nil {
  23. t.Fatalf("Failed to parse bridge IPv4: %v", err)
  24. }
  25. nh, err := netlink.NewHandle()
  26. if err != nil {
  27. t.Fatal(err)
  28. }
  29. defer nh.Close()
  30. config, br := setupTestInterface(t, nh)
  31. config.AddressIPv4 = &net.IPNet{IP: ip, Mask: netw.Mask}
  32. if err := setupBridgeIPv4(config, br); err != nil {
  33. t.Fatalf("Failed to setup bridge IPv4: %v", err)
  34. }
  35. addrsv4, err := nh.AddrList(br.Link, netlink.FAMILY_V4)
  36. if err != nil {
  37. t.Fatalf("Failed to list device IPv4 addresses: %v", err)
  38. }
  39. var found bool
  40. for _, addr := range addrsv4 {
  41. if config.AddressIPv4.String() == addr.IPNet.String() {
  42. found = true
  43. break
  44. }
  45. }
  46. if !found {
  47. t.Fatalf("Bridge device does not have requested IPv4 address %v", config.AddressIPv4)
  48. }
  49. }
  50. func TestSetupGatewayIPv4(t *testing.T) {
  51. defer testutils.SetupTestOSContext(t)()
  52. nh, err := netlink.NewHandle()
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. defer nh.Close()
  57. ip, nw, _ := net.ParseCIDR("192.168.0.24/16")
  58. nw.IP = ip
  59. gw := net.ParseIP("192.168.2.254")
  60. config := &networkConfiguration{
  61. BridgeName: DefaultBridgeName,
  62. DefaultGatewayIPv4: gw}
  63. br := &bridgeInterface{bridgeIPv4: nw, nlh: nh}
  64. if err := setupGatewayIPv4(config, br); err != nil {
  65. t.Fatalf("Set Default Gateway failed: %v", err)
  66. }
  67. if !gw.Equal(br.gatewayIPv4) {
  68. t.Fatalf("Set Default Gateway failed. Expected %v, Found %v", gw, br.gatewayIPv4)
  69. }
  70. }