package storage import "testing" func TestBuildSnapraidArgs(t *testing.T) { tests := []struct { kind string cfg SnapraidConfig want []string }{ { "snapraid_diff", SnapraidConfig{Conf: "/etc/snapraid.conf"}, []string{"snapraid", "-c", "/etc/snapraid.conf", "diff"}, }, { "snapraid_sync", SnapraidConfig{Conf: "/etc/snapraid.conf"}, []string{"snapraid", "-c", "/etc/snapraid.conf", "sync"}, }, { "snapraid_check", SnapraidConfig{Conf: "/etc/snapraid.conf"}, []string{"snapraid", "-c", "/etc/snapraid.conf", "check"}, }, { "snapraid_scrub", SnapraidConfig{Conf: "/etc/snapraid.conf", ScrubPlan: 8}, []string{"snapraid", "-c", "/etc/snapraid.conf", "scrub", "-p", "8"}, }, } for _, tt := range tests { t.Run(tt.kind, func(t *testing.T) { got, err := BuildSnapraidArgs(tt.kind, tt.cfg) if err != nil { t.Fatalf("BuildSnapraidArgs: %v", err) } if len(got) != len(tt.want) { t.Errorf("BuildSnapraidArgs = %v, want %v", got, tt.want) return } for i := range got { if got[i] != tt.want[i] { t.Errorf("BuildSnapraidArgs[%d] = %q, want %q", i, got[i], tt.want[i]) } } }) } } func TestBuildSnapraidArgsNoConf(t *testing.T) { _, err := BuildSnapraidArgs("snapraid_sync", SnapraidConfig{Conf: ""}) if err == nil { t.Error("expected error for empty conf") } } func TestValidateScrubPlan(t *testing.T) { tests := []struct { plan int wantErr bool }{ {0, true}, {-1, true}, {100, true}, {1, false}, {50, false}, {99, false}, } for _, tt := range tests { err := ValidateScrubPlan(tt.plan) if tt.wantErr && err == nil { t.Errorf("ValidateScrubPlan(%d) = nil, want error", tt.plan) } if !tt.wantErr && err != nil { t.Errorf("ValidateScrubPlan(%d) = %v, want nil", tt.plan, err) } } } func TestParseSnapraidDataDirs(t *testing.T) { tests := []struct { input string want []string }{ {"", nil}, {"/disk1", []string{"/disk1"}}, {"/disk1,/disk2", []string{"/disk1", "/disk2"}}, {"/disk1, /disk2 , /disk3", []string{"/disk1", "/disk2", "/disk3"}}, {" /disk1 , /disk2 ", []string{"/disk1", "/disk2"}}, } for _, tt := range tests { got := ParseSnapraidDataDirs(tt.input) if len(got) != len(tt.want) { t.Errorf("ParseSnapraidDataDirs(%q) = %v, want %v", tt.input, got, tt.want) continue } for i := range got { if got[i] != tt.want[i] { t.Errorf("ParseSnapraidDataDirs(%q)[%d] = %q, want %q", tt.input, i, got[i], tt.want[i]) } } } }