114 lines
3.2 KiB
Go
114 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const gptDump = `label: gpt
|
|
label-id: 1D2E3F4A-1111-2222-3333-444455556666
|
|
device: /dev/sda
|
|
unit: sectors
|
|
first-lba: 2048
|
|
last-lba: 8388574
|
|
sector-size: 512
|
|
|
|
/dev/sda1 : start= 2048, size= 204800, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=AAAAAAAA-1111-2222-3333-444455556666, name="EFI System Partition"
|
|
/dev/sda2 : start= 206848, size= 8179712, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=BBBBBBBB-1111-2222-3333-444455556666
|
|
`
|
|
|
|
const mbrDump = `label: dos
|
|
label-id: 0x1a2b3c4d
|
|
device: /dev/sdb
|
|
unit: sectors
|
|
sector-size: 512
|
|
|
|
/dev/sdb1 : start= 2048, size= 512000, type=83, bootable
|
|
/dev/sdb2 : start= 514048, size= 41734144, type=83
|
|
`
|
|
|
|
func TestParseSfdiskDumpGPT(t *testing.T) {
|
|
var d DiskLayout
|
|
if err := d.parseSfdiskDump(gptDump); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if d.Label != "gpt" || d.Scheme != "gpt" {
|
|
t.Fatalf("label/scheme = %q/%q", d.Label, d.Scheme)
|
|
}
|
|
if d.LabelID != "1D2E3F4A-1111-2222-3333-444455556666" {
|
|
t.Fatalf("labelID = %q", d.LabelID)
|
|
}
|
|
if d.FirstLBA != 2048 || d.LastLBA != 8388574 {
|
|
t.Fatalf("lba = %d/%d", d.FirstLBA, d.LastLBA)
|
|
}
|
|
if len(d.Partitions) != 2 {
|
|
t.Fatalf("parts = %d", len(d.Partitions))
|
|
}
|
|
p1 := d.Partitions[0]
|
|
if p1.Num != 1 || p1.Start != 2048 || p1.Size != 204800 {
|
|
t.Fatalf("p1 = %+v", p1)
|
|
}
|
|
if p1.Type != "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" || p1.UUID != "AAAAAAAA-1111-2222-3333-444455556666" {
|
|
t.Fatalf("p1 type/uuid = %q/%q", p1.Type, p1.UUID)
|
|
}
|
|
if p1.Name != "EFI System Partition" {
|
|
t.Fatalf("p1 name = %q", p1.Name)
|
|
}
|
|
if !p1.isESP() {
|
|
t.Fatalf("p1 should be ESP")
|
|
}
|
|
if d.Partitions[1].Num != 2 || d.Partitions[1].Size != 8179712 {
|
|
t.Fatalf("p2 = %+v", d.Partitions[1])
|
|
}
|
|
}
|
|
|
|
func TestParseSfdiskDumpMBR(t *testing.T) {
|
|
var d DiskLayout
|
|
if err := d.parseSfdiskDump(mbrDump); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if d.Scheme != "mbr" || d.LabelID != "0x1a2b3c4d" {
|
|
t.Fatalf("scheme/id = %q/%q", d.Scheme, d.LabelID)
|
|
}
|
|
if len(d.Partitions) != 2 || d.Partitions[0].Attrs != "bootable" {
|
|
t.Fatalf("parts = %+v", d.Partitions)
|
|
}
|
|
}
|
|
|
|
func TestSfdiskRestoreScript(t *testing.T) {
|
|
var d DiskLayout
|
|
if err := d.parseSfdiskDump(gptDump); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// keep IDs
|
|
s := d.sfdiskRestoreScript(false, nil)
|
|
if !strings.Contains(s, "label-id: 1D2E3F4A-1111-2222-3333-444455556666") {
|
|
t.Fatalf("expected label-id kept:\n%s", s)
|
|
}
|
|
if !strings.Contains(s, "uuid=AAAAAAAA-1111-2222-3333-444455556666") {
|
|
t.Fatalf("expected part uuid kept:\n%s", s)
|
|
}
|
|
if strings.Contains(s, "device:") || strings.Contains(s, "/dev/sda1") {
|
|
t.Fatalf("script must be device-independent:\n%s", s)
|
|
}
|
|
if strings.Contains(s, "last-lba") {
|
|
t.Fatalf("script must drop last-lba:\n%s", s)
|
|
}
|
|
|
|
// new IDs
|
|
s2 := d.sfdiskRestoreScript(true, nil)
|
|
if strings.Contains(s2, "label-id:") || strings.Contains(s2, "uuid=") {
|
|
t.Fatalf("--new-ids must strip ids:\n%s", s2)
|
|
}
|
|
|
|
// size override on p2
|
|
s3 := d.sfdiskRestoreScript(false, map[int]int64{2: 4000000})
|
|
if !strings.Contains(s3, "size=4000000") {
|
|
t.Fatalf("expected overridden size:\n%s", s3)
|
|
}
|
|
if strings.Contains(s3, "size=8179712") {
|
|
t.Fatalf("old size should be gone:\n%s", s3)
|
|
}
|
|
}
|