From 2ddaaec19909e518b263a38ac16892c9537f9e29 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Mon, 20 Mar 2017 16:52:24 +0800 Subject: [PATCH 1/3] dockershim: process protocol correctly for port mapping --- pkg/kubelet/dockershim/helpers.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/kubelet/dockershim/helpers.go b/pkg/kubelet/dockershim/helpers.go index b578ee3386e..20637788cf8 100644 --- a/pkg/kubelet/dockershim/helpers.go +++ b/pkg/kubelet/dockershim/helpers.go @@ -149,10 +149,10 @@ func makePortsAndBindings(pm []*runtimeapi.PortMapping) (map[dockernat.Port]stru // Some of this port stuff is under-documented voodoo. // See http://stackoverflow.com/questions/20428302/binding-a-port-to-a-host-interface-using-the-rest-api var protocol string - switch strings.ToUpper(string(port.Protocol)) { - case "UDP": + switch port.Protocol { + case runtimeapi.Protocol_UDP: protocol = "/udp" - case "TCP": + case runtimeapi.Protocol_TCP: protocol = "/tcp" default: glog.Warningf("Unknown protocol %q: defaulting to TCP", port.Protocol) From 53b5f2df48e6f992266c26878373aa134fb28c63 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Mon, 20 Mar 2017 16:52:38 +0800 Subject: [PATCH 2/3] Add unit test for MakePortsAndBindings --- pkg/kubelet/dockershim/helpers_test.go | 85 ++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/pkg/kubelet/dockershim/helpers_test.go b/pkg/kubelet/dockershim/helpers_test.go index deb2afdc837..74e23857806 100644 --- a/pkg/kubelet/dockershim/helpers_test.go +++ b/pkg/kubelet/dockershim/helpers_test.go @@ -22,6 +22,7 @@ import ( "github.com/blang/semver" dockertypes "github.com/docker/engine-api/types" + dockernat "github.com/docker/go-connections/nat" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -301,3 +302,87 @@ func TestEnsureSandboxImageExists(t *testing.T) { assert.Equal(t, test.err, err != nil) } } + +func TestMakePortsAndBindings(t *testing.T) { + for desc, test := range map[string]struct { + pm []*runtimeapi.PortMapping + exposedPorts map[dockernat.Port]struct{} + portmappings map[dockernat.Port][]dockernat.PortBinding + }{ + "no port mapping": { + pm: nil, + exposedPorts: map[dockernat.Port]struct{}{}, + portmappings: map[dockernat.Port][]dockernat.PortBinding{}, + }, + "tcp port mapping": { + pm: []*runtimeapi.PortMapping{ + { + Protocol: runtimeapi.Protocol_TCP, + ContainerPort: 80, + HostPort: 80, + }, + }, + exposedPorts: map[dockernat.Port]struct{}{ + "80/tcp": {}, + }, + portmappings: map[dockernat.Port][]dockernat.PortBinding{ + "80/tcp": { + { + HostPort: "80", + }, + }, + }, + }, + "udp port mapping": { + pm: []*runtimeapi.PortMapping{ + { + Protocol: runtimeapi.Protocol_UDP, + ContainerPort: 80, + HostPort: 80, + }, + }, + exposedPorts: map[dockernat.Port]struct{}{ + "80/udp": {}, + }, + portmappings: map[dockernat.Port][]dockernat.PortBinding{ + "80/udp": { + { + HostPort: "80", + }, + }, + }, + }, + "multipe port mappings": { + pm: []*runtimeapi.PortMapping{ + { + Protocol: runtimeapi.Protocol_TCP, + ContainerPort: 80, + HostPort: 80, + }, + { + Protocol: runtimeapi.Protocol_TCP, + ContainerPort: 80, + HostPort: 81, + }, + }, + exposedPorts: map[dockernat.Port]struct{}{ + "80/tcp": {}, + }, + portmappings: map[dockernat.Port][]dockernat.PortBinding{ + "80/tcp": { + { + HostPort: "80", + }, + { + HostPort: "81", + }, + }, + }, + }, + } { + t.Logf("TestCase: %s", desc) + actualExposedPorts, actualPortMappings := makePortsAndBindings(test.pm) + assert.Equal(t, test.exposedPorts, actualExposedPorts) + assert.Equal(t, test.portmappings, actualPortMappings) + } +} From 99ed3202f325c1c5f8776890d787ff1d42948388 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Mon, 20 Mar 2017 17:48:36 +0800 Subject: [PATCH 3/3] Run hack/update-bazel.sh --- pkg/kubelet/dockershim/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/kubelet/dockershim/BUILD b/pkg/kubelet/dockershim/BUILD index 84d9298d55d..f9fde0367a9 100644 --- a/pkg/kubelet/dockershim/BUILD +++ b/pkg/kubelet/dockershim/BUILD @@ -96,6 +96,7 @@ go_test( "//vendor:github.com/blang/semver", "//vendor:github.com/docker/engine-api/types", "//vendor:github.com/docker/engine-api/types/container", + "//vendor:github.com/docker/go-connections/nat", "//vendor:github.com/golang/mock/gomock", "//vendor:github.com/stretchr/testify/assert", "//vendor:github.com/stretchr/testify/require",