github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/compose/convert/service_test.go (about) 1 package convert 2 3 import ( 4 "sort" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/docker/docker/api/types/container" 10 "github.com/docker/docker/api/types/swarm" 11 composetypes "github.com/docker/docker/cli/compose/types" 12 "github.com/docker/docker/pkg/testutil/assert" 13 ) 14 15 func TestConvertRestartPolicyFromNone(t *testing.T) { 16 policy, err := convertRestartPolicy("no", nil) 17 assert.NilError(t, err) 18 assert.Equal(t, policy, (*swarm.RestartPolicy)(nil)) 19 } 20 21 func TestConvertRestartPolicyFromUnknown(t *testing.T) { 22 _, err := convertRestartPolicy("unknown", nil) 23 assert.Error(t, err, "unknown restart policy: unknown") 24 } 25 26 func TestConvertRestartPolicyFromAlways(t *testing.T) { 27 policy, err := convertRestartPolicy("always", nil) 28 expected := &swarm.RestartPolicy{ 29 Condition: swarm.RestartPolicyConditionAny, 30 } 31 assert.NilError(t, err) 32 assert.DeepEqual(t, policy, expected) 33 } 34 35 func TestConvertRestartPolicyFromFailure(t *testing.T) { 36 policy, err := convertRestartPolicy("on-failure:4", nil) 37 attempts := uint64(4) 38 expected := &swarm.RestartPolicy{ 39 Condition: swarm.RestartPolicyConditionOnFailure, 40 MaxAttempts: &attempts, 41 } 42 assert.NilError(t, err) 43 assert.DeepEqual(t, policy, expected) 44 } 45 46 func TestConvertEnvironment(t *testing.T) { 47 source := map[string]string{ 48 "foo": "bar", 49 "key": "value", 50 } 51 env := convertEnvironment(source) 52 sort.Strings(env) 53 assert.DeepEqual(t, env, []string{"foo=bar", "key=value"}) 54 } 55 56 func TestConvertResourcesFull(t *testing.T) { 57 source := composetypes.Resources{ 58 Limits: &composetypes.Resource{ 59 NanoCPUs: "0.003", 60 MemoryBytes: composetypes.UnitBytes(300000000), 61 }, 62 Reservations: &composetypes.Resource{ 63 NanoCPUs: "0.002", 64 MemoryBytes: composetypes.UnitBytes(200000000), 65 }, 66 } 67 resources, err := convertResources(source) 68 assert.NilError(t, err) 69 70 expected := &swarm.ResourceRequirements{ 71 Limits: &swarm.Resources{ 72 NanoCPUs: 3000000, 73 MemoryBytes: 300000000, 74 }, 75 Reservations: &swarm.Resources{ 76 NanoCPUs: 2000000, 77 MemoryBytes: 200000000, 78 }, 79 } 80 assert.DeepEqual(t, resources, expected) 81 } 82 83 func TestConvertResourcesOnlyMemory(t *testing.T) { 84 source := composetypes.Resources{ 85 Limits: &composetypes.Resource{ 86 MemoryBytes: composetypes.UnitBytes(300000000), 87 }, 88 Reservations: &composetypes.Resource{ 89 MemoryBytes: composetypes.UnitBytes(200000000), 90 }, 91 } 92 resources, err := convertResources(source) 93 assert.NilError(t, err) 94 95 expected := &swarm.ResourceRequirements{ 96 Limits: &swarm.Resources{ 97 MemoryBytes: 300000000, 98 }, 99 Reservations: &swarm.Resources{ 100 MemoryBytes: 200000000, 101 }, 102 } 103 assert.DeepEqual(t, resources, expected) 104 } 105 106 func TestConvertHealthcheck(t *testing.T) { 107 retries := uint64(10) 108 source := &composetypes.HealthCheckConfig{ 109 Test: []string{"EXEC", "touch", "/foo"}, 110 Timeout: "30s", 111 Interval: "2ms", 112 Retries: &retries, 113 } 114 expected := &container.HealthConfig{ 115 Test: source.Test, 116 Timeout: 30 * time.Second, 117 Interval: 2 * time.Millisecond, 118 Retries: 10, 119 } 120 121 healthcheck, err := convertHealthcheck(source) 122 assert.NilError(t, err) 123 assert.DeepEqual(t, healthcheck, expected) 124 } 125 126 func TestConvertHealthcheckDisable(t *testing.T) { 127 source := &composetypes.HealthCheckConfig{Disable: true} 128 expected := &container.HealthConfig{ 129 Test: []string{"NONE"}, 130 } 131 132 healthcheck, err := convertHealthcheck(source) 133 assert.NilError(t, err) 134 assert.DeepEqual(t, healthcheck, expected) 135 } 136 137 func TestConvertHealthcheckDisableWithTest(t *testing.T) { 138 source := &composetypes.HealthCheckConfig{ 139 Disable: true, 140 Test: []string{"EXEC", "touch"}, 141 } 142 _, err := convertHealthcheck(source) 143 assert.Error(t, err, "test and disable can't be set") 144 } 145 146 func TestConvertEndpointSpec(t *testing.T) { 147 source := []composetypes.ServicePortConfig{ 148 { 149 Protocol: "udp", 150 Target: 53, 151 Published: 1053, 152 Mode: "host", 153 }, 154 { 155 Target: 8080, 156 Published: 80, 157 }, 158 } 159 endpoint, err := convertEndpointSpec(source) 160 161 expected := swarm.EndpointSpec{ 162 Ports: []swarm.PortConfig{ 163 { 164 TargetPort: 8080, 165 PublishedPort: 80, 166 }, 167 { 168 Protocol: "udp", 169 TargetPort: 53, 170 PublishedPort: 1053, 171 PublishMode: "host", 172 }, 173 }, 174 } 175 176 assert.NilError(t, err) 177 assert.DeepEqual(t, *endpoint, expected) 178 } 179 180 func TestConvertServiceNetworksOnlyDefault(t *testing.T) { 181 networkConfigs := networkMap{} 182 networks := map[string]*composetypes.ServiceNetworkConfig{} 183 184 configs, err := convertServiceNetworks( 185 networks, networkConfigs, NewNamespace("foo"), "service") 186 187 expected := []swarm.NetworkAttachmentConfig{ 188 { 189 Target: "foo_default", 190 Aliases: []string{"service"}, 191 }, 192 } 193 194 assert.NilError(t, err) 195 assert.DeepEqual(t, configs, expected) 196 } 197 198 func TestConvertServiceNetworks(t *testing.T) { 199 networkConfigs := networkMap{ 200 "front": composetypes.NetworkConfig{ 201 External: composetypes.External{ 202 External: true, 203 Name: "fronttier", 204 }, 205 }, 206 "back": composetypes.NetworkConfig{}, 207 } 208 networks := map[string]*composetypes.ServiceNetworkConfig{ 209 "front": { 210 Aliases: []string{"something"}, 211 }, 212 "back": { 213 Aliases: []string{"other"}, 214 }, 215 } 216 217 configs, err := convertServiceNetworks( 218 networks, networkConfigs, NewNamespace("foo"), "service") 219 220 expected := []swarm.NetworkAttachmentConfig{ 221 { 222 Target: "foo_back", 223 Aliases: []string{"other", "service"}, 224 }, 225 { 226 Target: "fronttier", 227 Aliases: []string{"something", "service"}, 228 }, 229 } 230 231 sortedConfigs := byTargetSort(configs) 232 sort.Sort(&sortedConfigs) 233 234 assert.NilError(t, err) 235 assert.DeepEqual(t, []swarm.NetworkAttachmentConfig(sortedConfigs), expected) 236 } 237 238 type byTargetSort []swarm.NetworkAttachmentConfig 239 240 func (s byTargetSort) Len() int { 241 return len(s) 242 } 243 244 func (s byTargetSort) Less(i, j int) bool { 245 return strings.Compare(s[i].Target, s[j].Target) < 0 246 } 247 248 func (s byTargetSort) Swap(i, j int) { 249 s[i], s[j] = s[j], s[i] 250 }