Skip to content

Commit bfc11e7

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 bfc11e7

File tree

2 files changed

+119
-3
lines changed

2 files changed

+119
-3
lines changed

pkg/tarfs/tarfs.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ func (t *Manager) fetchImageConfig(ctx context.Context, remote *remote.Remote, r
179179
return config, nil
180180
}
181181

182+
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
182183
func (t *Manager) getBlobDiffID(ctx context.Context, remote *remote.Remote, ref string, manifestDigest, layerDigest digest.Digest) (digest.Digest, error) {
183184
if diffid, ok := t.diffIDCache.Get(layerDigest); ok {
184185
return diffid.(digest.Digest), nil
@@ -444,6 +445,8 @@ func (t *Manager) retryPrepareLayer(snapshotID, upperDirPath string, labels map[
444445
return nil
445446
}
446447

448+
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
449+
447450
func (t *Manager) PrepareLayer(snapshotID, ref string, manifestDigest, layerDigest digest.Digest, upperDirPath string) error {
448451
t.mutex.Lock()
449452
if _, ok := t.snapshotMap[snapshotID]; ok {
@@ -465,6 +468,7 @@ func (t *Manager) PrepareLayer(snapshotID, ref string, manifestDigest, layerDige
465468
return t.blobProcess(ctx, snapshotID, ref, manifestDigest, layerDigest, upperDirPath, false)
466469
}
467470

471+
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
468472
func (t *Manager) MergeLayers(ctx context.Context, s storage.Snapshot, storageLocater func(string) string,
469473
infoGetter func(ctx context.Context, id string) (string, snapshots.Info, error)) error {
470474
mergedBootstrap := t.imageMetaFilePath(storageLocater(s.ParentIDs[0]))
@@ -939,6 +943,8 @@ func (t *Manager) RecoverRafsInstance(r *rafs.Rafs) error {
939943
return nil
940944
}
941945

946+
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
947+
942948
func (t *Manager) getSnapshotStatusWithLock(snapshotID string) (*snapshotStatus, error) {
943949
t.mutex.Lock()
944950
defer t.mutex.Unlock()
@@ -999,15 +1005,15 @@ func (t *Manager) CheckTarfsHintAnnotation(ctx context.Context, ref string, mani
9991005
if err != nil {
10001006
return false, err
10011007
}
1002-
remote := remote.New(keyChain, t.insecure)
1008+
remoteFactory := remote.New(keyChain, t.insecure)
10031009

10041010
handle := func() (bool, error) {
10051011
if tarfsHint, ok := t.tarfsHintCache.Get(ref); ok {
10061012
return tarfsHint.(bool), nil
10071013
}
10081014

10091015
if _, err, _ := t.sg.Do(ref, func() (interface{}, error) {
1010-
err := t.fetchImageInfo(ctx, remote, ref, manifestDigest)
1016+
err := t.fetchImageInfo(ctx, remoteFactory, ref, manifestDigest)
10111017
return nil, err
10121018
}); err != nil {
10131019
return false, err
@@ -1021,7 +1027,8 @@ func (t *Manager) CheckTarfsHintAnnotation(ctx context.Context, ref string, mani
10211027
}
10221028

10231029
tarfsHint, err := handle()
1024-
if err != nil && remote.RetryWithPlainHTTP(ref, err) {
1030+
if err != nil && remoteFactory.RetryWithPlainHTTP(ref, err) {
1031+
remoteFactory = remote.New(keyChain, t.insecure)
10251032
tarfsHint, err = handle()
10261033
}
10271034
return tarfsHint, err

pkg/tarfs/tarfs_test.go

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
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

Comments
 (0)