github.com/jfrog/jfrog-cli-core/v2@v2.51.0/artifactory/utils/container/buildinfo_test.go (about)

     1  package container
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/jfrog/jfrog-client-go/artifactory/services/utils"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestGetManifestPaths(t *testing.T) {
    12  	results := getManifestPaths("/hello-world/latest", "docker-local", Push)
    13  	assert.Len(t, results, 2)
    14  	expected := []string{"docker-local/hello-world/latest/*", "docker-local/latest/*"}
    15  	for i, result := range results {
    16  		assert.Equal(t, expected[i], result)
    17  	}
    18  
    19  	results = getManifestPaths("/hello-world/latest", "docker-local", Pull)
    20  	assert.Len(t, results, 4)
    21  	expected = append(expected, "docker-local/library/hello-world/latest/*", "docker-local/library/latest/*")
    22  	for i, result := range results {
    23  		assert.Equal(t, expected[i], result)
    24  	}
    25  
    26  	results = getManifestPaths("/docker-remote/hello-world/latest", "docker-remote", Push)
    27  	assert.Len(t, results, 2)
    28  	expected = []string{"docker-remote/docker-remote/hello-world/latest/*", "docker-remote/hello-world/latest/*"}
    29  	for i, result := range results {
    30  		assert.Equal(t, expected[i], result)
    31  	}
    32  
    33  	results = getManifestPaths("/docker-remote/hello-world/latest", "docker-remote", Pull)
    34  	assert.Len(t, results, 4)
    35  	expected = append(expected, "docker-remote/library/docker-remote/hello-world/latest/*", "docker-remote/library/hello-world/latest/*")
    36  	for i, result := range results {
    37  		assert.Equal(t, expected[i], result)
    38  	}
    39  }
    40  
    41  func TestGetImageWithDigest(t *testing.T) {
    42  	filePath := filepath.Join("..", "testdata", "container", "imageTagWithDigest")
    43  	tag, sha256, err := GetImageTagWithDigest(filePath)
    44  	assert.NoError(t, err)
    45  	assert.Equal(t, "my-image-tag", tag.name)
    46  	assert.Equal(t, "sha256:12345", sha256)
    47  }
    48  
    49  var dummySearchResults = &utils.ResultItem{
    50  	Type:        "json",
    51  	Actual_Md5:  "md5",
    52  	Actual_Sha1: "sha1",
    53  	Sha256:      "sha2",
    54  	Size:        1,
    55  }
    56  
    57  func TestManifestConfig(t *testing.T) {
    58  	dependencies, err := getDependenciesFromManifestConfig(createManifestConfig())
    59  	assert.NoError(t, err)
    60  	assert.Len(t, dependencies, 2)
    61  }
    62  
    63  func createManifestConfig() (map[string]*utils.ResultItem, string) {
    64  	config := make(map[string]*utils.ResultItem)
    65  	config["manifest.json"] = dummySearchResults
    66  	config["sha__123"] = dummySearchResults
    67  	return config, "sha:123"
    68  }
    69  
    70  func TestManifestConfigNoManifestFound(t *testing.T) {
    71  	_, err := getDependenciesFromManifestConfig(createEmptyManifestConfig())
    72  	assert.ErrorContains(t, err, "The manifest.json was not found in Artifactory")
    73  }
    74  
    75  func createEmptyManifestConfig() (map[string]*utils.ResultItem, string) {
    76  	config := make(map[string]*utils.ResultItem)
    77  	return config, "sha:123"
    78  }
    79  
    80  func TestManifestConfigNoLayer(t *testing.T) {
    81  	_, err := getDependenciesFromManifestConfig(createManifestConfigWithNoLayer())
    82  	assert.ErrorContains(t, err, "Image 'sha:123' was not found in Artifactory")
    83  }
    84  
    85  func createManifestConfigWithNoLayer() (map[string]*utils.ResultItem, string) {
    86  	config := make(map[string]*utils.ResultItem)
    87  	config["manifest.json"] = dummySearchResults
    88  	return config, "sha:123"
    89  }
    90  
    91  func TestGetDependenciesFromManifestLayer(t *testing.T) {
    92  	searchResults, manifest := createManifestConfigWithLayer()
    93  	dependencies, err := getDependenciesFromManifestLayer(searchResults, manifest)
    94  	assert.NoError(t, err)
    95  	assert.Len(t, dependencies, 1)
    96  }
    97  
    98  func createManifestConfigWithLayer() (map[string]*utils.ResultItem, *manifest) {
    99  	manifest := &manifest{
   100  		Layers: []layer{{
   101  			Digest:    "sha:1",
   102  			MediaType: "MediaType",
   103  		}},
   104  	}
   105  	searchResults := make(map[string]*utils.ResultItem)
   106  	searchResults["manifest.json"] = dummySearchResults
   107  	searchResults["sha__1"] = dummySearchResults
   108  	searchResults["sha__2"] = dummySearchResults
   109  	return searchResults, manifest
   110  }
   111  
   112  func TestMissingDependenciesInManifestLayer(t *testing.T) {
   113  	searchResults, manifest := createManifestConfigWithMissingLayer()
   114  	_, err := getDependenciesFromManifestLayer(searchResults, manifest)
   115  	assert.ErrorContains(t, err, "Could not find layer: sha__2 in Artifactory")
   116  }
   117  
   118  func createManifestConfigWithMissingLayer() (map[string]*utils.ResultItem, *manifest) {
   119  	manifest := &manifest{
   120  		Layers: []layer{
   121  			{
   122  				Digest:    "sha:1",
   123  				MediaType: "MediaType",
   124  			},
   125  			//  Missing layer
   126  			{
   127  				Digest:    "sha:2",
   128  				MediaType: "type",
   129  			},
   130  		},
   131  	}
   132  	searchResults := make(map[string]*utils.ResultItem)
   133  	searchResults["manifest.json"] = dummySearchResults
   134  	searchResults["sha__1"] = dummySearchResults
   135  	return searchResults, manifest
   136  }
   137  
   138  func TestForeignDependenciesInManifestLayer(t *testing.T) {
   139  	searchResults, manifest := createManifestConfigWithForeignLayer()
   140  	dependencies, err := getDependenciesFromManifestLayer(searchResults, manifest)
   141  	assert.NoError(t, err)
   142  	assert.Len(t, dependencies, 1)
   143  }
   144  
   145  func createManifestConfigWithForeignLayer() (map[string]*utils.ResultItem, *manifest) {
   146  	manifest := &manifest{
   147  		Layers: []layer{
   148  			{
   149  				Digest:    "sha:1",
   150  				MediaType: "MediaType",
   151  			},
   152  			//  Foreign layer
   153  			{
   154  				Digest:    "sha:2",
   155  				MediaType: foreignLayerMediaType,
   156  			},
   157  		},
   158  	}
   159  	searchResults := make(map[string]*utils.ResultItem)
   160  	searchResults["manifest.json"] = dummySearchResults
   161  	searchResults["sha__1"] = dummySearchResults
   162  	return searchResults, manifest
   163  }