Files
soft_quay/core/downloader/files_test.go
T

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)
}
}