Implement resumable download queue (T-301)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user