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  }