package partition import ( "os" "path/filepath" "testing" ) func TestReadVersion(t *testing.T) { dir := t.TempDir() versionFile := filepath.Join(dir, "version") if err := os.WriteFile(versionFile, []byte("1.2.3\n"), 0o644); err != nil { t.Fatal(err) } version, err := ReadVersion(dir) if err != nil { t.Fatal(err) } if version != "1.2.3" { t.Errorf("expected 1.2.3, got %s", version) } } func TestReadVersionMissing(t *testing.T) { dir := t.TempDir() _, err := ReadVersion(dir) if err == nil { t.Fatal("expected error for missing version file") } } func TestWriteSystemImage(t *testing.T) { mountPoint := t.TempDir() srcDir := t.TempDir() // Create source files vmlinuzPath := filepath.Join(srcDir, "vmlinuz") initramfsPath := filepath.Join(srcDir, "kubesolo-os.gz") if err := os.WriteFile(vmlinuzPath, []byte("kernel data"), 0o644); err != nil { t.Fatal(err) } if err := os.WriteFile(initramfsPath, []byte("initramfs data"), 0o644); err != nil { t.Fatal(err) } if err := WriteSystemImage(mountPoint, vmlinuzPath, initramfsPath, "2.0.0"); err != nil { t.Fatal(err) } // Verify files were copied data, err := os.ReadFile(filepath.Join(mountPoint, "vmlinuz")) if err != nil { t.Fatal(err) } if string(data) != "kernel data" { t.Errorf("vmlinuz content mismatch") } data, err = os.ReadFile(filepath.Join(mountPoint, "kubesolo-os.gz")) if err != nil { t.Fatal(err) } if string(data) != "initramfs data" { t.Errorf("initramfs content mismatch") } // Verify version file version, err := ReadVersion(mountPoint) if err != nil { t.Fatal(err) } if version != "2.0.0" { t.Errorf("expected version 2.0.0, got %s", version) } } func TestCopyFile(t *testing.T) { dir := t.TempDir() src := filepath.Join(dir, "src") dst := filepath.Join(dir, "dst") if err := os.WriteFile(src, []byte("test content"), 0o644); err != nil { t.Fatal(err) } if err := copyFile(src, dst); err != nil { t.Fatal(err) } data, err := os.ReadFile(dst) if err != nil { t.Fatal(err) } if string(data) != "test content" { t.Errorf("copy content mismatch") } } func TestCopyFileNotFound(t *testing.T) { dir := t.TempDir() err := copyFile("/nonexistent", filepath.Join(dir, "dst")) if err == nil { t.Fatal("expected error for nonexistent source") } } func TestGetSlotPartitionInvalid(t *testing.T) { _, err := GetSlotPartition("C") if err == nil { t.Fatal("expected error for invalid slot") } } func TestConstants(t *testing.T) { if LabelSystemA != "KSOLOA" { t.Errorf("unexpected LabelSystemA: %s", LabelSystemA) } if LabelSystemB != "KSOLOB" { t.Errorf("unexpected LabelSystemB: %s", LabelSystemB) } if LabelData != "KSOLODATA" { t.Errorf("unexpected LabelData: %s", LabelData) } if LabelEFI != "KSOLOEFI" { t.Errorf("unexpected LabelEFI: %s", LabelEFI) } }