blob: 31aa8272f6cb3fd9888147ec2a44a9fe7ef12d45 [file] [log] [blame]
Jan Schära6da1712024-08-21 15:12:11 +02001//go:build linux
2
3package blockdev
4
5import (
6 "os"
7 "testing"
8
9 "source.monogon.dev/osbase/loop"
10)
11
12const loopBlockSize = 1024
13const loopBlockCount = 8
14
15func TestLoopDevice(t *testing.T) {
16 if os.Getenv("IN_KTEST") != "true" {
17 t.Skip("Not in ktest")
18 }
19 underlying, err := os.CreateTemp("/tmp", "")
20 if err != nil {
21 t.Fatalf("CreateTemp failed: %v", err)
22 }
23 defer os.Remove(underlying.Name())
24
25 _, err = underlying.Write(make([]byte, loopBlockSize*loopBlockCount))
26 if err != nil {
27 t.Fatalf("Write failed: %v", err)
28 }
29
30 loopDev, err := loop.Create(underlying, loop.Config{
31 BlockSize: loopBlockSize,
32 })
33 if err != nil {
34 t.Fatalf("loop.Create failed: %v", err)
35 }
36 defer loopDev.Remove()
37
38 devPath, err := loopDev.DevPath()
39 if err != nil {
40 t.Fatalf("loopDev.DevPath failed: %v", err)
41 }
42
43 loopDev.Close()
44 blk, err := Open(devPath)
45 if err != nil {
46 t.Fatalf("Failed to open loop device: %v", err)
47 }
48 defer blk.Close()
49
50 ValidateBlockDev(t, blk, loopBlockCount, loopBlockSize, loopBlockSize)
51}
52
53const fileBlockSize = 1024
54const fileBlockCount = 8
55
56func TestFile(t *testing.T) {
57 if os.Getenv("IN_KTEST") != "true" {
58 t.Skip("Not in ktest")
59 }
60
61 blk, err := CreateFile("/tmp/testfile", fileBlockSize, fileBlockCount)
62 if err != nil {
63 t.Fatalf("Failed to create file: %v", err)
64 }
65 defer os.Remove("/tmp/testfile")
66
67 ValidateBlockDev(t, blk, fileBlockCount, fileBlockSize, fileBlockSize)
68}