blob: 31aa8272f6cb3fd9888147ec2a44a9fe7ef12d45 [file] [log] [blame]
//go:build linux
package blockdev
import (
"os"
"testing"
"source.monogon.dev/osbase/loop"
)
const loopBlockSize = 1024
const loopBlockCount = 8
func TestLoopDevice(t *testing.T) {
if os.Getenv("IN_KTEST") != "true" {
t.Skip("Not in ktest")
}
underlying, err := os.CreateTemp("/tmp", "")
if err != nil {
t.Fatalf("CreateTemp failed: %v", err)
}
defer os.Remove(underlying.Name())
_, err = underlying.Write(make([]byte, loopBlockSize*loopBlockCount))
if err != nil {
t.Fatalf("Write failed: %v", err)
}
loopDev, err := loop.Create(underlying, loop.Config{
BlockSize: loopBlockSize,
})
if err != nil {
t.Fatalf("loop.Create failed: %v", err)
}
defer loopDev.Remove()
devPath, err := loopDev.DevPath()
if err != nil {
t.Fatalf("loopDev.DevPath failed: %v", err)
}
loopDev.Close()
blk, err := Open(devPath)
if err != nil {
t.Fatalf("Failed to open loop device: %v", err)
}
defer blk.Close()
ValidateBlockDev(t, blk, loopBlockCount, loopBlockSize, loopBlockSize)
}
const fileBlockSize = 1024
const fileBlockCount = 8
func TestFile(t *testing.T) {
if os.Getenv("IN_KTEST") != "true" {
t.Skip("Not in ktest")
}
blk, err := CreateFile("/tmp/testfile", fileBlockSize, fileBlockCount)
if err != nil {
t.Fatalf("Failed to create file: %v", err)
}
defer os.Remove("/tmp/testfile")
ValidateBlockDev(t, blk, fileBlockCount, fileBlockSize, fileBlockSize)
}