github.com/cloudfoundry-attic/ltc@v0.0.0-20151123212628-098adc7919fc/docker_runner/docker_metadata_fetcher/docker_session_factory_test.go (about)

     1  package docker_metadata_fetcher_test
     2  
     3  import (
     4  	"net/url"
     5  
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  	"github.com/onsi/gomega/ghttp"
     9  
    10  	"github.com/cloudfoundry-incubator/ltc/docker_runner/docker_metadata_fetcher"
    11  	"github.com/docker/docker/cliconfig"
    12  	"github.com/docker/docker/registry"
    13  )
    14  
    15  var _ = Describe("DockerSessionFactory", func() {
    16  	Describe("MakeSession", func() {
    17  		var (
    18  			registryHost         string
    19  			dockerRegistryServer *ghttp.Server
    20  			sessionFactory       docker_metadata_fetcher.DockerSessionFactory
    21  		)
    22  
    23  		BeforeEach(func() {
    24  			sessionFactory = docker_metadata_fetcher.NewDockerSessionFactory()
    25  			dockerRegistryServer = ghttp.NewServer()
    26  		})
    27  
    28  		AfterEach(func() {
    29  			dockerRegistryServer.Close()
    30  		})
    31  
    32  		Describe("creating registry sessions", func() {
    33  			BeforeEach(func() {
    34  				parts, err := url.Parse(dockerRegistryServer.URL())
    35  				Expect(err).NotTo(HaveOccurred())
    36  				registryHost = parts.Host
    37  
    38  				dockerRegistryServer.RouteToHandler("GET", "/v1/_ping", ghttp.VerifyRequest("GET", "/v1/_ping"))
    39  				dockerRegistryServer.RouteToHandler("GET", "/v2/", ghttp.VerifyRequest("GET", "/v2/"))
    40  			})
    41  
    42  			Context("when connecting to a secure registry", func() {
    43  				It("creates a registry session for the given repo", func() {
    44  					session, err := sessionFactory.MakeSession(registryHost+"/lattice-mappppppppppppappapapa", false)
    45  					Expect(err).NotTo(HaveOccurred())
    46  
    47  					registrySession, ok := session.(*registry.Session)
    48  					Expect(ok).To(BeTrue())
    49  					Expect(*registrySession.GetAuthConfig(true)).To(Equal(cliconfig.AuthConfig{}))
    50  
    51  					Expect(dockerRegistryServer.ReceivedRequests()).To(HaveLen(2))
    52  				})
    53  			})
    54  
    55  			Context("when connecting to an insecure registry", func() {
    56  				It("creates a registry session for the given repo", func() {
    57  					session, err := sessionFactory.MakeSession(registryHost+"/lattice-mappppppppppppappapapa", true)
    58  					Expect(err).NotTo(HaveOccurred())
    59  
    60  					registrySession, ok := session.(*registry.Session)
    61  					Expect(ok).To(BeTrue())
    62  					Expect(*registrySession.GetAuthConfig(true)).To(Equal(cliconfig.AuthConfig{}))
    63  
    64  					Expect(dockerRegistryServer.ReceivedRequests()).To(HaveLen(2))
    65  				})
    66  			})
    67  		})
    68  
    69  		Context("when resolving the repo name fails", func() {
    70  			It("returns errors from resolving the repo name", func() {
    71  				_, err := sessionFactory.MakeSession("¥Not-A-Valid-Repo-Name¥"+"/lattice-mappppppppppppappapapa", false)
    72  				Expect(err).To(MatchError(ContainSubstring("Error resolving Docker repository name:\nrepository name component must match")))
    73  
    74  				Expect(dockerRegistryServer.ReceivedRequests()).To(HaveLen(0))
    75  			})
    76  		})
    77  
    78  		Context("when creating a new endpoint fails", func() {
    79  			It("returns an error", func() {
    80  				_, err := sessionFactory.MakeSession("nonexistantregistry.example.com/lattice-mappppppppppppappapapa", false)
    81  				Expect(err).To(MatchError(ContainSubstring("Error Connecting to Docker registry:\ninvalid registry endpoint")))
    82  
    83  				Expect(dockerRegistryServer.ReceivedRequests()).To(HaveLen(0))
    84  			})
    85  		})
    86  
    87  	})
    88  })