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 }