github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/cnbutils/buildpack_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package cnbutils_test
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/SAP/jenkins-library/pkg/cnbutils"
    11  	"github.com/SAP/jenkins-library/pkg/mock"
    12  	v1 "github.com/google/go-containerregistry/pkg/v1"
    13  	"github.com/google/go-containerregistry/pkg/v1/fake"
    14  	fakeImage "github.com/google/go-containerregistry/pkg/v1/fake"
    15  	"github.com/stretchr/testify/assert"
    16  )
    17  
    18  func TestBuildpackDownload(t *testing.T) {
    19  	var mockUtils = &cnbutils.MockUtils{
    20  		ExecMockRunner: &mock.ExecMockRunner{},
    21  		FilesMock:      &mock.FilesMock{},
    22  		DownloadMock:   &mock.DownloadMock{},
    23  	}
    24  
    25  	t.Run("successfully downloads a buildpack", func(t *testing.T) {
    26  		fakeImg := &fakeImage.FakeImage{}
    27  		fakeImg.DigestReturns(v1.NewHash("sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"))
    28  		fakeImg.ConfigFileReturns(&v1.ConfigFile{
    29  			Config: v1.Config{
    30  				Labels: map[string]string{
    31  					"io.buildpacks.buildpackage.metadata": "{\"id\": \"testbuildpack\", \"version\": \"0.0.1\"}",
    32  				},
    33  			},
    34  		}, nil)
    35  		mockUtils.ReturnImage = fakeImg
    36  		mockUtils.RemoteImageInfo = fakeImg
    37  
    38  		err := cnbutils.DownloadBuildpacks("/destination", []string{"buildpack"}, "/tmp/config.json", mockUtils)
    39  		assert.NoError(t, err)
    40  	})
    41  }
    42  
    43  func TestGetMetadata(t *testing.T) {
    44  	var mockUtils = &cnbutils.MockUtils{
    45  		ExecMockRunner: &mock.ExecMockRunner{},
    46  		FilesMock:      &mock.FilesMock{},
    47  		DownloadMock: &mock.DownloadMock{
    48  			ImageInfoStub: func(imageRef string) (v1.Image, error) {
    49  				return &fake.FakeImage{
    50  					ConfigFileStub: func() (*v1.ConfigFile, error) {
    51  						return &v1.ConfigFile{
    52  							Config: v1.Config{
    53  								Labels: map[string]string{
    54  									"io.buildpacks.buildpackage.metadata": fmt.Sprintf("{\"id\": \"%s\", \"version\": \"0.0.1\"}", imageRef),
    55  								},
    56  							},
    57  						}, nil
    58  					},
    59  				}, nil
    60  			},
    61  		},
    62  	}
    63  
    64  	t.Run("returns empty metadata", func(t *testing.T) {
    65  		meta, err := cnbutils.GetMetadata(nil, mockUtils)
    66  		assert.NoError(t, err)
    67  		assert.Empty(t, meta)
    68  	})
    69  
    70  	t.Run("returns metadata of the provided buildpacks", func(t *testing.T) {
    71  		meta, err := cnbutils.GetMetadata([]string{"buildpack1", "buildpack2"}, mockUtils)
    72  		assert.NoError(t, err)
    73  		assert.Equal(t, []cnbutils.BuildPackMetadata{
    74  			{
    75  				ID:      "buildpack1",
    76  				Version: "0.0.1",
    77  			},
    78  			{
    79  				ID:      "buildpack2",
    80  				Version: "0.0.1",
    81  			},
    82  		}, meta)
    83  	})
    84  }