package downloader import ( "errors" "os" "testing" ) func TestActivateCompletedRejectsReplacementOfWrittenPart(t *testing.T) { paths, err := ensureTransferLayout(t.TempDir(), "request-identity") if err != nil { t.Fatalf("ensureTransferLayout() error = %v", err) } if err := os.WriteFile(paths.Part, []byte("trusted"), 0o600); err != nil { t.Fatalf("WriteFile(original) error = %v", err) } original, expected, err := openVerifiedRegular(paths.Part, os.O_RDONLY) if err != nil { t.Fatalf("openVerifiedRegular() error = %v", err) } if err := original.Close(); err != nil { t.Fatalf("Close(original) error = %v", err) } if err := os.Remove(paths.Part); err != nil { t.Fatalf("Remove(original) error = %v", err) } if err := os.WriteFile(paths.Part, []byte("replacement"), 0o600); err != nil { t.Fatalf("WriteFile(replacement) error = %v", err) } err = activateCompleted(paths, expected) if !errors.Is(err, ErrTaskCorrupt) { t.Fatalf("activateCompleted() error = %v, want %v", err, ErrTaskCorrupt) } if _, err := os.Stat(paths.Completed); !os.IsNotExist(err) { t.Fatalf("completed path exists after identity mismatch: %v", err) } document, err := os.ReadFile(paths.Part) if err != nil { t.Fatalf("ReadFile(replacement) error = %v", err) } if string(document) != "replacement" { t.Fatalf("replacement bytes = %q", document) } }