@@ -19,32 +19,37 @@ import (
1919 "bytes"
2020 "context"
2121 "encoding/json"
22+ "github.com/opencontainers/go-digest"
23+ "oras.land/oras-go/v2/content/memory"
2224 "reflect"
2325 "testing"
2426
25- "github.com/opencontainers/go-digest"
2627 ocispec "github.com/opencontainers/image-spec/specs-go/v1"
2728 "oras.land/oras-go/v2/content"
28- "oras.land/oras-go/v2/content/memory"
2929 "oras.land/oras/internal/docker"
3030)
3131
32- type fetcher struct {
32+ type contentFetcher struct {
3333 content.Fetcher
3434}
3535
36- func TestSuccessors (t * testing.T ) {
36+ func newTestFetcher (t * testing.T ) ( subject , config , ociImage , dockerImage , index ocispec. Descriptor , fetcher content. Fetcher ) {
3737 var blobs [][]byte
38- var descs []ocispec.Descriptor
39- appendBlob := func (mediaType string , blob []byte ) {
38+ ctx := context .Background ()
39+ memoryStorage := memory .New ()
40+ appendBlob := func (mediaType string , blob []byte ) ocispec.Descriptor {
4041 blobs = append (blobs , blob )
41- descs = append ( descs , ocispec.Descriptor {
42+ desc := ocispec.Descriptor {
4243 MediaType : mediaType ,
4344 Digest : digest .FromBytes (blob ),
4445 Size : int64 (len (blob )),
45- })
46+ }
47+ if err := memoryStorage .Push (ctx , desc , bytes .NewReader (blob )); err != nil {
48+ t .Errorf ("Error pushing %v\n " , err )
49+ }
50+ return desc
4651 }
47- generateImage := func (subject * ocispec.Descriptor , mediaType string , config ocispec.Descriptor , layers ... ocispec.Descriptor ) {
52+ generateImage := func (subject * ocispec.Descriptor , mediaType string , config ocispec.Descriptor , layers ... ocispec.Descriptor ) ocispec. Descriptor {
4853 manifest := ocispec.Manifest {
4954 MediaType : mediaType ,
5055 Subject : subject ,
@@ -55,40 +60,32 @@ func TestSuccessors(t *testing.T) {
5560 if err != nil {
5661 t .Fatal (err )
5762 }
58- appendBlob (mediaType , manifestJSON )
63+ return appendBlob (mediaType , manifestJSON )
5964 }
60- generateIndex := func (manifests ... ocispec.Descriptor ) {
65+ generateIndex := func (manifests ... ocispec.Descriptor ) ocispec. Descriptor {
6166 index := ocispec.Index {
6267 Manifests : manifests ,
6368 }
64- manifestJSON , err := json .Marshal (index )
69+ indexJSON , err := json .Marshal (index )
6570 if err != nil {
6671 t .Fatal (err )
6772 }
68- appendBlob (ocispec .MediaTypeImageIndex , manifestJSON )
73+ return appendBlob (ocispec .MediaTypeImageIndex , indexJSON )
6974 }
70- const (
71- subject = iota
72- config
73- ociImage
74- dockerImage
75- index
76- )
77- appendBlob (ocispec .MediaTypeImageLayer , []byte ("blob" ))
75+
76+ subject = appendBlob (ocispec .MediaTypeImageLayer , []byte ("blob" ))
7877 imageType := "test.image"
79- appendBlob (imageType , []byte ("config content" ))
80- generateImage (& descs [subject ], ocispec .MediaTypeImageManifest , descs [config ])
81- generateImage (& descs [subject ], docker .MediaTypeManifest , descs [config ])
82- generateIndex (descs [subject ])
83- memory := memory .New ()
84- ctx := context .Background ()
85- for i := range descs {
86- if err := memory .Push (ctx , descs [i ], bytes .NewReader (blobs [i ])); err != nil {
87- t .Errorf ("Error pushing %v\n " , err )
88- }
89- }
90- fetcher := & fetcher {Fetcher : memory }
78+ config = appendBlob (imageType , []byte ("config content" ))
79+ ociImage = generateImage (& subject , ocispec .MediaTypeImageManifest , config )
80+ dockerImage = generateImage (& subject , docker .MediaTypeManifest , config )
81+ index = generateIndex (subject )
9182
83+ return subject , config , ociImage , dockerImage , index , & contentFetcher {Fetcher : memoryStorage }
84+ }
85+
86+ func TestSuccessors (t * testing.T ) {
87+ subject , config , ociImage , dockerImage , index , fetcher := newTestFetcher (t )
88+ ctx := context .Background ()
9289 type args struct {
9390 ctx context.Context
9491 fetcher content.Fetcher
@@ -104,9 +101,9 @@ func TestSuccessors(t *testing.T) {
104101 }{
105102 {"should failed to get non-existent OCI image" , args {ctx , fetcher , ocispec.Descriptor {MediaType : ocispec .MediaTypeImageManifest }}, nil , nil , nil , true },
106103 {"should failed to get non-existent docker image" , args {ctx , fetcher , ocispec.Descriptor {MediaType : docker .MediaTypeManifest }}, nil , nil , nil , true },
107- {"should get success of a docker image" , args {ctx , fetcher , descs [ dockerImage ] }, nil , & descs [ subject ] , & descs [ config ] , false },
108- {"should get success of an OCI image" , args {ctx , fetcher , descs [ ociImage ] }, nil , & descs [ subject ] , & descs [ config ] , false },
109- {"should get success of an index" , args {ctx , fetcher , descs [ index ] }, []ocispec.Descriptor {descs [ subject ] }, nil , nil , false },
104+ {"should get success of a docker image" , args {ctx , fetcher , dockerImage }, nil , & subject , & config , false },
105+ {"should get success of an OCI image" , args {ctx , fetcher , ociImage }, nil , & subject , & config , false },
106+ {"should get success of an index" , args {ctx , fetcher , index }, []ocispec.Descriptor {subject }, nil , nil , false },
110107 }
111108 for _ , tt := range tests {
112109 t .Run (tt .name , func (t * testing.T ) {
0 commit comments