Skip to content

Commit 4b7622e

Browse files
committed
test: add cas gc test for umount
Signed-off-by: Yadong Ding <[email protected]>
1 parent 57c112a commit 4b7622e

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

smoke/tests/cas_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,72 @@ func (c *CasTestSuite) testCasGcUmountByAPI(t *testing.T, enablePrefetch bool) {
151151
}
152152
}
153153

154+
func (c *CasTestSuite) TestCasGcUmount() test.Generator {
155+
scenarios := tool.DescartesIterator{}
156+
scenarios.Dimension(paramEnablePrefetch, []interface{}{false, true})
157+
158+
return func() (name string, testCase test.Case) {
159+
if !scenarios.HasNext() {
160+
return
161+
}
162+
scenario := scenarios.Next()
163+
164+
return scenario.Str(), func(t *testing.T) {
165+
c.testCasGcUmount(t, scenario.GetBool(paramEnablePrefetch))
166+
}
167+
}
168+
}
169+
170+
func (c *CasTestSuite) testCasGcUmount(t *testing.T, enablePrefetch bool) {
171+
ctx, layer := texture.PrepareLayerWithContext(t)
172+
defer ctx.Destroy(t)
173+
174+
file, err := os.CreateTemp("", "cas-*.db")
175+
require.NoError(t, err)
176+
defer os.Remove(file.Name())
177+
178+
ctx.Runtime.EnablePrefetch = enablePrefetch
179+
ctx.Runtime.ChunkDedupDb = file.Name()
180+
181+
nydusd, err := tool.NewNydusdWithContext(*ctx)
182+
require.NoError(t, err)
183+
err = nydusd.Mount()
184+
require.NoError(t, err)
185+
nydusd.Verify(t, layer.FileTree)
186+
187+
db, err := sql.Open("sqlite3", file.Name())
188+
require.NoError(t, err)
189+
defer db.Close()
190+
191+
for _, expectedTable := range []string{"Blobs", "Chunks"} {
192+
_, err = db.Exec("PRAGMA wal_checkpoint(FULL)")
193+
require.NoError(t, err)
194+
var count int
195+
query := fmt.Sprintf("SELECT COUNT(*) FROM %s;", expectedTable)
196+
err := db.QueryRow(query).Scan(&count)
197+
require.NoError(t, err)
198+
require.NotZero(t, count)
199+
}
200+
201+
// Mock nydus snapshotter clear cache
202+
os.RemoveAll(filepath.Join(ctx.Env.WorkDir, "cache"))
203+
time.Sleep(1 * time.Second)
204+
205+
err = nydusd.Umount()
206+
require.NoError(t, err)
207+
208+
for _, expectedTable := range []string{"Chunks", "Blobs"} {
209+
// Manual execution WAL Checkpoint
210+
_, err = db.Exec("PRAGMA wal_checkpoint(FULL)")
211+
require.NoError(t, err)
212+
var count int
213+
query := fmt.Sprintf("SELECT COUNT(*) FROM %s;", expectedTable)
214+
err := db.QueryRow(query).Scan(&count)
215+
require.NoError(t, err)
216+
require.Zero(t, count)
217+
}
218+
}
219+
154220
func TestCas(t *testing.T) {
155221
test.Run(t, &CasTestSuite{})
156222
}

0 commit comments

Comments
 (0)