//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)
}
