v := factory(t)
defer v.Teardown()
defer func() {
- trashLifetime = 0 * time.Second
+ trashLifetime = 0
}()
trashLifetime = 3600 * time.Second
// First set: EmptyTrash before reaching the trash deadline.
- trashLifetime = 1 * time.Hour
+ trashLifetime = time.Hour
v.PutRaw(TestHash, TestBlock)
v.TouchWithDate(TestHash, time.Now().Add(-2*blobSignatureTTL))
// Because we Touch'ed, need to backdate again for next set of tests
v.TouchWithDate(TestHash, time.Now().Add(-2*blobSignatureTTL))
- // Untrash should fail if the only block in the trash has
- // already been untrashed.
+ // If the only block in the trash has already been untrashed,
+ // most volumes will fail a subsequent Untrash with a 404, but
+ // it's also acceptable for Untrash to succeed.
err = v.Untrash(TestHash)
- if err == nil || !os.IsNotExist(err) {
- t.Fatalf("os.IsNotExist(%v) should have been true", err)
+ if err != nil && !os.IsNotExist(err) {
+ t.Fatalf("Expected success or os.IsNotExist(), but got: %v", err)
}
- // The failed Untrash should not interfere with our
+ // The additional Untrash should not interfere with our
// already-untrashed copy.
err = checkGet()
if err != nil {
t.Fatal(err)
}
+ // Untrash might have updated the timestamp, so backdate again
+ v.TouchWithDate(TestHash, time.Now().Add(-2*blobSignatureTTL))
+
// Second set: EmptyTrash after the trash deadline has passed.
- trashLifetime = 1 * time.Nanosecond
+ trashLifetime = time.Nanosecond
err = v.Trash(TestHash)
if err != nil {
if err == nil || !os.IsNotExist(err) {
t.Fatalf("os.IsNotExist(%v) should have been true", err)
}
- // EmptryTrash
v.EmptyTrash()
// Untrash won't find it