providers: test partial GC

This commit is contained in:
Steven Allen 2019-04-18 16:31:05 -07:00
parent e4d739c96d
commit 5bb50b8d68

View File

@ -129,38 +129,62 @@ func TestProvidesExpire(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
ds := dssync.MutexWrap(ds.NewMapDatastore())
mid := peer.ID("testing") mid := peer.ID("testing")
p := NewProviderManager(ctx, mid, dssync.MutexWrap(ds.NewMapDatastore())) p := NewProviderManager(ctx, mid, ds)
peers := []peer.ID{"a", "b"} peers := []peer.ID{"a", "b"}
var cids []cid.Cid var cids []cid.Cid
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
c := cid.NewCidV0(u.Hash([]byte(fmt.Sprint(i)))) c := cid.NewCidV0(u.Hash([]byte(fmt.Sprint(i))))
cids = append(cids, c) cids = append(cids, c)
}
for _, c := range cids[:5] {
p.AddProvider(ctx, c, peers[0]) p.AddProvider(ctx, c, peers[0])
p.AddProvider(ctx, c, peers[1]) p.AddProvider(ctx, c, peers[1])
} }
for i := 0; i < 10; i++ { time.Sleep(time.Second / 4)
out := p.GetProviders(ctx, cids[i])
for _, c := range cids[5:] {
p.AddProvider(ctx, c, peers[0])
p.AddProvider(ctx, c, peers[1])
}
for _, c := range cids {
out := p.GetProviders(ctx, c)
if len(out) != 2 { if len(out) != 2 {
t.Fatal("expected providers to still be there") t.Fatal("expected providers to still be there")
} }
} }
time.Sleep(time.Second) time.Sleep(3 * time.Second / 8)
for i := 0; i < 10; i++ {
out := p.GetProviders(ctx, cids[i]) for _, c := range cids[:5] {
out := p.GetProviders(ctx, c)
if len(out) > 0 { if len(out) > 0 {
t.Fatal("expected providers to be cleaned up, got: ", out) t.Fatal("expected providers to be cleaned up, got: ", out)
} }
} }
for _, c := range cids[5:] {
out := p.GetProviders(ctx, c)
if len(out) != 2 {
t.Fatal("expected providers to still be there")
}
}
time.Sleep(time.Second / 2)
// Stop to prevent data races
p.Process().Close()
if p.providers.Len() != 0 { if p.providers.Len() != 0 {
t.Fatal("providers map not cleaned up") t.Fatal("providers map not cleaned up")
} }
res, err := p.dstore.Query(dsq.Query{Prefix: providersKeyPrefix}) res, err := ds.Query(dsq.Query{Prefix: providersKeyPrefix})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }