@@ -6,7 +6,11 @@ package tests
6
6
7
7
import (
8
8
"fmt"
9
+ "os"
10
+ "os/exec"
11
+ "path"
9
12
"path/filepath"
13
+ "strconv"
10
14
"testing"
11
15
12
16
"github.com/containerd/log"
@@ -21,181 +25,53 @@ import (
21
25
22
26
type APIV1TestSuite struct {}
23
27
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
+ }
199
75
200
76
func (a * APIV1TestSuite ) TestMultipleMounts1 (t * testing.T ) {
201
77
ctx := tool .DefaultContext (t )
@@ -325,59 +201,6 @@ func (a *APIV1TestSuite) TestMultipleMounts2(t *testing.T) {
325
201
}
326
202
}
327
203
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
-
381
204
func (a * APIV1TestSuite ) rootFsToRafs (t * testing.T , ctx * tool.Context , rootFs * tool.Layer ) string {
382
205
digest := rootFs .Pack (t ,
383
206
converter.PackOption {
@@ -397,18 +220,6 @@ func (a *APIV1TestSuite) rootFsToRafs(t *testing.T, ctx *tool.Context, rootFs *t
397
220
return bootstrap
398
221
}
399
222
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
-
412
223
func TestAPI (t * testing.T ) {
413
224
test .Run (t , & APIV1TestSuite {})
414
225
}
0 commit comments