|  | 
|  | 1 | +/* | 
|  | 2 | + * Copyright (c) 2023. Nydus Developers. All rights reserved. | 
|  | 3 | + * | 
|  | 4 | + * SPDX-License-Identifier: Apache-2.0 | 
|  | 5 | + */ | 
|  | 6 | + | 
|  | 7 | +package tarfs | 
|  | 8 | + | 
|  | 9 | +import ( | 
|  | 10 | +	"context" | 
|  | 11 | +	"testing" | 
|  | 12 | + | 
|  | 13 | +	"github.com/containerd/continuity/testutil" | 
|  | 14 | +	"github.com/containerd/nydus-snapshotter/pkg/label" | 
|  | 15 | +	"github.com/containerd/nydus-snapshotter/pkg/rafs" | 
|  | 16 | +	"github.com/opencontainers/go-digest" | 
|  | 17 | +	"gotest.tools/assert" | 
|  | 18 | +) | 
|  | 19 | + | 
|  | 20 | +const ( | 
|  | 21 | +	BusyboxRef            = "quay.io/quay/busybox@sha256:92f3298bf80a1ba949140d77987f5de081f010337880cd771f7e7fc928f8c74d" | 
|  | 22 | +	BusyboxManifestDigest = "sha256:92f3298bf80a1ba949140d77987f5de081f010337880cd771f7e7fc928f8c74d" | 
|  | 23 | +	BusyboxLayerDigest    = "sha256:ee780d08a5b4de5192a526d422987f451d9a065e6da42aefe8c3b20023a250c7" | 
|  | 24 | +) | 
|  | 25 | + | 
|  | 26 | +func TestPrepareLayer(t *testing.T) { | 
|  | 27 | +	manager := NewManager(true, true, "/tmp/tarfs", "/usr/bin/nydus-image", 4) | 
|  | 28 | +	manifestDigest, err := digest.Parse(BusyboxManifestDigest) | 
|  | 29 | +	assert.Assert(t, err) | 
|  | 30 | +	layerDigest, err := digest.Parse(BusyboxLayerDigest) | 
|  | 31 | +	assert.Assert(t, err) | 
|  | 32 | + | 
|  | 33 | +	err = manager.PrepareLayer("snapshot1", BusyboxRef, manifestDigest, layerDigest, t.TempDir()) | 
|  | 34 | +	assert.Assert(t, err) | 
|  | 35 | + | 
|  | 36 | +	// snapshot, err := manager.waitLayerReady("snapshot1", true) | 
|  | 37 | +	// assert.Assert(t, err) | 
|  | 38 | +	// assert.Equal(t, snapshot.blobID, "ee780d08a5b4de5192a526d422987f451d9a065e6da42aefe8c3b20023a250c7") | 
|  | 39 | + | 
|  | 40 | +	err = manager.PrepareLayer("snapshot1", BusyboxRef, manifestDigest, layerDigest, t.TempDir()) | 
|  | 41 | +	assert.Assert(t, err != nil) | 
|  | 42 | +} | 
|  | 43 | + | 
|  | 44 | +func TestCheckTarfsHintAnnotation(t *testing.T) { | 
|  | 45 | +	manager := NewManager(true, true, "/tmp/tarfs", "/usr/bin/nydus-image", 4) | 
|  | 46 | +	ctx := context.Background() | 
|  | 47 | +	hint, err := manager.CheckTarfsHintAnnotation(ctx, BusyboxRef, BusyboxManifestDigest) | 
|  | 48 | +	assert.Assert(t, err) | 
|  | 49 | +	assert.Equal(t, hint, false) | 
|  | 50 | +} | 
|  | 51 | + | 
|  | 52 | +func TestGetConcurrentLimiter(t *testing.T) { | 
|  | 53 | +	manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4) | 
|  | 54 | +	limiter := manager.GetConcurrentLimiter("busybox") | 
|  | 55 | +	assert.Assert(t, limiter != nil) | 
|  | 56 | +	assert.Equal(t, manager.GetConcurrentLimiter("busybox"), limiter) | 
|  | 57 | + | 
|  | 58 | +} | 
|  | 59 | + | 
|  | 60 | +func TestCopyTarfsAnnotations(t *testing.T) { | 
|  | 61 | +	manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4) | 
|  | 62 | +	rafs := &rafs.Rafs{ | 
|  | 63 | +		Annotations: make(map[string]string), | 
|  | 64 | +	} | 
|  | 65 | + | 
|  | 66 | +	annotations := map[string]string{} | 
|  | 67 | +	annotations[label.CRIImageRef] = "cri_image_ref" | 
|  | 68 | +	annotations[label.CRILayerDigest] = "cri_layer_digest" | 
|  | 69 | +	annotations[label.CRIManifestDigest] = "cri_manigest_digest" | 
|  | 70 | +	annotations[label.NydusTarfsLayer] = "nydus_tarfs_layer" | 
|  | 71 | +	annotations[label.NydusImageBlockInfo] = "nydus_image_block_info" | 
|  | 72 | +	annotations[label.NydusLayerBlockInfo] = "nydus_layer_block_info" | 
|  | 73 | +	annotations["unsupported_key"] = "error" | 
|  | 74 | + | 
|  | 75 | +	manager.copyTarfsAnnotations(annotations, rafs) | 
|  | 76 | +	assert.Equal(t, len(rafs.Annotations), 6) | 
|  | 77 | +	assert.Equal(t, rafs.Annotations[label.CRIImageRef], annotations[label.CRIImageRef]) | 
|  | 78 | +	assert.Equal(t, rafs.Annotations[label.CRILayerDigest], annotations[label.CRILayerDigest]) | 
|  | 79 | +} | 
|  | 80 | + | 
|  | 81 | +func TestTarfsFilePath(t *testing.T) { | 
|  | 82 | +	manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4) | 
|  | 83 | + | 
|  | 84 | +	assert.Equal(t, manager.layerTarFilePath("blob1"), "/tmp/tarfs/blob1") | 
|  | 85 | +	assert.Equal(t, manager.layerDiskFilePath("blob1"), "/tmp/tarfs/blob1.layer.disk") | 
|  | 86 | +	assert.Equal(t, manager.ImageDiskFilePath("blob1"), "/tmp/tarfs/blob1.image.disk") | 
|  | 87 | +	assert.Equal(t, manager.layerMetaFilePath("/tarfs/fs"), "/tarfs/fs/image/layer.boot") | 
|  | 88 | +	assert.Equal(t, manager.imageMetaFilePath("/tarfs/fs"), "/tarfs/fs/image/image.boot") | 
|  | 89 | +} | 
|  | 90 | + | 
|  | 91 | +func TestTarfsStatusString(t *testing.T) { | 
|  | 92 | +	assert.Equal(t, tarfsStatusString(TarfsStatusReady), "Ready") | 
|  | 93 | +	assert.Equal(t, tarfsStatusString(TarfsStatusPrepare), "Prepare") | 
|  | 94 | +	assert.Equal(t, tarfsStatusString(TarfsStatusFailed), "Failed") | 
|  | 95 | +	assert.Equal(t, tarfsStatusString(4), "Unknown") | 
|  | 96 | +} | 
|  | 97 | + | 
|  | 98 | +func TestAttachBlob(t *testing.T) { | 
|  | 99 | +	testutil.RequiresRoot(t) | 
|  | 100 | + | 
|  | 101 | +	manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4) | 
|  | 102 | +	blobFile := createTempFile(t) | 
|  | 103 | +	loopdev, err := manager.attachLoopdev(blobFile) | 
|  | 104 | +	assert.Assert(t, err) | 
|  | 105 | +	err = deleteLoop(loopdev) | 
|  | 106 | +	assert.Assert(t, err) | 
|  | 107 | +	err = deleteLoop(loopdev) | 
|  | 108 | +	assert.Assert(t, err != nil) | 
|  | 109 | +} | 
0 commit comments