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