github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/internal/inspect/ports_test.go (about)

     1  package inspect
     2  
     3  import (
     4  	"testing"
     5  
     6  	composetypes "github.com/docker/cli/cli/compose/types"
     7  	"gotest.tools/assert"
     8  )
     9  
    10  func TestGetPorts(t *testing.T) {
    11  	for _, testcase := range []struct {
    12  		name     string
    13  		ports    []composetypes.ServicePortConfig
    14  		expected string
    15  	}{
    16  		{
    17  			name:     "no-published-ports",
    18  			ports:    []composetypes.ServicePortConfig{target(80)},
    19  			expected: "",
    20  		},
    21  		{
    22  			name:     "published-port",
    23  			ports:    []composetypes.ServicePortConfig{published(8080)},
    24  			expected: "8080",
    25  		},
    26  		{
    27  			name:     "mix-published-target-ports",
    28  			ports:    []composetypes.ServicePortConfig{published(8080), target(80), published(9090)},
    29  			expected: "8080,9090",
    30  		},
    31  		{
    32  			name:     "simple-range",
    33  			ports:    publishedRange(8080, 8085),
    34  			expected: "8080-8085",
    35  		},
    36  		{
    37  			name:     "complex-range",
    38  			ports:    append(append(publishedRange(8080, 8081), target(80), published(8082)), publishedRange(8083, 8090)...),
    39  			expected: "8080-8090",
    40  		},
    41  		{
    42  			name:     "multi-range",
    43  			ports:    append(append(publishedRange(8080, 8081), published(8083)), publishedRange(8085, 8086)...),
    44  			expected: "8080-8081,8083,8085-8086",
    45  		},
    46  		{
    47  			name:     "ports-are-sorted",
    48  			ports:    []composetypes.ServicePortConfig{published(8080), published(8082), published(7979), published(8081)},
    49  			expected: "7979,8080-8082",
    50  		},
    51  	} {
    52  		t.Run(testcase.name, func(t *testing.T) {
    53  			assert.Equal(t, getPorts(testcase.ports), testcase.expected)
    54  		})
    55  	}
    56  }
    57  
    58  func published(port uint32) composetypes.ServicePortConfig {
    59  	return composetypes.ServicePortConfig{
    60  		Published: port,
    61  	}
    62  }
    63  
    64  func target(port uint32) composetypes.ServicePortConfig {
    65  	return composetypes.ServicePortConfig{
    66  		Target: port,
    67  	}
    68  }
    69  
    70  func publishedRange(start, end uint32) []composetypes.ServicePortConfig {
    71  	var ports []composetypes.ServicePortConfig
    72  	for i := start; i <= end; i++ {
    73  		ports = append(ports, published(i))
    74  	}
    75  	return ports
    76  }