Skip to content

Commit f0323b2

Browse files
committed
tarfs: add unit test cases for tarfs
Add unit test cases for tarfs. Signed-off-by: Jiang Liu <[email protected]>
1 parent 4060f01 commit f0323b2

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

pkg/tarfs/tarfs_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
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+
// TODO: add unit test for MergeLayers, ExportBlockData, MountErofs, RemountErofs, UmountTarErofs, DetachLayer, RecoverSnapshoInfo, RecoverRafsInstance
27+
28+
func TestPrepareLayer(t *testing.T) {
29+
manager := NewManager(true, true, "/tmp/tarfs", "/usr/bin/nydus-image", 4)
30+
manifestDigest, err := digest.Parse(BusyboxManifestDigest)
31+
assert.Assert(t, err)
32+
layerDigest, err := digest.Parse(BusyboxLayerDigest)
33+
assert.Assert(t, err)
34+
35+
err = manager.PrepareLayer("snapshot1", BusyboxRef, manifestDigest, layerDigest, t.TempDir())
36+
assert.Assert(t, err)
37+
38+
snapshot, err := manager.waitLayerReady("snapshot1", true)
39+
assert.Assert(t, err)
40+
assert.Equal(t, snapshot.blobID, "ee780d08a5b4de5192a526d422987f451d9a065e6da42aefe8c3b20023a250c7")
41+
42+
err = manager.PrepareLayer("snapshot1", BusyboxRef, manifestDigest, layerDigest, t.TempDir())
43+
assert.Assert(t, err != nil)
44+
}
45+
46+
func TestCheckTarfsHintAnnotation(t *testing.T) {
47+
manager := NewManager(true, true, "/tmp/tarfs", "/usr/bin/nydus-image", 4)
48+
ctx := context.Background()
49+
hint, err := manager.CheckTarfsHintAnnotation(ctx, BusyboxRef, BusyboxManifestDigest)
50+
assert.Assert(t, err)
51+
assert.Equal(t, hint, false)
52+
}
53+
54+
func TestGetConcurrentLimiter(t *testing.T) {
55+
manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4)
56+
limiter := manager.GetConcurrentLimiter("busybox")
57+
assert.Assert(t, limiter != nil)
58+
assert.Equal(t, manager.GetConcurrentLimiter("busybox"), limiter)
59+
60+
}
61+
62+
func TestCopyTarfsAnnotations(t *testing.T) {
63+
manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4)
64+
rafs := &rafs.Rafs{
65+
Annotations: make(map[string]string),
66+
}
67+
68+
annotations := map[string]string{}
69+
annotations[label.CRIImageRef] = "cri_image_ref"
70+
annotations[label.CRILayerDigest] = "cri_layer_digest"
71+
annotations[label.CRIManifestDigest] = "cri_manigest_digest"
72+
annotations[label.NydusTarfsLayer] = "nydus_tarfs_layer"
73+
annotations[label.NydusImageBlockInfo] = "nydus_image_block_info"
74+
annotations[label.NydusLayerBlockInfo] = "nydus_layer_block_info"
75+
annotations["unsupported_key"] = "error"
76+
77+
manager.copyTarfsAnnotations(annotations, rafs)
78+
assert.Equal(t, len(rafs.Annotations), 6)
79+
assert.Equal(t, rafs.Annotations[label.CRIImageRef], annotations[label.CRIImageRef])
80+
assert.Equal(t, rafs.Annotations[label.CRILayerDigest], annotations[label.CRILayerDigest])
81+
}
82+
83+
func TestTarfsFilePath(t *testing.T) {
84+
manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4)
85+
86+
assert.Equal(t, manager.layerTarFilePath("blob1"), "/tmp/tarfs/blob1")
87+
assert.Equal(t, manager.layerDiskFilePath("blob1"), "/tmp/tarfs/blob1.layer.disk")
88+
assert.Equal(t, manager.ImageDiskFilePath("blob1"), "/tmp/tarfs/blob1.image.disk")
89+
assert.Equal(t, manager.layerMetaFilePath("/tarfs/fs"), "/tarfs/fs/image/layer.boot")
90+
assert.Equal(t, manager.imageMetaFilePath("/tarfs/fs"), "/tarfs/fs/image/image.boot")
91+
}
92+
93+
func TestTarfsStatusString(t *testing.T) {
94+
assert.Equal(t, tarfsStatusString(TarfsStatusReady), "Ready")
95+
assert.Equal(t, tarfsStatusString(TarfsStatusPrepare), "Prepare")
96+
assert.Equal(t, tarfsStatusString(TarfsStatusFailed), "Failed")
97+
assert.Equal(t, tarfsStatusString(4), "Unknown")
98+
}
99+
100+
func TestAttachBlob(t *testing.T) {
101+
testutil.RequiresRoot(t)
102+
103+
manager := NewManager(false, false, "/tmp/tarfs", "/usr/bin/nydus-image", 4)
104+
blobFile := createTempFile(t)
105+
loopdev, err := manager.attachLoopdev(blobFile)
106+
assert.Assert(t, err)
107+
err = deleteLoop(loopdev)
108+
assert.Assert(t, err)
109+
err = deleteLoop(loopdev)
110+
assert.Assert(t, err != nil)
111+
}

0 commit comments

Comments
 (0)