@@ -162,3 +162,147 @@ var _ = Describe("ChaincodePackageParser", func() {
162
162
})
163
163
})
164
164
})
165
+
166
+ var _ = Describe ("ChaincodePackageLocator" , func () {
167
+ var (
168
+ locator * persistence.ChaincodePackageLocator
169
+ )
170
+
171
+ BeforeEach (func () {
172
+ locator = & persistence.ChaincodePackageLocator {
173
+ ChaincodeDir : "/fake-dir" ,
174
+ }
175
+ })
176
+
177
+ Describe ("ChaincodePackageStreamer" , func () {
178
+ It ("creates a ChaincodePackageStreamer for the given packageID" , func () {
179
+ streamer := locator .ChaincodePackageStreamer ("test-package" )
180
+ Expect (streamer ).To (Equal (& persistence.ChaincodePackageStreamer {
181
+ PackagePath : "/fake-dir/test-package.bin" ,
182
+ }))
183
+ })
184
+ })
185
+ })
186
+
187
+ var _ = Describe ("ChaincodePackageStreamer" , func () {
188
+ var (
189
+ streamer * persistence.ChaincodePackageStreamer
190
+ )
191
+
192
+ BeforeEach (func () {
193
+ streamer = & persistence.ChaincodePackageStreamer {
194
+ PackagePath : "testdata/good-package.tar.gz" ,
195
+ }
196
+ })
197
+
198
+ Describe ("Metadata" , func () {
199
+ It ("reads the metadata from the package" , func () {
200
+ md , err := streamer .Metadata ()
201
+ Expect (err ).NotTo (HaveOccurred ())
202
+ Expect (md ).To (Equal (& persistence.ChaincodePackageMetadata {
203
+ Type : "Fake-Type" ,
204
+ Path : "Fake-Path" ,
205
+ Label : "Real-Label" ,
206
+ }))
207
+ })
208
+
209
+ Context ("when the metadata file cannot be found" , func () {
210
+ BeforeEach (func () {
211
+ streamer .PackagePath = "testdata/missing-metadata.tar.gz"
212
+ })
213
+
214
+ It ("wraps and returns the error" , func () {
215
+ _ , err := streamer .Metadata ()
216
+ Expect (err ).To (MatchError ("could not get metadata file: did not find file 'metadata.json' in package" ))
217
+ })
218
+ })
219
+
220
+ Context ("when the metadata file cannot be parsed" , func () {
221
+ BeforeEach (func () {
222
+ streamer .PackagePath = "testdata/bad-metadata.tar.gz"
223
+ })
224
+
225
+ It ("wraps and returns the error" , func () {
226
+ _ , err := streamer .Metadata ()
227
+ Expect (err ).To (MatchError ("could not parse metadata file: invalid character '\\ n' in string literal" ))
228
+ })
229
+ })
230
+ })
231
+
232
+ Describe ("Code" , func () {
233
+ It ("reads a file from the package" , func () {
234
+ code , err := streamer .Code ()
235
+ Expect (err ).NotTo (HaveOccurred ())
236
+ codeBytes , err := ioutil .ReadAll (code )
237
+ code .Close ()
238
+ Expect (err ).NotTo (HaveOccurred ())
239
+ Expect (codeBytes ).To (Equal ([]byte ("package" )))
240
+ })
241
+
242
+ Context ("when the file cannot be found because the code is not a regular file" , func () {
243
+ BeforeEach (func () {
244
+ streamer .PackagePath = "testdata/missing-codepackage.tar.gz"
245
+ })
246
+
247
+ It ("wraps and returns the error" , func () {
248
+ _ , err := streamer .Code ()
249
+ Expect (err ).To (MatchError ("could not get code package: did not find file 'code.tar.gz' in package" ))
250
+ })
251
+ })
252
+ })
253
+
254
+ Describe ("File" , func () {
255
+ It ("reads a file from the package" , func () {
256
+ code , err := streamer .File ("code.tar.gz" )
257
+ Expect (err ).NotTo (HaveOccurred ())
258
+ codeBytes , err := ioutil .ReadAll (code )
259
+ code .Close ()
260
+ Expect (err ).NotTo (HaveOccurred ())
261
+ Expect (codeBytes ).To (Equal ([]byte ("package" )))
262
+ })
263
+
264
+ Context ("when the file is not a regular file" , func () {
265
+ BeforeEach (func () {
266
+ streamer .PackagePath = "testdata/non-regular-file.tar.gz"
267
+ })
268
+
269
+ It ("wraps and returns the error" , func () {
270
+ _ , err := streamer .File ("code.tar.gz" )
271
+ Expect (err ).To (MatchError ("tar entry code.tar.gz is not a regular file, type 50" ))
272
+ })
273
+ })
274
+
275
+ Context ("when the code cannot be found because the archive is corrupt" , func () {
276
+ BeforeEach (func () {
277
+ streamer .PackagePath = "testdata/bad-archive.tar.gz"
278
+ })
279
+
280
+ It ("wraps and returns the error" , func () {
281
+ _ , err := streamer .File ("code.tar.gz" )
282
+ Expect (err ).To (MatchError ("could not open chaincode package at 'testdata/bad-archive.tar.gz': open testdata/bad-archive.tar.gz: no such file or directory" ))
283
+ })
284
+ })
285
+
286
+ Context ("when the code cannot be found because the header is corrupt" , func () {
287
+ BeforeEach (func () {
288
+ streamer .PackagePath = "testdata/corrupted-header.tar.gz"
289
+ })
290
+
291
+ It ("wraps and returns the error" , func () {
292
+ _ , err := streamer .File ("code.tar.gz" )
293
+ Expect (err ).To (MatchError ("error inspecting next tar header: flate: corrupt input before offset 86" ))
294
+ })
295
+ })
296
+
297
+ Context ("when the code cannot be found because the gzip is corrupt" , func () {
298
+ BeforeEach (func () {
299
+ streamer .PackagePath = "testdata/corrupted-gzip.tar.gz"
300
+ })
301
+
302
+ It ("wraps and returns the error" , func () {
303
+ _ , err := streamer .File ("code.tar.gz" )
304
+ Expect (err ).To (MatchError ("error reading as gzip stream: unexpected EOF" ))
305
+ })
306
+ })
307
+ })
308
+ })
0 commit comments