fix(backup): retain staging cleanup capability
This commit is contained in:
@@ -149,6 +149,68 @@ func TestCreateCanonicalNewPrivateFileProvidesPrivateStreamingWriter(t *testing.
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrivateDirectoryCreatesAndRemovesStreamingRegularFile(t *testing.T) {
|
||||
temporaryRoot, err := filepath.EvalSymlinks(os.TempDir())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
root, err := os.MkdirTemp(temporaryRoot, "tht-safeio-stream-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Cleanup(func() { _ = os.RemoveAll(root) })
|
||||
if err := ProtectPrivateDirectory(root); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
directory, found, err := OpenPrivateDirectory(root, true)
|
||||
if err != nil || !found {
|
||||
t.Fatalf("OpenPrivateDirectory() = found %v, err %v", found, err)
|
||||
}
|
||||
defer directory.Close()
|
||||
|
||||
file, created, err := directory.CreateRegularFile("archive-stream.zip")
|
||||
if err != nil || !created || file == nil {
|
||||
t.Fatalf("CreateRegularFile() = file %v, created %v, err %v", file, created, err)
|
||||
}
|
||||
if _, err := file.Write([]byte("private archive")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := file.Sync(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := file.Seek(0, io.SeekStart); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
streamed := make([]byte, len("private archive"))
|
||||
if _, err := io.ReadFull(file, streamed); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if string(streamed) != "private archive" {
|
||||
t.Fatalf("streamed contents = %q, want %q", streamed, "private archive")
|
||||
}
|
||||
if err := file.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
removed, err := directory.RemoveRegular("archive-stream.zip")
|
||||
if err != nil || !removed {
|
||||
t.Fatalf("RemoveRegular() = removed %v, err %v", removed, err)
|
||||
}
|
||||
|
||||
if created, err := directory.CreateRegular("existing.zip", []byte("existing")); err != nil || !created {
|
||||
t.Fatalf("CreateRegular(existing.zip) = created %v, err %v", created, err)
|
||||
}
|
||||
if file, created, err := directory.CreateRegularFile("existing.zip"); err != nil || created || file != nil {
|
||||
t.Fatalf("CreateRegularFile(existing.zip) = file %v, created %v, err %v", file, created, err)
|
||||
}
|
||||
if created, err := directory.CreateRegular("target.zip", []byte("target")); err != nil || !created {
|
||||
t.Fatalf("CreateRegular(target.zip) = created %v, err %v", created, err)
|
||||
}
|
||||
testsupport.SymlinkOrSkip(t, filepath.Join(root, "target.zip"), filepath.Join(root, "linked.zip"))
|
||||
if file, created, err := directory.CreateRegularFile("linked.zip"); !errors.Is(err, ErrUnsafeFile) || created || file != nil {
|
||||
t.Fatalf("CreateRegularFile(linked.zip) = file %v, created %v, err %v", file, created, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreflightPrivateDirectoryAllowsOnlyAMissingFinalComponentWithoutMutation(t *testing.T) {
|
||||
temporaryRoot, err := filepath.EvalSymlinks(os.TempDir())
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user