@@ -2,7 +2,6 @@ package importer
22
33import (
44 "context"
5- "encoding/json"
65 "fmt"
76 "net/http"
87 "net/url"
@@ -11,7 +10,6 @@ import (
1110
1211 "github.com/containers/image/v5/pkg/sysregistriesv2"
1312 "github.com/distribution/distribution/v3"
14- "github.com/distribution/distribution/v3/manifest/schema1"
1513 "github.com/distribution/distribution/v3/manifest/schema2"
1614 "github.com/distribution/distribution/v3/reference"
1715 godigest "github.com/opencontainers/go-digest"
@@ -169,20 +167,6 @@ func (r *mockTagService) Lookup(ctx context.Context, digest distribution.Descrip
169167 return nil , fmt .Errorf ("not implemented" )
170168}
171169
172- func TestSchema1ToImage (t * testing.T ) {
173- m := & schema1.SignedManifest {}
174- if err := json .Unmarshal ([]byte (etcdManifest ), m ); err != nil {
175- t .Fatal (err )
176- }
177- image , err := schema1ToImage (m , godigest .Digest ("sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ))
178- if err != nil {
179- t .Fatal (err )
180- }
181- if image .DockerImageMetadata .ID != "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" {
182- t .Errorf ("unexpected image: %#v" , image .DockerImageMetadata .ID )
183- }
184- }
185-
186170func TestImportNothing (t * testing.T ) {
187171 ctx := NewStaticCredentialsContext (
188172 http .DefaultTransport , http .DefaultTransport , nil ,
@@ -202,11 +186,6 @@ func expectStatusError(status metav1.Status, message string) bool {
202186}
203187
204188func TestImport (t * testing.T ) {
205- etcdManifestSchema1 := & schema1.SignedManifest {}
206- if err := json .Unmarshal ([]byte (etcdManifest ), etcdManifestSchema1 ); err != nil {
207- t .Fatal (err )
208- }
209- t .Logf ("etcd manifest schema 1 digest: %q" , godigest .FromBytes ([]byte (etcdManifest )))
210189 busyboxManifestSchema2 := & schema2.DeserializedManifest {}
211190 if err := busyboxManifestSchema2 .UnmarshalJSON ([]byte (busyboxManifest )); err != nil {
212191 t .Fatal (err )
@@ -312,12 +291,21 @@ func TestImport(t *testing.T) {
312291 },
313292 },
314293 {
315- name : "successfull import by tag and digest" ,
316- retriever : & mockRetriever {repo : & mockRepository {manifest : etcdManifestSchema1 }},
294+ name : "successful import by tag and digest" ,
295+ retriever : & mockRetriever {
296+ repo : & mockRepository {
297+ blobs : & mockBlobStore {
298+ blobs : map [godigest.Digest ][]byte {
299+ busyboxConfigDigest : []byte (busyboxManifestConfig ),
300+ },
301+ },
302+ manifest : busyboxManifestSchema2 ,
303+ },
304+ },
317305 isi : imageapi.ImageStreamImport {
318306 Spec : imageapi.ImageStreamImportSpec {
319307 Images : []imageapi.ImageImportSpec {
320- {From : kapi.ObjectReference {Kind : "DockerImage" , Name : "test@sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" }},
308+ {From : kapi.ObjectReference {Kind : "DockerImage" , Name : "test@" + busyboxDigest }},
321309 {From : kapi.ObjectReference {Kind : "DockerImage" , Name : "test:tag" }},
322310 },
323311 },
@@ -331,13 +319,17 @@ func TestImport(t *testing.T) {
331319 if image .Status .Status != metav1 .StatusSuccess {
332320 t .Errorf ("unexpected status %d: %#v" , i , image .Status )
333321 }
334- // the image name is always the sha256, and size is calculated
335- if image .Image == nil || image .Image .Name != "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" || image .Image .DockerImageMetadata .Size != 28643712 {
336- t .Errorf ("unexpected image %d: %#v" , i , image .Image .Name )
337- }
338- // the most specific reference is returned
339- if image .Image .DockerImageReference != "test@sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" {
340- t .Errorf ("unexpected ref %d: %#v" , i , image .Image .DockerImageReference )
322+ if image .Image == nil {
323+ t .Errorf ("unexpected nil image: %#v" , image )
324+ } else {
325+ // the image name is always the sha256, and size is calculated
326+ if image .Image .Name != busyboxDigest || image .Image .DockerImageMetadata .Size != 669049 {
327+ t .Errorf ("unexpected image %d: %#v (size %d)" , i , image .Image .Name , image .Image .DockerImageMetadata .Size )
328+ }
329+ // the most specific reference is returned
330+ if image .Image .DockerImageReference != "test@" + busyboxDigest {
331+ t .Errorf ("unexpected ref %d: %#v" , i , image .Image .DockerImageReference )
332+ }
341333 }
342334 if image .Tag != expectedTags [i ] {
343335 t .Errorf ("unexpected tag of status %d (%s != %s)" , i , image .Tag , expectedTags [i ])
@@ -392,14 +384,14 @@ func TestImport(t *testing.T) {
392384 name : "import repository with additional tags" ,
393385 retriever : & mockRetriever {
394386 repo : & mockRepository {
395- manifest : etcdManifestSchema1 ,
387+ manifest : busyboxManifestSchema2 ,
396388 tags : map [string ]string {
397- "v1" : "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ,
398- "other" : "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ,
399- "v2" : "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ,
400- "3" : "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ,
401- "3.1" : "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ,
402- "abc" : "sha256:958608f8ecc1dc62c93b6c610f3a834dae4220c9642e6e8b4e0f2b3ad7cbd238" ,
389+ "v1" : busyboxDigest ,
390+ "other" : busyboxDigest ,
391+ "v2" : busyboxDigest ,
392+ "3" : busyboxDigest ,
393+ "3.1" : busyboxDigest ,
394+ "abc" : busyboxDigest ,
403395 },
404396 getTagErr : fmt .Errorf ("no such tag" ),
405397 getByTagErr : fmt .Errorf ("no such manifest tag" ),
@@ -640,56 +632,6 @@ func TestImportFromMirror(t *testing.T) {
640632 })
641633}
642634
643- const etcdManifest = `
644- {
645- "schemaVersion": 1,
646- "tag": "latest",
647- "name": "coreos/etcd",
648- "architecture": "amd64",
649- "fsLayers": [
650- {
651- "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
652- },
653- {
654- "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
655- },
656- {
657- "blobSum": "sha256:2560187847cadddef806eaf244b7755af247a9dbabb90ca953dd2703cf423766"
658- },
659- {
660- "blobSum": "sha256:744b46d0ac8636c45870a03830d8d82c20b75fbfb9bc937d5e61005d23ad4cfe"
661- }
662- ],
663- "history": [
664- {
665- "v1Compatibility": "{\"id\":\"fe50ac14986497fa6b5d2cc24feb4a561d01767bc64413752c0988cb70b0b8b9\",\"parent\":\"a5a18474fa96a3c6e240bc88e41de2afd236520caf904356ad9d5f8d875c3481\",\"created\":\"2015-12-30T22:29:13.967754365Z\",\"container\":\"c8d0f1a274b5f52fa5beb280775ef07cf18ec0f95e5ae42fbad01157e2614d42\",\"container_config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"ExposedPorts\":{\"2379/tcp\":{},\"2380/tcp\":{},\"4001/tcp\":{},\"7001/tcp\":{}},\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) ENTRYPOINT \\u0026{[\\\"/etcd\\\"]}\"],\"Image\":\"a5a18474fa96a3c6e240bc88e41de2afd236520caf904356ad9d5f8d875c3481\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":[\"/etcd\"],\"OnBuild\":null,\"Labels\":{}},\"docker_version\":\"1.9.1\",\"config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"ExposedPorts\":{\"2379/tcp\":{},\"2380/tcp\":{},\"4001/tcp\":{},\"7001/tcp\":{}},\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":null,\"Image\":\"a5a18474fa96a3c6e240bc88e41de2afd236520caf904356ad9d5f8d875c3481\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":[\"/etcd\"],\"OnBuild\":null,\"Labels\":{}},\"architecture\":\"amd64\",\"os\":\"linux\"}"
666- },
667- {
668- "v1Compatibility": "{\"id\":\"a5a18474fa96a3c6e240bc88e41de2afd236520caf904356ad9d5f8d875c3481\",\"parent\":\"796d581500e960cc02095dcdeccf55db215b8e54c57e3a0b11392145ffe60cf6\",\"created\":\"2015-12-30T22:29:13.504159783Z\",\"container\":\"080708d544f85052a46fab72e701b4358c1b96cb4b805a5b2d66276fc2aaf85d\",\"container_config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"ExposedPorts\":{\"2379/tcp\":{},\"2380/tcp\":{},\"4001/tcp\":{},\"7001/tcp\":{}},\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) EXPOSE 2379/tcp 2380/tcp 4001/tcp 7001/tcp\"],\"Image\":\"796d581500e960cc02095dcdeccf55db215b8e54c57e3a0b11392145ffe60cf6\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"docker_version\":\"1.9.1\",\"config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"ExposedPorts\":{\"2379/tcp\":{},\"2380/tcp\":{},\"4001/tcp\":{},\"7001/tcp\":{}},\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":null,\"Image\":\"796d581500e960cc02095dcdeccf55db215b8e54c57e3a0b11392145ffe60cf6\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"architecture\":\"amd64\",\"os\":\"linux\"}"
669- },
670- {
671- "v1Compatibility": "{\"id\":\"796d581500e960cc02095dcdeccf55db215b8e54c57e3a0b11392145ffe60cf6\",\"parent\":\"309c960c7f875411ae2ee2bfb97b86eee5058f3dad77206dd0df4f97df8a77fa\",\"created\":\"2015-12-30T22:29:12.912813629Z\",\"container\":\"f28be899c9b8680d4cf8585e663ad20b35019db062526844e7cfef117ce9037f\",\"container_config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) ADD file:e330b1da49d993059975e46560b3bd360691498b0f2f6e00f39fc160cf8d4ec3 in /\"],\"Image\":\"309c960c7f875411ae2ee2bfb97b86eee5058f3dad77206dd0df4f97df8a77fa\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"docker_version\":\"1.9.1\",\"config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":null,\"Image\":\"309c960c7f875411ae2ee2bfb97b86eee5058f3dad77206dd0df4f97df8a77fa\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":{}},\"architecture\":\"amd64\",\"os\":\"linux\",\"Size\":13502144}"
672- },
673- {
674- "v1Compatibility": "{\"id\":\"309c960c7f875411ae2ee2bfb97b86eee5058f3dad77206dd0df4f97df8a77fa\",\"created\":\"2015-12-30T22:29:12.346834862Z\",\"container\":\"1b97abade59e4b5b935aede236980a54fb500cd9ee5bd4323c832c6d7b3ffc6e\",\"container_config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) ADD file:74912593c6783292c4520514f5cc9313acbd1da0f46edee0fdbed2a24a264d6f in /\"],\"Image\":\"\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"docker_version\":\"1.9.1\",\"config\":{\"Hostname\":\"1b97abade59e\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":null,\"Cmd\":null,\"Image\":\"\",\"Volumes\":null,\"WorkingDir\":\"\",\"Entrypoint\":null,\"OnBuild\":null,\"Labels\":null},\"architecture\":\"amd64\",\"os\":\"linux\",\"Size\":15141568}"
675- }
676- ],
677- "signatures": [
678- {
679- "header": {
680- "alg": "RS256",
681- "jwk": {
682- "e": "AQAB",
683- "kty": "RSA",
684- "n": "yB40ou1GMvIxYs1jhxWaeoDiw3oa0_Q2UJThUPtArvO0tRzaun9FnSphhOEHIGcezfq95jy-3MN-FIjmsWgbPHY8lVDS38fF75aCw6qkholwqjmMtUIgPNYoMrg0rLUE5RRyJ84-hKf9Fk7V3fItp1mvCTGKaS3ze-y5dTTrfbNGE7qG638Dla2Fuz-9CNgRQj0JH54o547WkKJC-pG-j0jTDr8lzsXhrZC7lJas4yc-vpt3D60iG4cW_mkdtIj52ZFEgHZ56sUj7AhnNVly0ZP9W1hmw4xEHDn9WLjlt7ivwARVeb2qzsNdguUitcI5hUQNwpOVZ_O3f1rUIL_kRw"
685- }
686- },
687- "protected": "eyJmb3JtYXRUYWlsIjogIkNuMCIsICJmb3JtYXRMZW5ndGgiOiA1OTI2LCAidGltZSI6ICIyMDE2LTAxLTAyVDAyOjAxOjMzWiJ9",
688- "signature": "DrQ43UWeit-thDoRGTCP0Gd2wL5K2ecyPhHo_au0FoXwuKODja0tfwHexB9ypvFWngk-ijXuwO02x3aRIZqkWpvKLxxzxwkrZnPSje4o_VrFU4z5zwmN8sJw52ODkQlW38PURIVksOxCrb0zRl87yTAAsUAJ_4UUPNltZSLnhwy-qPb2NQ8ghgsONcBxRQrhPFiWNkxDKZ3kjvzYyrXDxTcvwK3Kk_YagZ4rCOhH1B7mAdVSiSHIvvNV5grPshw_ipAoqL2iNMsxWxLjYZl9xSJQI2asaq3fvh8G8cZ7T-OahDUos_GyhnIj39C-9ouqdJqMUYFETqbzRCR6d36CpQ"
689- }
690- ]
691- }`
692-
693635const busyboxDigest = "sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6"
694636
695637const busyboxManifest = `{
0 commit comments