1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package partial_test
16
17 import (
18 "testing"
19
20 "github.com/google/go-cmp/cmp"
21 v1 "github.com/google/go-containerregistry/pkg/v1"
22 "github.com/google/go-containerregistry/pkg/v1/partial"
23 "github.com/google/go-containerregistry/pkg/v1/random"
24 "github.com/google/go-containerregistry/pkg/v1/types"
25 )
26
27 func TestRawConfigFile(t *testing.T) {
28 img, err := random.Image(1024, 1)
29 if err != nil {
30 t.Fatal(err)
31 }
32
33 part, err := partial.RawConfigFile(img)
34 if err != nil {
35 t.Fatal(err)
36 }
37
38 method, err := img.RawConfigFile()
39 if err != nil {
40 t.Fatal(err)
41 }
42
43 if string(part) != string(method) {
44 t.Errorf("mismatched config file: %s vs %s", part, method)
45 }
46 }
47
48 func TestDigest(t *testing.T) {
49 img, err := random.Image(1024, 1)
50 if err != nil {
51 t.Fatal(err)
52 }
53
54 part, err := partial.Digest(img)
55 if err != nil {
56 t.Fatal(err)
57 }
58
59 method, err := img.Digest()
60 if err != nil {
61 t.Fatal(err)
62 }
63
64 if part != method {
65 t.Errorf("mismatched digest: %s vs %s", part, method)
66 }
67 }
68
69 func TestManifest(t *testing.T) {
70 img, err := random.Image(1024, 1)
71 if err != nil {
72 t.Fatal(err)
73 }
74
75 part, err := partial.Manifest(img)
76 if err != nil {
77 t.Fatal(err)
78 }
79
80 method, err := img.Manifest()
81 if err != nil {
82 t.Fatal(err)
83 }
84
85 if diff := cmp.Diff(part, method); diff != "" {
86 t.Errorf("mismatched manifest: %v", diff)
87 }
88 }
89
90 func TestSize(t *testing.T) {
91 img, err := random.Image(1024, 1)
92 if err != nil {
93 t.Fatal(err)
94 }
95
96 part, err := partial.Size(img)
97 if err != nil {
98 t.Fatal(err)
99 }
100
101 method, err := img.Size()
102 if err != nil {
103 t.Fatal(err)
104 }
105
106 if diff := cmp.Diff(part, method); diff != "" {
107 t.Errorf("mismatched size: %v", diff)
108 }
109 }
110
111 func TestDiffIDToBlob(t *testing.T) {
112 img, err := random.Image(1024, 1)
113 if err != nil {
114 t.Fatal(err)
115 }
116 cf, err := img.ConfigFile()
117 if err != nil {
118 t.Fatal(err)
119 }
120 layers, err := img.Layers()
121 if err != nil {
122 t.Fatal(err)
123 }
124 want, err := layers[0].Digest()
125 if err != nil {
126 t.Fatal(err)
127 }
128 got, err := partial.DiffIDToBlob(img, cf.RootFS.DiffIDs[0])
129 if err != nil {
130 t.Fatal(err)
131 }
132
133 if diff := cmp.Diff(got, want); diff != "" {
134 t.Errorf("mismatched digest: %v", diff)
135 }
136
137 if _, err := partial.DiffIDToBlob(img, want); err == nil {
138 t.Errorf("expected err, got nil")
139 }
140 }
141
142 func TestBlobToDiffID(t *testing.T) {
143 img, err := random.Image(1024, 1)
144 if err != nil {
145 t.Fatal(err)
146 }
147 cf, err := img.ConfigFile()
148 if err != nil {
149 t.Fatal(err)
150 }
151 layers, err := img.Layers()
152 if err != nil {
153 t.Fatal(err)
154 }
155 d, err := layers[0].Digest()
156 if err != nil {
157 t.Fatal(err)
158 }
159 want := cf.RootFS.DiffIDs[0]
160 got, err := partial.BlobToDiffID(img, d)
161 if err != nil {
162 t.Fatal(err)
163 }
164
165 if diff := cmp.Diff(got, want); diff != "" {
166 t.Errorf("mismatched digest: %v", diff)
167 }
168
169 if _, err := partial.BlobToDiffID(img, want); err == nil {
170 t.Errorf("expected err, got nil")
171 }
172 }
173
174 func TestBlobSize(t *testing.T) {
175 img, err := random.Image(1024, 1)
176 if err != nil {
177 t.Fatal(err)
178 }
179 m, err := img.Manifest()
180 if err != nil {
181 t.Fatal(err)
182 }
183 want := m.Layers[0].Size
184 got, err := partial.BlobSize(img, m.Layers[0].Digest)
185 if err != nil {
186 t.Fatal(err)
187 }
188
189 if diff := cmp.Diff(got, want); diff != "" {
190 t.Errorf("mismatched blob size: %v", diff)
191 }
192
193 if _, err := partial.BlobSize(img, v1.Hash{}); err == nil {
194 t.Errorf("expected err, got nil")
195 }
196 }
197
198 type fastpathLayer struct {
199 v1.Layer
200 }
201
202 func (l *fastpathLayer) UncompressedSize() (int64, error) {
203 return 100, nil
204 }
205
206 func (l *fastpathLayer) Exists() (bool, error) {
207 return true, nil
208 }
209
210 func TestUncompressedSize(t *testing.T) {
211 randLayer, err := random.Layer(1024, types.DockerLayer)
212 if err != nil {
213 t.Fatal(err)
214 }
215 fpl := &fastpathLayer{randLayer}
216 us, err := partial.UncompressedSize(fpl)
217 if err != nil {
218 t.Fatal(err)
219 }
220 if got, want := us, int64(100); got != want {
221 t.Errorf("UncompressedSize() = %d != %d", got, want)
222 }
223 }
224
225 func TestExists(t *testing.T) {
226 randLayer, err := random.Layer(1024, types.DockerLayer)
227 if err != nil {
228 t.Fatal(err)
229 }
230 fpl := &fastpathLayer{randLayer}
231 ok, err := partial.Exists(fpl)
232 if err != nil {
233 t.Fatal(err)
234 }
235 if got, want := ok, true; got != want {
236 t.Errorf("Exists() = %t != %t", got, want)
237 }
238
239 ok, err = partial.Exists(randLayer)
240 if err != nil {
241 t.Fatal(err)
242 }
243 if got, want := ok, true; got != want {
244 t.Errorf("Exists() = %t != %t", got, want)
245 }
246 }
247
View as plain text