test(05): WR-05 pin that the thumb delete prefix is ID-delimited
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
package attach
|
package attach
|
||||||
|
|
||||||
import "testing"
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"gocloud.dev/blob/memblob"
|
||||||
|
)
|
||||||
|
|
||||||
func TestFileTableName(t *testing.T) {
|
func TestFileTableName(t *testing.T) {
|
||||||
if got := (File{}).TableName(); got != "system_files" {
|
if got := (File{}).TableName(); got != "system_files" {
|
||||||
@@ -17,3 +21,44 @@ func TestFileSelfRegisters(t *testing.T) {
|
|||||||
}
|
}
|
||||||
t.Fatal("File must self-register via attach.Register")
|
t.Fatal("File must self-register via attach.Register")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WR-05 pin: the force-delete prefix is thumb_<id>_ with its trailing
|
||||||
|
// underscore, so ID 4 cannot match thumbs of ID 40/41/42 that share a
|
||||||
|
// partition. "thumb_4_" is not a string prefix of "thumb_42_".
|
||||||
|
func TestDeleteKeysThumbPrefixIsIDDelimited(t *testing.T) {
|
||||||
|
ctx := t.Context()
|
||||||
|
bucket := memblob.OpenBucket(nil)
|
||||||
|
defer bucket.Close()
|
||||||
|
const disk = "abc123xyz000.jpg"
|
||||||
|
part := PartitionDirectory(disk)
|
||||||
|
doomed := []string{
|
||||||
|
part + disk,
|
||||||
|
part + ThumbFilename(4, 200, 200, 0, 0, "auto", "jpg"),
|
||||||
|
part + ThumbFilename(4, 50, 50, 0, 0, "crop", "jpg"),
|
||||||
|
}
|
||||||
|
survivors := []string{
|
||||||
|
part + "abc123xyz111.jpg",
|
||||||
|
part + ThumbFilename(40, 200, 200, 0, 0, "auto", "jpg"),
|
||||||
|
part + ThumbFilename(41, 200, 200, 0, 0, "auto", "jpg"),
|
||||||
|
part + ThumbFilename(42, 4, 4, 0, 0, "auto", "jpg"),
|
||||||
|
part + ThumbFilename(14, 200, 200, 0, 0, "auto", "jpg"),
|
||||||
|
}
|
||||||
|
for _, key := range append(append([]string{}, doomed...), survivors...) {
|
||||||
|
if err := bucket.WriteAll(ctx, key, []byte("x"), nil); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := DeleteKeys(ctx, bucket, blobKeysFor(File{ID: 4, DiskName: disk})); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, key := range doomed {
|
||||||
|
if ok, err := bucket.Exists(ctx, key); err != nil || ok {
|
||||||
|
t.Fatalf("%s must be deleted (exists=%v err=%v)", key, ok, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, key := range survivors {
|
||||||
|
if ok, err := bucket.Exists(ctx, key); err != nil || !ok {
|
||||||
|
t.Fatalf("%s must survive deleting file 4 (exists=%v err=%v)", key, ok, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user