github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/client/client_test.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "os" 6 "testing" 7 8 dockerClient "github.com/docker/docker/client" 9 "github.com/golang/mock/gomock" 10 "github.com/sclevine/spec" 11 "github.com/sclevine/spec/report" 12 13 "github.com/buildpacks/pack/pkg/logging" 14 "github.com/buildpacks/pack/pkg/testmocks" 15 h "github.com/buildpacks/pack/testhelpers" 16 ) 17 18 func TestClient(t *testing.T) { 19 spec.Run(t, "Client", testClient, spec.Report(report.Terminal{})) 20 } 21 22 func testClient(t *testing.T, when spec.G, it spec.S) { 23 when("#NewClient", func() { 24 it("default works", func() { 25 _, err := NewClient() 26 h.AssertNil(t, err) 27 }) 28 29 when("docker env is messed up", func() { 30 var dockerHost string 31 var dockerHostKey = "DOCKER_HOST" 32 it.Before(func() { 33 dockerHost = os.Getenv(dockerHostKey) 34 h.AssertNil(t, os.Setenv(dockerHostKey, "fake-value")) 35 }) 36 37 it.After(func() { 38 h.AssertNil(t, os.Setenv(dockerHostKey, dockerHost)) 39 }) 40 41 it("returns errors", func() { 42 _, err := NewClient() 43 h.AssertError(t, err, "docker client") 44 }) 45 }) 46 }) 47 48 when("#WithLogger", func() { 49 it("uses logger provided", func() { 50 var w bytes.Buffer 51 logger := logging.NewSimpleLogger(&w) 52 cl, err := NewClient(WithLogger(logger)) 53 h.AssertNil(t, err) 54 h.AssertSameInstance(t, cl.logger, logger) 55 }) 56 }) 57 58 when("#WithImageFactory", func() { 59 it("uses image factory provided", func() { 60 mockController := gomock.NewController(t) 61 mockImageFactory := testmocks.NewMockImageFactory(mockController) 62 cl, err := NewClient(WithImageFactory(mockImageFactory)) 63 h.AssertNil(t, err) 64 h.AssertSameInstance(t, cl.imageFactory, mockImageFactory) 65 }) 66 }) 67 68 when("#WithFetcher", func() { 69 it("uses image factory provided", func() { 70 mockController := gomock.NewController(t) 71 mockFetcher := testmocks.NewMockImageFetcher(mockController) 72 cl, err := NewClient(WithFetcher(mockFetcher)) 73 h.AssertNil(t, err) 74 h.AssertSameInstance(t, cl.imageFetcher, mockFetcher) 75 }) 76 }) 77 78 when("#WithDownloader", func() { 79 it("uses image factory provided", func() { 80 mockController := gomock.NewController(t) 81 mockDownloader := testmocks.NewMockBlobDownloader(mockController) 82 cl, err := NewClient(WithDownloader(mockDownloader)) 83 h.AssertNil(t, err) 84 h.AssertSameInstance(t, cl.downloader, mockDownloader) 85 }) 86 }) 87 88 when("#WithDockerClient", func() { 89 it("uses docker client provided", func() { 90 docker, err := dockerClient.NewClientWithOpts( 91 dockerClient.FromEnv, 92 ) 93 h.AssertNil(t, err) 94 cl, err := NewClient(WithDockerClient(docker)) 95 h.AssertNil(t, err) 96 h.AssertSameInstance(t, cl.docker, docker) 97 }) 98 }) 99 100 when("#WithExperimental", func() { 101 it("sets experimental = true", func() { 102 cl, err := NewClient(WithExperimental(true)) 103 h.AssertNil(t, err) 104 h.AssertEq(t, cl.experimental, true) 105 }) 106 107 it("sets experimental = false", func() { 108 cl, err := NewClient(WithExperimental(true)) 109 h.AssertNil(t, err) 110 h.AssertEq(t, cl.experimental, true) 111 }) 112 }) 113 114 when("#WithRegistryMirror", func() { 115 it("uses registry mirrors provided", func() { 116 registryMirrors := map[string]string{ 117 "index.docker.io": "10.0.0.1", 118 } 119 120 cl, err := NewClient(WithRegistryMirrors(registryMirrors)) 121 h.AssertNil(t, err) 122 h.AssertEq(t, cl.registryMirrors, registryMirrors) 123 }) 124 }) 125 }