setup_device_linux_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package bridge
  2. import (
  3. "bytes"
  4. "net"
  5. "testing"
  6. "github.com/docker/docker/internal/testutils/netnsutils"
  7. "github.com/docker/docker/libnetwork/netutils"
  8. "github.com/vishvananda/netlink"
  9. )
  10. func TestSetupNewBridge(t *testing.T) {
  11. defer netnsutils.SetupTestOSContext(t)()
  12. nh, err := netlink.NewHandle()
  13. if err != nil {
  14. t.Fatal(err)
  15. }
  16. defer nh.Close()
  17. config := &networkConfiguration{BridgeName: DefaultBridgeName}
  18. br := &bridgeInterface{nlh: nh}
  19. if err := setupDevice(config, br); err != nil {
  20. t.Fatalf("Bridge creation failed: %v", err)
  21. }
  22. if br.Link == nil {
  23. t.Fatal("bridgeInterface link is nil (expected valid link)")
  24. }
  25. if _, err := nh.LinkByName(DefaultBridgeName); err != nil {
  26. t.Fatalf("Failed to retrieve bridge device: %v", err)
  27. }
  28. if br.Link.Attrs().Flags&net.FlagUp == net.FlagUp {
  29. t.Fatal("bridgeInterface should be created down")
  30. }
  31. }
  32. func TestSetupNewNonDefaultBridge(t *testing.T) {
  33. defer netnsutils.SetupTestOSContext(t)()
  34. nh, err := netlink.NewHandle()
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. defer nh.Close()
  39. config := &networkConfiguration{BridgeName: "test0", DefaultBridge: true}
  40. br := &bridgeInterface{nlh: nh}
  41. err = setupDevice(config, br)
  42. if err == nil {
  43. t.Fatal(`Expected bridge creation failure with "non default name", succeeded`)
  44. }
  45. if _, ok := err.(NonDefaultBridgeExistError); !ok {
  46. t.Fatalf("Did not fail with expected error. Actual error: %v", err)
  47. }
  48. }
  49. func TestSetupDeviceUp(t *testing.T) {
  50. defer netnsutils.SetupTestOSContext(t)()
  51. nh, err := netlink.NewHandle()
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. defer nh.Close()
  56. config := &networkConfiguration{BridgeName: DefaultBridgeName}
  57. br := &bridgeInterface{nlh: nh}
  58. if err := setupDevice(config, br); err != nil {
  59. t.Fatalf("Bridge creation failed: %v", err)
  60. }
  61. if err := setupDeviceUp(config, br); err != nil {
  62. t.Fatalf("Failed to up bridge device: %v", err)
  63. }
  64. lnk, _ := nh.LinkByName(DefaultBridgeName)
  65. if lnk.Attrs().Flags&net.FlagUp != net.FlagUp {
  66. t.Fatal("bridgeInterface should be up")
  67. }
  68. }
  69. func TestGenerateRandomMAC(t *testing.T) {
  70. defer netnsutils.SetupTestOSContext(t)()
  71. mac1 := netutils.GenerateRandomMAC()
  72. mac2 := netutils.GenerateRandomMAC()
  73. if bytes.Equal(mac1, mac2) {
  74. t.Fatalf("Generated twice the same MAC address %v", mac1)
  75. }
  76. }