feat(cli): add stable provisioning failure codes for manual and MDM installs

This commit is contained in:
Anthony Wong
2026-08-21 14:52:02 +07:00
committed by Cuong Manh Le
parent 753d245029
commit 1f001a559a
14 changed files with 1988 additions and 107 deletions
+57
View File
@@ -1,6 +1,7 @@
package cli
import (
"errors"
"strings"
"testing"
)
@@ -26,3 +27,59 @@ func Test_ensureSystemdKillMode(t *testing.T) {
})
}
}
func TestDoTasksESuccess(t *testing.T) {
var ran []string
tasks := []task{
{func() error { ran = append(ran, "a"); return nil }, false, "a"},
{func() error { ran = append(ran, "b"); return nil }, true, "b"},
}
failedTask, err := doTasksE(tasks)
if failedTask != "" || err != nil {
t.Errorf("doTasksE() = (%q, %v), want (\"\", nil)", failedTask, err)
}
if got := strings.Join(ran, ","); got != "a,b" {
t.Errorf("ran tasks %q, want all tasks run in order", got)
}
}
func TestDoTasksEAbortsOnAbortOnErrorTask(t *testing.T) {
wantErr := errors.New("install failed")
var ran []string
tasks := []task{
{func() error { ran = append(ran, "Stop"); return nil }, false, "Stop"},
{func() error { ran = append(ran, "Install"); return wantErr }, true, "Install"},
{func() error { ran = append(ran, "Start"); return nil }, true, "Start"},
}
failedTask, err := doTasksE(tasks)
if failedTask != "Install" || !errors.Is(err, wantErr) {
t.Errorf("doTasksE() = (%q, %v), want (\"Install\", %v)", failedTask, err, wantErr)
}
if got := strings.Join(ran, ","); got != "Stop,Install" {
t.Errorf("ran tasks %q, want the run to stop right after the abort", got)
}
}
func TestDoTasksENonAbortFailureContinues(t *testing.T) {
var ran []string
tasks := []task{
{func() error { ran = append(ran, "a"); return errors.New("a failed") }, false, "a"},
{func() error { ran = append(ran, "b"); return nil }, true, "b"},
}
failedTask, err := doTasksE(tasks)
if failedTask != "" || err != nil {
t.Errorf("doTasksE() = (%q, %v), want (\"\", nil) since the failing task did not abort", failedTask, err)
}
if got := strings.Join(ran, ","); got != "a,b" {
t.Errorf("ran tasks %q, want the run to continue past the non-abort failure", got)
}
}
func TestDoTasksDelegatesToDoTasksE(t *testing.T) {
if !doTasks([]task{{func() error { return nil }, true, "ok"}}) {
t.Error("doTasks() = false, want true on success")
}
if doTasks([]task{{func() error { return errors.New("boom") }, true, "boom"}}) {
t.Error("doTasks() = true, want false when an abortOnError task fails")
}
}