66 "github.com/docker/docker/api/types"
77 "github.com/docker/docker/api/types/container"
88 cli "github.com/docker/docker/client"
9+ "github.com/docker/go-connections/nat"
910 . "github.com/onsi/ginkgo"
1011 . "github.com/onsi/gomega"
1112)
@@ -32,14 +33,14 @@ var _ = Describe("the container", func() {
3233 containerKnown := * mockContainerWithImageName ("docker.io/prefix/imagename:latest" )
3334
3435 When ("warn on head failure is set to \" always\" " , func () {
35- c := NewClient (false , false , false , false , false , "always" )
36+ c := newClientNoAPI (false , false , false , false , false , "always" )
3637 It ("should always return true" , func () {
3738 Expect (c .WarnOnHeadPullFailed (containerUnknown )).To (BeTrue ())
3839 Expect (c .WarnOnHeadPullFailed (containerKnown )).To (BeTrue ())
3940 })
4041 })
4142 When ("warn on head failure is set to \" auto\" " , func () {
42- c := NewClient (false , false , false , false , false , "auto" )
43+ c := newClientNoAPI (false , false , false , false , false , "auto" )
4344 It ("should always return true" , func () {
4445 Expect (c .WarnOnHeadPullFailed (containerUnknown )).To (BeFalse ())
4546 })
@@ -48,7 +49,7 @@ var _ = Describe("the container", func() {
4849 })
4950 })
5051 When ("warn on head failure is set to \" never\" " , func () {
51- c := NewClient (false , false , false , false , false , "never" )
52+ c := newClientNoAPI (false , false , false , false , false , "never" )
5253 It ("should never return true" , func () {
5354 Expect (c .WarnOnHeadPullFailed (containerUnknown )).To (BeFalse ())
5455 Expect (c .WarnOnHeadPullFailed (containerKnown )).To (BeFalse ())
@@ -130,6 +131,63 @@ var _ = Describe("the container", func() {
130131 })
131132 })
132133 })
134+ Describe ("VerifyConfiguration" , func () {
135+ When ("verifying a container with no image info" , func () {
136+ It ("should return an error" , func () {
137+ c := mockContainerWithPortBindings ()
138+ c .imageInfo = nil
139+ err := c .VerifyConfiguration ()
140+ Expect (err ).To (Equal (errorNoImageInfo ))
141+ })
142+ })
143+ When ("verifying a container with no container info" , func () {
144+ It ("should return an error" , func () {
145+ c := mockContainerWithPortBindings ()
146+ c .containerInfo = nil
147+ err := c .VerifyConfiguration ()
148+ Expect (err ).To (Equal (errorInvalidConfig ))
149+ })
150+ })
151+ When ("verifying a container with no config" , func () {
152+ It ("should return an error" , func () {
153+ c := mockContainerWithPortBindings ()
154+ c .containerInfo .Config = nil
155+ err := c .VerifyConfiguration ()
156+ Expect (err ).To (Equal (errorInvalidConfig ))
157+ })
158+ })
159+ When ("verifying a container with no host config" , func () {
160+ It ("should return an error" , func () {
161+ c := mockContainerWithPortBindings ()
162+ c .containerInfo .HostConfig = nil
163+ err := c .VerifyConfiguration ()
164+ Expect (err ).To (Equal (errorInvalidConfig ))
165+ })
166+ })
167+ When ("verifying a container with no port bindings" , func () {
168+ It ("should not return an error" , func () {
169+ c := mockContainerWithPortBindings ()
170+ err := c .VerifyConfiguration ()
171+ Expect (err ).ToNot (HaveOccurred ())
172+ })
173+ })
174+ When ("verifying a container with port bindings, but no exposed ports" , func () {
175+ It ("should return an error" , func () {
176+ c := mockContainerWithPortBindings ("80/tcp" )
177+ c .containerInfo .Config .ExposedPorts = nil
178+ err := c .VerifyConfiguration ()
179+ Expect (err ).To (Equal (errorNoExposedPorts ))
180+ })
181+ })
182+ When ("verifying a container with port bindings and exposed ports is non-nil" , func () {
183+ It ("should return an error" , func () {
184+ c := mockContainerWithPortBindings ("80/tcp" )
185+ c .containerInfo .Config .ExposedPorts = map [nat.Port ]struct {}{"80/tcp" : {}}
186+ err := c .VerifyConfiguration ()
187+ Expect (err ).ToNot (HaveOccurred ())
188+ })
189+ })
190+ })
133191 When ("asked for metadata" , func () {
134192 var c * Container
135193 BeforeEach (func () {
@@ -281,10 +339,23 @@ var _ = Describe("the container", func() {
281339 })
282340})
283341
342+ func mockContainerWithPortBindings (portBindingSources ... string ) * Container {
343+ mockContainer := mockContainerWithLabels (nil )
344+ mockContainer .imageInfo = & types.ImageInspect {}
345+ hostConfig := & container.HostConfig {
346+ PortBindings : nat.PortMap {},
347+ }
348+ for _ , pbs := range portBindingSources {
349+ hostConfig .PortBindings [nat .Port (pbs )] = []nat.PortBinding {}
350+ }
351+ mockContainer .containerInfo .HostConfig = hostConfig
352+ return mockContainer
353+ }
354+
284355func mockContainerWithImageName (name string ) * Container {
285- container := mockContainerWithLabels (nil )
286- container .containerInfo .Config .Image = name
287- return container
356+ mockContainer := mockContainerWithLabels (nil )
357+ mockContainer .containerInfo .Config .Image = name
358+ return mockContainer
288359}
289360
290361func mockContainerWithLinks (links []string ) * Container {
@@ -317,3 +388,15 @@ func mockContainerWithLabels(labels map[string]string) *Container {
317388 }
318389 return NewContainer (& content , nil )
319390}
391+
392+ func newClientNoAPI (pullImages , includeStopped , reviveStopped , removeVolumes , includeRestarting bool , warnOnHeadFailed string ) Client {
393+ return dockerClient {
394+ api : nil ,
395+ pullImages : pullImages ,
396+ removeVolumes : removeVolumes ,
397+ includeStopped : includeStopped ,
398+ reviveStopped : reviveStopped ,
399+ includeRestarting : includeRestarting ,
400+ warnOnHeadFailed : warnOnHeadFailed ,
401+ }
402+ }
0 commit comments