port_mapping_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package bridge
  2. import (
  3. "os"
  4. "testing"
  5. "github.com/docker/docker/pkg/reexec"
  6. "github.com/docker/libnetwork/netutils"
  7. "github.com/docker/libnetwork/pkg/netlabel"
  8. )
  9. func TestMain(m *testing.M) {
  10. if reexec.Init() {
  11. return
  12. }
  13. os.Exit(m.Run())
  14. }
  15. func TestPortMappingConfig(t *testing.T) {
  16. defer netutils.SetupTestNetNS(t)()
  17. _, d := New()
  18. binding1 := netutils.PortBinding{Proto: netutils.UDP, Port: uint16(400), HostPort: uint16(54000)}
  19. binding2 := netutils.PortBinding{Proto: netutils.TCP, Port: uint16(500), HostPort: uint16(65000)}
  20. portBindings := []netutils.PortBinding{binding1, binding2}
  21. epOptions := make(map[string]interface{})
  22. epOptions[netlabel.PortMap] = portBindings
  23. driverConfig := &Configuration{
  24. BridgeName: DefaultBridgeName,
  25. EnableIPTables: true,
  26. }
  27. driverOptions := make(map[string]interface{})
  28. driverOptions[netlabel.GenericData] = driverConfig
  29. if err := d.Config(driverOptions); err != nil {
  30. t.Fatalf("Failed to setup driver config: %v", err)
  31. }
  32. err := d.CreateNetwork("dummy", nil)
  33. if err != nil {
  34. t.Fatalf("Failed to create bridge: %v", err)
  35. }
  36. _, err = d.CreateEndpoint("dummy", "ep1", epOptions)
  37. if err != nil {
  38. t.Fatalf("Failed to create the endpoint: %s", err.Error())
  39. }
  40. dd := d.(*driver)
  41. ep, _ := dd.network.endpoints["ep1"]
  42. if len(ep.portMapping) != 2 {
  43. t.Fatalf("Failed to store the port bindings into the sandbox info. Found: %v", ep.portMapping)
  44. }
  45. if ep.portMapping[0].Proto != binding1.Proto || ep.portMapping[0].Port != binding1.Port ||
  46. ep.portMapping[1].Proto != binding2.Proto || ep.portMapping[1].Port != binding2.Port {
  47. t.Fatalf("bridgeEndpoint has incorrect port mapping values")
  48. }
  49. if ep.portMapping[0].HostIP == nil || ep.portMapping[0].HostPort == 0 ||
  50. ep.portMapping[1].HostIP == nil || ep.portMapping[1].HostPort == 0 {
  51. t.Fatalf("operational port mapping data not found on bridgeEndpoint")
  52. }
  53. err = releasePorts(ep)
  54. if err != nil {
  55. t.Fatalf("Failed to release mapped ports: %v", err)
  56. }
  57. }