forked from LaconicNetwork/kompose
Support port range for docker-compose v2 (#1345)
* allow port range specification in v1v2 * improve tests for loadPorts * add port range to fixtures of docker-compose v2 * update fixtures to follow up on #1341
This commit is contained in:
@@ -17,20 +17,21 @@ limitations under the License.
|
||||
package compose
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/kubernetes/kompose/pkg/kobject"
|
||||
api "k8s.io/api/core/v1"
|
||||
"time"
|
||||
|
||||
"github.com/docker/cli/cli/compose/types"
|
||||
"github.com/docker/libcompose/config"
|
||||
"github.com/docker/libcompose/project"
|
||||
"github.com/docker/libcompose/yaml"
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/kubernetes/kompose/pkg/kobject"
|
||||
"github.com/pkg/errors"
|
||||
api "k8s.io/api/core/v1"
|
||||
)
|
||||
|
||||
func durationPtr(value time.Duration) *time.Duration {
|
||||
@@ -147,50 +148,95 @@ func TestHandleServiceType(t *testing.T) {
|
||||
|
||||
// Test loading of ports
|
||||
func TestLoadPorts(t *testing.T) {
|
||||
port1 := []string{"127.0.0.1:80:80/tcp"}
|
||||
result1 := kobject.Ports{
|
||||
HostIP: "127.0.0.1",
|
||||
HostPort: 80,
|
||||
ContainerPort: 80,
|
||||
Protocol: api.ProtocolTCP,
|
||||
}
|
||||
port2 := []string{"80:80/tcp"}
|
||||
result2 := kobject.Ports{
|
||||
HostPort: 80,
|
||||
ContainerPort: 80,
|
||||
Protocol: api.ProtocolTCP,
|
||||
}
|
||||
port3 := []string{"80:80"}
|
||||
result3 := kobject.Ports{
|
||||
HostPort: 80,
|
||||
ContainerPort: 80,
|
||||
Protocol: api.ProtocolTCP,
|
||||
}
|
||||
port4 := []string{"80"}
|
||||
result4 := kobject.Ports{
|
||||
HostPort: 0,
|
||||
ContainerPort: 80,
|
||||
Protocol: api.ProtocolTCP,
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
ports []string
|
||||
result kobject.Ports
|
||||
expose []string
|
||||
want []kobject.Ports
|
||||
}{
|
||||
{port1, result1},
|
||||
{port2, result2},
|
||||
{port3, result3},
|
||||
{port4, result4},
|
||||
{
|
||||
ports: []string{"127.0.0.1:80:80/tcp"},
|
||||
want: []kobject.Ports{
|
||||
{HostIP: "127.0.0.1", HostPort: 80, ContainerPort: 80, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"80:80/tcp"},
|
||||
want: []kobject.Ports{
|
||||
{HostPort: 80, ContainerPort: 80, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"80:80"},
|
||||
want: []kobject.Ports{
|
||||
{HostPort: 80, ContainerPort: 80, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"80"},
|
||||
want: []kobject.Ports{
|
||||
{ContainerPort: 80, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"3000-3005"},
|
||||
want: []kobject.Ports{
|
||||
{ContainerPort: 3000, Protocol: api.ProtocolTCP},
|
||||
{ContainerPort: 3001, Protocol: api.ProtocolTCP},
|
||||
{ContainerPort: 3002, Protocol: api.ProtocolTCP},
|
||||
{ContainerPort: 3003, Protocol: api.ProtocolTCP},
|
||||
{ContainerPort: 3004, Protocol: api.ProtocolTCP},
|
||||
{ContainerPort: 3005, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"3000-3005:5000-5005"},
|
||||
want: []kobject.Ports{
|
||||
{HostPort: 3000, ContainerPort: 5000, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 3001, ContainerPort: 5001, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 3002, ContainerPort: 5002, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 3003, ContainerPort: 5003, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 3004, ContainerPort: 5004, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 3005, ContainerPort: 5005, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"127.0.0.1:3000-3005:5000-5005"},
|
||||
want: []kobject.Ports{
|
||||
{HostIP: "127.0.0.1", HostPort: 3000, ContainerPort: 5000, Protocol: api.ProtocolTCP},
|
||||
{HostIP: "127.0.0.1", HostPort: 3001, ContainerPort: 5001, Protocol: api.ProtocolTCP},
|
||||
{HostIP: "127.0.0.1", HostPort: 3002, ContainerPort: 5002, Protocol: api.ProtocolTCP},
|
||||
{HostIP: "127.0.0.1", HostPort: 3003, ContainerPort: 5003, Protocol: api.ProtocolTCP},
|
||||
{HostIP: "127.0.0.1", HostPort: 3004, ContainerPort: 5004, Protocol: api.ProtocolTCP},
|
||||
{HostIP: "127.0.0.1", HostPort: 3005, ContainerPort: 5005, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"80", "3000"},
|
||||
want: []kobject.Ports{
|
||||
{HostPort: 0, ContainerPort: 80, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 0, ContainerPort: 3000, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
{
|
||||
ports: []string{"80", "3000"},
|
||||
expose: []string{"80"},
|
||||
want: []kobject.Ports{
|
||||
{HostPort: 0, ContainerPort: 80, Protocol: api.ProtocolTCP},
|
||||
{HostPort: 0, ContainerPort: 3000, Protocol: api.ProtocolTCP},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
result, err := loadPorts(tt.ports, nil)
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error with loading ports %v", err)
|
||||
}
|
||||
if result[0] != tt.result {
|
||||
t.Errorf("Expected %q, got %q", tt.result, result[0])
|
||||
}
|
||||
t.Run(fmt.Sprintf("port=%q,expose=%q", tt.ports, tt.expose), func(t *testing.T) {
|
||||
got, err := loadPorts(tt.ports, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("Unexpected error with loading ports %v", err)
|
||||
}
|
||||
if diff := cmp.Diff(tt.want, got); diff != "" {
|
||||
t.Errorf("loadPorts() mismatch (-want +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user