Skip to content

Commit 3e68533

Browse files
committed
smoke: enhance pseudo mount tests
Signed-off-by: Yan Song <[email protected]>
1 parent e4770cd commit 3e68533

File tree

1 file changed

+51
-240
lines changed

1 file changed

+51
-240
lines changed

smoke/tests/api_test.go

Lines changed: 51 additions & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ package tests
66

77
import (
88
"fmt"
9+
"os"
10+
"os/exec"
11+
"path"
912
"path/filepath"
13+
"strconv"
1014
"testing"
1115

1216
"github.com/containerd/log"
@@ -21,181 +25,53 @@ import (
2125

2226
type APIV1TestSuite struct{}
2327

24-
// func (a *APIV1TestSuite) TestDaemonStatus(t *testing.T) {
25-
26-
// ctx := tool.DefaultContext(t)
27-
28-
// ctx.PrepareWorkDir(t)
29-
// defer ctx.Destroy(t)
30-
31-
// rootFs := texture.MakeLowerLayer(t, filepath.Join(ctx.Env.WorkDir, "root-fs"))
32-
33-
// rafs := a.rootFsToRafs(t, ctx, rootFs)
34-
35-
// nydusd, err := tool.NewNydusd(tool.NydusdConfig{
36-
// NydusdPath: ctx.Binary.Nydusd,
37-
// BootstrapPath: rafs,
38-
// ConfigPath: filepath.Join(ctx.Env.WorkDir, "nydusd-config.fusedev.json"),
39-
// MountPath: ctx.Env.MountDir,
40-
// APISockPath: filepath.Join(ctx.Env.WorkDir, "nydusd-api.sock"),
41-
// BackendType: "localfs",
42-
// BackendConfig: fmt.Sprintf(`{"dir": "%s"}`, ctx.Env.BlobDir),
43-
// EnablePrefetch: ctx.Runtime.EnablePrefetch,
44-
// BlobCacheDir: ctx.Env.CacheDir,
45-
// CacheType: ctx.Runtime.CacheType,
46-
// CacheCompressed: ctx.Runtime.CacheCompressed,
47-
// RafsMode: ctx.Runtime.RafsMode,
48-
// DigestValidate: false,
49-
// })
50-
// require.NoError(t, err)
51-
52-
// err = nydusd.Mount()
53-
// require.NoError(t, err)
54-
// defer func() {
55-
// if err := nydusd.Umount(); err != nil {
56-
// log.L.WithError(err).Errorf("umount")
57-
// }
58-
// }()
59-
60-
// // The implementation of runNydusd() has checked stats, however,
61-
// // it's clear of semantic to check stats again.
62-
// newCtx, cancel := context.WithCancel(context.Background())
63-
// defer cancel()
64-
65-
// select {
66-
// case <-tool.CheckReady(newCtx, nydusd.APISockPath):
67-
// return
68-
// case <-time.After(50 * time.Millisecond):
69-
// require.Fail(t, "nydusd status is not RUNNING")
70-
// }
71-
// }
72-
73-
// func (a *APIV1TestSuite) TestMetrics(t *testing.T) {
74-
75-
// ctx := tool.DefaultContext(t)
76-
77-
// ctx.PrepareWorkDir(t)
78-
// defer ctx.Destroy(t)
79-
80-
// rootFs := texture.MakeLowerLayer(t, filepath.Join(ctx.Env.WorkDir, "root-fs"))
81-
82-
// rafs := a.rootFsToRafs(t, ctx, rootFs)
83-
84-
// nydusd, err := tool.NewNydusd(tool.NydusdConfig{
85-
// NydusdPath: ctx.Binary.Nydusd,
86-
// BootstrapPath: rafs,
87-
// ConfigPath: filepath.Join(ctx.Env.WorkDir, "nydusd-config.fusedev.json"),
88-
// MountPath: ctx.Env.MountDir,
89-
// APISockPath: filepath.Join(ctx.Env.WorkDir, "nydusd-api.sock"),
90-
// BackendType: "localfs",
91-
// BackendConfig: fmt.Sprintf(`{"dir": "%s"}`, ctx.Env.BlobDir),
92-
// EnablePrefetch: ctx.Runtime.EnablePrefetch,
93-
// BlobCacheDir: ctx.Env.CacheDir,
94-
// CacheType: ctx.Runtime.CacheType,
95-
// CacheCompressed: ctx.Runtime.CacheCompressed,
96-
// RafsMode: ctx.Runtime.RafsMode,
97-
// DigestValidate: false,
98-
// IOStatsFiles: true,
99-
// LatestReadFiles: true,
100-
// AccessPattern: true,
101-
// })
102-
// require.NoError(t, err)
103-
104-
// err = nydusd.Mount()
105-
// require.NoError(t, err)
106-
// defer func() {
107-
// if err := nydusd.Umount(); err != nil {
108-
// log.L.WithError(err).Errorf("umount")
109-
// }
110-
// }()
111-
112-
// err = a.visit(filepath.Join(ctx.Env.MountDir, "file-1"))
113-
// require.NoError(t, err)
114-
115-
// gm, err := nydusd.GetGlobalMetrics()
116-
// require.NoError(t, err)
117-
// require.True(t, gm.FilesAccountEnabled)
118-
// require.True(t, gm.MeasureLatency)
119-
// require.True(t, gm.AccessPattern)
120-
// require.Equal(t, uint64(len("file-1")), gm.DataRead)
121-
// require.Equal(t, uint64(1), gm.FOPS[4])
122-
123-
// err = a.visit(filepath.Join(ctx.Env.MountDir, "dir-1/file-1"))
124-
// require.NoError(t, err)
125-
// gmNew, err := nydusd.GetGlobalMetrics()
126-
// require.NoError(t, err)
127-
// require.Equal(t, gm.DataRead+uint64(len("dir-1/file-1")), gmNew.DataRead)
128-
// require.Equal(t, gm.FOPS[4]+1, gmNew.FOPS[4])
129-
130-
// _, err = nydusd.GetFilesMetrics("/")
131-
// require.NoError(t, err)
132-
133-
// _, err = nydusd.GetBackendMetrics("/")
134-
// require.NoError(t, err)
135-
136-
// _, err = nydusd.GetLatestFileMetrics()
137-
// require.NoError(t, err)
138-
139-
// apms, err := nydusd.GetAccessPatternMetrics("/")
140-
// require.NoError(t, err)
141-
// require.NotEmpty(t, apms)
142-
143-
// apms, err = nydusd.GetAccessPatternMetrics("")
144-
// require.NoError(t, err)
145-
// require.NotEmpty(t, apms)
146-
147-
// apms, err = nydusd.GetAccessPatternMetrics("poison")
148-
// require.NoError(t, err)
149-
// require.Empty(t, apms)
150-
// }
151-
152-
// func dropPageCache(t *testing.T) {
153-
// f, err := os.OpenFile("/proc/sys/vm/drop_caches", os.O_WRONLY, 0644)
154-
// require.NoError(t, err)
155-
// defer f.Close()
156-
// _, err = f.WriteString("3")
157-
// require.NoError(t, err)
158-
// }
159-
160-
// func accessMount(t *testing.T, mountPath string) {
161-
// cmd := exec.Command("bash", "-c", fmt.Sprintf("find %s -type f -print0 | xargs -0 sha256sum 2>&1 > /dev/null", mountPath))
162-
// cmd.Stderr = os.Stderr
163-
// cmd.Stdout = os.Stdout
164-
// err := cmd.Run()
165-
// require.NoError(t, err)
166-
// }
167-
168-
// func limitCPUMem(t *testing.T, pid int) {
169-
// err := os.MkdirAll("/sys/fs/cgroup/cpu/default/nydusd", 0755)
170-
// require.NoError(t, err)
171-
172-
// err = os.MkdirAll("/sys/fs/cgroup/memory/default/nydusd", 0755)
173-
// require.NoError(t, err)
174-
175-
// period := 100000
176-
// quota := 100000 // 1c
177-
// memLimit := 512 * 1024 * 1024 // 1g
178-
179-
// // Set CPU limit
180-
// err = os.WriteFile(path.Join("/sys/fs/cgroup/cpu/default/nydusd", "cpu.cfs_quota_us"), []byte(strconv.Itoa(quota)), 0644)
181-
// require.NoError(t, err)
182-
// err = os.WriteFile(path.Join("/sys/fs/cgroup/cpu/default/nydusd", "cpu.cfs_period_us"), []byte(strconv.Itoa(period)), 0644)
183-
// require.NoError(t, err)
184-
185-
// // Set memory limit
186-
// err = os.WriteFile(path.Join("/sys/fs/cgroup/memory/default/nydusd", "memory.limit_in_bytes"), []byte(strconv.Itoa(memLimit)), 0644)
187-
// require.NoError(t, err)
188-
189-
// pidBytes := []byte(strconv.Itoa(pid))
190-
191-
// fmt.Println("pidBytes", string(pidBytes))
192-
193-
// err = os.WriteFile(path.Join("/sys/fs/cgroup/cpu/default/nydusd", "tasks"), pidBytes, 0644)
194-
// require.NoError(t, err)
195-
196-
// err = os.WriteFile(path.Join("/sys/fs/cgroup/memory/default/nydusd", "tasks"), pidBytes, 0644)
197-
// require.NoError(t, err)
198-
// }
28+
func dropPageCache(t *testing.T) {
29+
f, err := os.OpenFile("/proc/sys/vm/drop_caches", os.O_WRONLY, 0644)
30+
require.NoError(t, err)
31+
defer f.Close()
32+
_, err = f.WriteString("3")
33+
require.NoError(t, err)
34+
}
35+
36+
func accessMount(t *testing.T, mountPath string) {
37+
cmd := exec.Command("bash", "-c", fmt.Sprintf("find %s -type f -print0 | xargs -0 sha256sum 2>&1 > /dev/null", mountPath))
38+
cmd.Stderr = os.Stderr
39+
cmd.Stdout = os.Stdout
40+
err := cmd.Run()
41+
require.NoError(t, err)
42+
}
43+
44+
func limitCPUMem(t *testing.T, pid int) {
45+
err := os.MkdirAll("/sys/fs/cgroup/cpu/default/nydusd", 0755)
46+
require.NoError(t, err)
47+
48+
err = os.MkdirAll("/sys/fs/cgroup/memory/default/nydusd", 0755)
49+
require.NoError(t, err)
50+
51+
period := 100000
52+
quota := 100000 // 1c
53+
memLimit := 512 * 1024 * 1024 // 1g
54+
55+
// Set CPU limit
56+
err = os.WriteFile(path.Join("/sys/fs/cgroup/cpu/default/nydusd", "cpu.cfs_quota_us"), []byte(strconv.Itoa(quota)), 0644)
57+
require.NoError(t, err)
58+
err = os.WriteFile(path.Join("/sys/fs/cgroup/cpu/default/nydusd", "cpu.cfs_period_us"), []byte(strconv.Itoa(period)), 0644)
59+
require.NoError(t, err)
60+
61+
// Set memory limit
62+
err = os.WriteFile(path.Join("/sys/fs/cgroup/memory/default/nydusd", "memory.limit_in_bytes"), []byte(strconv.Itoa(memLimit)), 0644)
63+
require.NoError(t, err)
64+
65+
pidBytes := []byte(strconv.Itoa(pid))
66+
67+
fmt.Println("pidBytes", string(pidBytes))
68+
69+
err = os.WriteFile(path.Join("/sys/fs/cgroup/cpu/default/nydusd", "tasks"), pidBytes, 0644)
70+
require.NoError(t, err)
71+
72+
err = os.WriteFile(path.Join("/sys/fs/cgroup/memory/default/nydusd", "tasks"), pidBytes, 0644)
73+
require.NoError(t, err)
74+
}
19975

20076
func (a *APIV1TestSuite) TestMultipleMounts1(t *testing.T) {
20177
ctx := tool.DefaultContext(t)
@@ -325,59 +201,6 @@ func (a *APIV1TestSuite) TestMultipleMounts2(t *testing.T) {
325201
}
326202
}
327203

328-
// func (a *APIV1TestSuite) TestPrefetch(t *testing.T) {
329-
330-
// ctx := tool.DefaultContext(t)
331-
332-
// ctx.PrepareWorkDir(t)
333-
// defer ctx.Destroy(t)
334-
335-
// rootFs := texture.MakeLowerLayer(
336-
// t,
337-
// filepath.Join(ctx.Env.WorkDir, "root-fs"),
338-
// texture.LargerFileMaker("large-blob.bin", 5))
339-
340-
// rafs := a.rootFsToRafs(t, ctx, rootFs)
341-
342-
// config := tool.NydusdConfig{
343-
// NydusdPath: ctx.Binary.Nydusd,
344-
// MountPath: ctx.Env.MountDir,
345-
// APISockPath: filepath.Join(ctx.Env.WorkDir, "nydusd-api.sock"),
346-
// ConfigPath: filepath.Join(ctx.Env.WorkDir, "nydusd-config.fusedev.json"),
347-
// }
348-
// nydusd, err := tool.NewNydusd(config)
349-
// require.NoError(t, err)
350-
351-
// err = nydusd.Mount()
352-
// require.NoError(t, err)
353-
// defer func() {
354-
// if err := nydusd.Umount(); err != nil {
355-
// log.L.WithError(err).Errorf("umount")
356-
// }
357-
// }()
358-
359-
// config.BootstrapPath = rafs
360-
// config.MountPath = "/pseudo_fs_1"
361-
// config.BackendType = "localfs"
362-
// config.BackendConfig = fmt.Sprintf(`{"dir": "%s"}`, ctx.Env.BlobDir)
363-
// config.EnablePrefetch = true
364-
// config.PrefetchFiles = []string{"/"}
365-
// config.BlobCacheDir = ctx.Env.CacheDir
366-
// config.CacheType = ctx.Runtime.CacheType
367-
// config.CacheCompressed = ctx.Runtime.CacheCompressed
368-
// config.RafsMode = ctx.Runtime.RafsMode
369-
// nydusd.MountByAPI(t, config)
370-
// require.NoError(t, err)
371-
// time.Sleep(time.Millisecond * 15)
372-
373-
// bcm, err := nydusd.GetBlobCacheMetrics("")
374-
// require.NoError(t, err)
375-
// require.Greater(t, bcm.PrefetchDataAmount, uint64(0))
376-
377-
// _, err = nydusd.GetBlobCacheMetrics("/pseudo_fs_1")
378-
// require.NoError(t, err)
379-
// }
380-
381204
func (a *APIV1TestSuite) rootFsToRafs(t *testing.T, ctx *tool.Context, rootFs *tool.Layer) string {
382205
digest := rootFs.Pack(t,
383206
converter.PackOption{
@@ -397,18 +220,6 @@ func (a *APIV1TestSuite) rootFsToRafs(t *testing.T, ctx *tool.Context, rootFs *t
397220
return bootstrap
398221
}
399222

400-
// func (a *APIV1TestSuite) visit(path string) error {
401-
// f, err := os.Open(path)
402-
// if err != nil {
403-
// return err
404-
// }
405-
// defer f.Close()
406-
407-
// io.ReadAll(f)
408-
409-
// return nil
410-
// }
411-
412223
func TestAPI(t *testing.T) {
413224
test.Run(t, &APIV1TestSuite{})
414225
}

0 commit comments

Comments
 (0)