46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
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)
|
|
}
|
|
}
|