@@ -21,6 +21,7 @@ import (
21
21
"github.com/stretchr/testify/mock"
22
22
"github.com/stretchr/testify/require"
23
23
24
+ modelspec "github.com/CloudNativeAI/model-spec/specs-go/v1"
24
25
pkgPvd "github.com/dragonflyoss/nydus/contrib/nydusify/pkg/provider"
25
26
"github.com/dragonflyoss/nydus/contrib/nydusify/pkg/snapshotter/external/backend"
26
27
"github.com/opencontainers/go-digest"
@@ -151,6 +152,92 @@ func TestReadTarBlob(t *testing.T) {
151
152
})
152
153
}
153
154
155
+ func TestReadRawBlob (t * testing.T ) {
156
+ layer := ocispec.Descriptor {
157
+ MediaType : modelspec .MediaTypeModelDatasetRaw ,
158
+ Size : 100 ,
159
+ }
160
+ fm := modelspec.FileMetadata {
161
+ Name : "test.raw" ,
162
+ Mode : 0644 ,
163
+ Size : 100 ,
164
+ }
165
+ b , err := json .Marshal (fm )
166
+ require .NoError (t , err )
167
+ layer .Annotations = map [string ]string {
168
+ filePathKey : "test.raw" ,
169
+ modelspec .AnnotationFileMetadata : string (b ),
170
+ }
171
+ files , err := readRawBlob (layer )
172
+ assert .NoError (t , err )
173
+ assert .Equal (t , []fileInfo {{
174
+ name : "test.raw" ,
175
+ mode : 0644 ,
176
+ size : 100 ,
177
+ offset : 0 ,
178
+ }}, files )
179
+ }
180
+
181
+ func TestValidateTar (t * testing.T ) {
182
+ t .Run ("Normal case: valid tar file" , func (t * testing.T ) {
183
+ tmpfile , err := os .CreateTemp ("" , "testvalid.tar" )
184
+ require .NoError (t , err )
185
+ defer os .Remove (tmpfile .Name ())
186
+ tw := tar .NewWriter (tmpfile )
187
+ err = tw .WriteHeader (& tar.Header {
188
+ Name : "testfile.txt" ,
189
+ Mode : 0600 ,
190
+ Size : 13 ,
191
+ })
192
+ require .NoError (t , err )
193
+ _ , err = tw .Write ([]byte ("hello, world\n " ))
194
+ require .NoError (t , err )
195
+ err = tw .Close ()
196
+ require .NoError (t , err )
197
+ tmpfile .Close ()
198
+
199
+ f , err := os .Open (tmpfile .Name ())
200
+ require .NoError (t , err )
201
+ defer f .Close ()
202
+
203
+ valid , err := validateTarFile (f )
204
+ assert .NoError (t , err )
205
+ assert .True (t , valid )
206
+ })
207
+
208
+ t .Run ("Normal case: invalid tar file" , func (t * testing.T ) {
209
+ tmpfile , err := os .CreateTemp ("" , "testinvalid.tar" )
210
+ require .NoError (t , err )
211
+ defer os .Remove (tmpfile .Name ())
212
+ _ , err = tmpfile .Write ([]byte ("invalid tar content" ))
213
+ require .NoError (t , err )
214
+ tmpfile .Close ()
215
+
216
+ f , err := os .Open (tmpfile .Name ())
217
+ require .NoError (t , err )
218
+ defer f .Close ()
219
+
220
+ valid , err := validateTarFile (f )
221
+ assert .NoError (t , err )
222
+ assert .False (t , valid )
223
+ })
224
+
225
+ t .Run ("Empty tar file" , func (t * testing.T ) {
226
+ tmpfile , err := os .CreateTemp ("" , "testempty.tar" )
227
+ require .NoError (t , err )
228
+ os .Truncate (tmpfile .Name (), 0 )
229
+ tmpfile .Close ()
230
+
231
+ f , err := os .Open (tmpfile .Name ())
232
+ require .NoError (t , err )
233
+ defer f .Close ()
234
+
235
+ valid , err := validateTarFile (f )
236
+ assert .NoError (t , err )
237
+ assert .True (t , valid )
238
+ })
239
+ }
240
+
154
241
func TestGetOption (t * testing.T ) {
155
242
t .Run ("Valid srcRef" , func (t * testing.T ) {
156
243
srcRef := "host/namespace/image:tag"
@@ -190,7 +277,7 @@ func TestHandle(t *testing.T) {
190
277
191
278
handler .blobsMap = make (map [string ]blobInfo )
192
279
handler .blobsMap ["test_digest" ] = blobInfo {
193
- mediaType : ModelWeightMediaType ,
280
+ mediaType : modelspec . MediaTypeModelWeight ,
194
281
}
195
282
t .Run ("Open file failure" , func (t * testing.T ) {
196
283
file := backend.File {RelativePath : "test/test_digest/nonexistent-file" }
@@ -199,7 +286,7 @@ func TestHandle(t *testing.T) {
199
286
assert .Contains (t , err .Error (), "open tar file failed" )
200
287
})
201
288
202
- t .Run ("Normal" , func (t * testing.T ) {
289
+ t .Run ("Normal tar file " , func (t * testing.T ) {
203
290
os .MkdirAll ("/tmp/test/test_digest/" , 0755 )
204
291
testFile , err := os .CreateTemp ("/tmp/test/test_digest/" , "test_tar" )
205
292
assert .NoError (t , err )
@@ -222,6 +309,20 @@ func TestHandle(t *testing.T) {
222
309
assert .Equal (t , 1 , len (chunks ))
223
310
})
224
311
312
+ t .Run ("Normal raw file" , func (t * testing.T ) {
313
+ os .MkdirAll ("/tmp/test/test_digest/" , 0755 )
314
+ testFile , err := os .CreateTemp ("/tmp/test/test_digest/" , "test_raw" )
315
+ assert .NoError (t , err )
316
+ defer testFile .Close ()
317
+ defer os .RemoveAll (testFile .Name ())
318
+ testFile .Write ([]byte ("test" ))
319
+ testFilePath := strings .TrimPrefix (testFile .Name (), "/tmp/" )
320
+ file := backend.File {RelativePath : testFilePath }
321
+ chunks , err := handler .Handle (context .Background (), file )
322
+ assert .NoError (t , err )
323
+ assert .Equal (t , 1 , len (chunks ))
324
+ })
325
+
225
326
}
226
327
227
328
func TestModctlBackend (t * testing.T ) {
@@ -250,28 +351,28 @@ func TestConvertToBlobs(t *testing.T) {
250
351
Layers : []ocispec.Descriptor {
251
352
{
252
353
Digest : digest .Digest ("sha256:abc123" ),
253
- MediaType : ModelWeightMediaType ,
354
+ MediaType : modelspec . MediaTypeModelWeight ,
254
355
Size : 100 ,
255
356
},
256
357
},
257
358
}
258
359
actualBlobs1 := convertToBlobs (manifestWithColon )
259
360
assert .Equal (t , 1 , len (actualBlobs1 ))
260
- assert .Equal (t , ModelWeightMediaType , actualBlobs1 [0 ].Config .MediaType )
361
+ assert .Equal (t , modelspec . MediaTypeModelWeight , actualBlobs1 [0 ].Config .MediaType )
261
362
assert .Equal (t , "abc123" , actualBlobs1 [0 ].Config .Digest )
262
363
263
364
manifestWithoutColon := & ocispec.Manifest {
264
365
Layers : []ocispec.Descriptor {
265
366
{
266
367
Digest : digest .Digest ("abc123" ),
267
- MediaType : ModelDatasetMediaType ,
368
+ MediaType : modelspec . MediaTypeModelDataset ,
268
369
Size : 100 ,
269
370
},
270
371
},
271
372
}
272
373
actualBlobs2 := convertToBlobs (manifestWithoutColon )
273
374
assert .Equal (t , 1 , len (actualBlobs2 ))
274
- assert .Equal (t , ModelDatasetMediaType , actualBlobs2 [0 ].Config .MediaType )
375
+ assert .Equal (t , modelspec . MediaTypeModelDataset , actualBlobs2 [0 ].Config .MediaType )
275
376
assert .Equal (t , "abc123" , actualBlobs2 [0 ].Config .Digest )
276
377
}
277
378
@@ -297,7 +398,7 @@ func TestExtractManifest(t *testing.T) {
297
398
298
399
var m = ocispec.Manifest {
299
400
Config : ocispec.Descriptor {
300
- MediaType : ModelWeightMediaType ,
401
+ MediaType : modelspec . MediaTypeModelWeight ,
301
402
Digest : "sha256:abc1234" ,
302
403
Size : 10 ,
303
404
},
@@ -336,16 +437,16 @@ func TestSetBlobsMap(t *testing.T) {
336
437
func TestSetWeightChunkSize (t * testing.T ) {
337
438
setWeightChunkSize (0 )
338
439
expectedDefault := "64MiB"
339
- assert .Equal (t , expectedDefault , mediaTypeChunkSizeMap [ModelWeightMediaType ], "Weight media type should be set to default value" )
340
- assert .Equal (t , expectedDefault , mediaTypeChunkSizeMap [ModelDatasetMediaType ], "Dataset media type should be set to default value" )
440
+ assert .Equal (t , expectedDefault , mediaTypeChunkSizeMap [modelspec . MediaTypeModelWeight ], "Weight media type should be set to default value" )
441
+ assert .Equal (t , expectedDefault , mediaTypeChunkSizeMap [modelspec . MediaTypeModelDataset ], "Dataset media type should be set to default value" )
341
442
342
443
chunkSize := uint64 (16 * 1024 * 1024 )
343
444
setWeightChunkSize (chunkSize )
344
445
expectedNonDefault := humanize .IBytes (chunkSize )
345
446
expectedNonDefault = strings .ReplaceAll (expectedNonDefault , " " , "" )
346
447
347
- assert .Equal (t , expectedNonDefault , mediaTypeChunkSizeMap [ModelWeightMediaType ], "Weight media type should match the specified chunk size" )
348
- assert .Equal (t , expectedNonDefault , mediaTypeChunkSizeMap [ModelDatasetMediaType ], "Dataset media type should match the specified chunk size" )
448
+ assert .Equal (t , expectedNonDefault , mediaTypeChunkSizeMap [modelspec . MediaTypeModelWeight ], "Weight media type should match the specified chunk size" )
449
+ assert .Equal (t , expectedNonDefault , mediaTypeChunkSizeMap [modelspec . MediaTypeModelDataset ], "Dataset media type should match the specified chunk size" )
349
450
}
350
451
351
452
func TestNewHandler (t * testing.T ) {
0 commit comments