//go:build !windows package selfupdate import ( "os" "path/filepath" "testing" ) func TestSwap_StatErr(t *testing.T) { dir := t.TempDir() newPath := filepath.Join(dir, "new") if err := os.WriteFile(newPath, []byte("NEW"), 0o755); err != nil { t.Fatal(err) } // swap stats the target first; a nonexistent target fails up-front. if err := swap(newPath, filepath.Join(dir, "does-not-exist", "target")); err == nil { t.Fatal("expected error when target stat fails") } } func TestSwap_CopyFileFails(t *testing.T) { dir := t.TempDir() target := filepath.Join(dir, "target") if err := os.WriteFile(target, []byte("ORIG"), 0o755); err != nil { t.Fatal(err) } // A nonexistent newPath makes copyFile's open fail after the temp file // is created → swap returns the error and the target is left untouched. if err := swap(filepath.Join(dir, "missing-new"), target); err == nil { t.Fatal("expected error when copyFile source is missing") } got, err := os.ReadFile(target) if err != nil { t.Fatalf("read target: %v", err) } if string(got) != "ORIG" { t.Errorf("target changed after a failed swap: %q, want ORIG", got) } }