package blossom import ( "strings" "testing" ) // TestIndexReopen pins the index record layout: an offset mistake here makes a // relay panic when it opens a data directory that contains blobs. func TestIndexReopen(t *testing.T) { dir := t.TempDir() s, err := Open(dir, 1<<20) if err != nil { t.Fatal(err) } hash := strings.Repeat("ab", 32) pub := strings.Repeat("cd", 32) b := &Blob{Hash: hash, PubKey: pub, Size: 1234, Type: "text/plain", Created: 1700000000} s.mu.Lock() s.putMem(b) err = s.appendRecord('p', b) s.mu.Unlock() if err != nil { t.Fatal(err) } if err := s.Close(); err != nil { t.Fatal(err) } s2, err := Open(dir, 1<<20) if err != nil { t.Fatal(err) } got := s2.blobs[hash] if got == nil { t.Fatal("blob missing after reopen") } if got.Size != b.Size || got.Created != b.Created || got.Type != b.Type || got.PubKey != pub { t.Fatalf("blob metadata mismatch: %+v", got) } if len(s2.byPub[pub]) != 1 { t.Fatal("pubkey index not rebuilt") } s2.mu.Lock() s2.delMem(hash) err = s2.appendRecord('d', b) s2.mu.Unlock() if err != nil { t.Fatal(err) } s2.Close() s3, err := Open(dir, 1<<20) if err != nil { t.Fatal(err) } defer s3.Close() if s3.blobs[hash] != nil { t.Fatal("deleted blob returned after reopen") } }