Merge pull request #43370 from feiskyer/port-mapping
Automatic merge from submit-queue (batch tested with PRs 42659, 43370) dockershim: process protocol correctly for port mapping **What this PR does / why we need it**: dockershim: process protocol correctly for port mapping. **Which issue this PR fixes** Fixes #43365. **Special notes for your reviewer**: Should be included in v1.6. **Release note**: ```release-note NONE ``` cc/ @Random-Liu @justinsb @kubernetes/sig-node-pr-reviews
This commit is contained in:
		| @@ -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", | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue