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 }