...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package remote
16
17 import (
18 "fmt"
19 "net/http/httptest"
20 "net/url"
21 "testing"
22
23 "github.com/google/go-containerregistry/internal/compare"
24 "github.com/google/go-containerregistry/pkg/name"
25 "github.com/google/go-containerregistry/pkg/registry"
26 "github.com/google/go-containerregistry/pkg/v1/empty"
27 "github.com/google/go-containerregistry/pkg/v1/mutate"
28 "github.com/google/go-containerregistry/pkg/v1/partial"
29 "github.com/google/go-containerregistry/pkg/v1/random"
30 "github.com/google/go-containerregistry/pkg/v1/types"
31 "github.com/google/go-containerregistry/pkg/v1/validate"
32 )
33
34 func TestRemoteLayer(t *testing.T) {
35 layer, err := random.Layer(1024, types.DockerLayer)
36 if err != nil {
37 t.Fatal(err)
38 }
39 digest, err := layer.Digest()
40 if err != nil {
41 t.Fatal(err)
42 }
43
44
45
46 s := httptest.NewServer(registry.New())
47 defer s.Close()
48 t.Log(s.URL)
49 u, err := url.Parse(s.URL)
50 if err != nil {
51 t.Fatal(err)
52 }
53 t.Log(u)
54 dst := fmt.Sprintf("%s/some/path@%s", u.Host, digest)
55 t.Log(dst)
56 ref, err := name.NewDigest(dst)
57 if err != nil {
58 t.Fatal(err)
59 }
60
61 t.Log(ref)
62 if err := WriteLayer(ref.Context(), layer); err != nil {
63 t.Fatalf("failed to WriteLayer: %v", err)
64 }
65
66 got, err := Layer(ref)
67 if err != nil {
68 t.Fatal(err)
69 }
70
71 if _, err := got.MediaType(); err != nil {
72 t.Errorf("reading MediaType: %v", err)
73 }
74
75 if err := compare.Layers(got, layer); err != nil {
76 t.Errorf("compare.Layers: %v", err)
77 }
78 if err := validate.Layer(got); err != nil {
79 t.Errorf("validate.Layer: %v", err)
80 }
81
82 if ok, err := partial.Exists(got); err != nil {
83 t.Fatal(err)
84 } else if got, want := ok, true; got != want {
85 t.Errorf("Exists() = %t != %t", got, want)
86 }
87 }
88
89 func TestRemoteLayerDescriptor(t *testing.T) {
90 layer, err := random.Layer(1024, types.DockerLayer)
91 if err != nil {
92 t.Fatal(err)
93 }
94 image, err := mutate.Append(empty.Image, mutate.Addendum{
95 Layer: layer,
96 URLs: []string{"example.com"},
97 })
98 if err != nil {
99 t.Fatal(err)
100 }
101
102
103
104 s := httptest.NewServer(registry.New())
105 defer s.Close()
106 u, err := url.Parse(s.URL)
107 if err != nil {
108 t.Fatal(err)
109 }
110
111 dst := fmt.Sprintf("%s/some/path:tag", u.Host)
112 ref, err := name.ParseReference(dst)
113 if err != nil {
114 t.Fatal(err)
115 }
116
117 if err := Write(ref, image); err != nil {
118 t.Fatalf("failed to WriteLayer: %v", err)
119 }
120
121 pulled, err := Image(ref)
122 if err != nil {
123 t.Fatal(err)
124 }
125
126 layers, err := pulled.Layers()
127 if err != nil {
128 t.Fatal(err)
129 }
130
131 desc, err := partial.Descriptor(layers[0])
132 if err != nil {
133 t.Fatal(err)
134 }
135
136 if len(desc.URLs) != 1 {
137 t.Fatalf("expected url for layer[0]")
138 }
139
140 if got, want := desc.URLs[0], "example.com"; got != want {
141 t.Errorf("layer[0].urls[0] = %s != %s", got, want)
142 }
143 if ok, err := partial.Exists(layers[0]); err != nil {
144 t.Fatal(err)
145 } else if got, want := ok, true; got != want {
146 t.Errorf("Exists() = %t != %t", got, want)
147 }
148 }
149
View as plain text