mirror of
https://github.com/restic/restic.git
synced 2025-10-09 03:22:55 +00:00
make Lookup() return all blobs
+ simplify syntax
This commit is contained in:

committed by
Michael Eischer

parent
020cab8e08
commit
9d1fb94c6c
@@ -10,16 +10,17 @@ import (
|
||||
rtest "github.com/restic/restic/internal/test"
|
||||
)
|
||||
|
||||
func TestMasterIndexLookup(t *testing.T) {
|
||||
func TestMasterIndex(t *testing.T) {
|
||||
idInIdx1 := restic.NewRandomID()
|
||||
idInIdx2 := restic.NewRandomID()
|
||||
idInIdx12 := restic.NewRandomID()
|
||||
|
||||
blob1 := restic.PackedBlob{
|
||||
PackID: restic.NewRandomID(),
|
||||
Blob: restic.Blob{
|
||||
Type: restic.DataBlob,
|
||||
ID: idInIdx1,
|
||||
Length: 10,
|
||||
Length: uint(restic.CiphertextLength(10)),
|
||||
Offset: 0,
|
||||
},
|
||||
}
|
||||
@@ -29,32 +30,103 @@ func TestMasterIndexLookup(t *testing.T) {
|
||||
Blob: restic.Blob{
|
||||
Type: restic.DataBlob,
|
||||
ID: idInIdx2,
|
||||
Length: 100,
|
||||
Length: uint(restic.CiphertextLength(100)),
|
||||
Offset: 10,
|
||||
},
|
||||
}
|
||||
|
||||
blob12a := restic.PackedBlob{
|
||||
PackID: restic.NewRandomID(),
|
||||
Blob: restic.Blob{
|
||||
Type: restic.TreeBlob,
|
||||
ID: idInIdx12,
|
||||
Length: uint(restic.CiphertextLength(123)),
|
||||
Offset: 110,
|
||||
},
|
||||
}
|
||||
|
||||
blob12b := restic.PackedBlob{
|
||||
PackID: restic.NewRandomID(),
|
||||
Blob: restic.Blob{
|
||||
Type: restic.TreeBlob,
|
||||
ID: idInIdx12,
|
||||
Length: uint(restic.CiphertextLength(123)),
|
||||
Offset: 50,
|
||||
},
|
||||
}
|
||||
|
||||
idx1 := repository.NewIndex()
|
||||
idx1.Store(blob1)
|
||||
idx1.Store(blob12a)
|
||||
|
||||
idx2 := repository.NewIndex()
|
||||
idx2.Store(blob2)
|
||||
idx2.Store(blob12b)
|
||||
|
||||
mIdx := repository.NewMasterIndex()
|
||||
mIdx.Insert(idx1)
|
||||
mIdx.Insert(idx2)
|
||||
|
||||
blobs, found := mIdx.Lookup(idInIdx1, restic.DataBlob)
|
||||
rtest.Assert(t, found, "Expected to find blob id %v from index 1", idInIdx1)
|
||||
// test idInIdx1
|
||||
found := mIdx.Has(idInIdx1, restic.DataBlob)
|
||||
rtest.Equals(t, true, found)
|
||||
|
||||
blobs := mIdx.Lookup(idInIdx1, restic.DataBlob)
|
||||
rtest.Equals(t, []restic.PackedBlob{blob1}, blobs)
|
||||
|
||||
blobs, found = mIdx.Lookup(idInIdx2, restic.DataBlob)
|
||||
rtest.Assert(t, found, "Expected to find blob id %v from index 2", idInIdx2)
|
||||
size, found := mIdx.LookupSize(idInIdx1, restic.DataBlob)
|
||||
rtest.Equals(t, true, found)
|
||||
rtest.Equals(t, uint(10), size)
|
||||
|
||||
// test idInIdx2
|
||||
found = mIdx.Has(idInIdx2, restic.DataBlob)
|
||||
rtest.Equals(t, true, found)
|
||||
|
||||
blobs = mIdx.Lookup(idInIdx2, restic.DataBlob)
|
||||
rtest.Equals(t, []restic.PackedBlob{blob2}, blobs)
|
||||
|
||||
blobs, found = mIdx.Lookup(restic.NewRandomID(), restic.DataBlob)
|
||||
rtest.Assert(t, !found, "Expected to not find a blob when fetching with a random id")
|
||||
size, found = mIdx.LookupSize(idInIdx2, restic.DataBlob)
|
||||
rtest.Equals(t, true, found)
|
||||
rtest.Equals(t, uint(100), size)
|
||||
|
||||
// test idInIdx12
|
||||
found = mIdx.Has(idInIdx12, restic.TreeBlob)
|
||||
rtest.Equals(t, true, found)
|
||||
|
||||
blobs = mIdx.Lookup(idInIdx12, restic.TreeBlob)
|
||||
rtest.Equals(t, 2, len(blobs))
|
||||
|
||||
// test Lookup result for blob12a
|
||||
found = false
|
||||
if blobs[0] == blob12a || blobs[1] == blob12a {
|
||||
found = true
|
||||
}
|
||||
rtest.Assert(t, found, "blob12a not found in result")
|
||||
|
||||
// test Lookup result for blob12b
|
||||
found = false
|
||||
if blobs[0] == blob12b || blobs[1] == blob12b {
|
||||
found = true
|
||||
}
|
||||
rtest.Assert(t, found, "blob12a not found in result")
|
||||
|
||||
size, found = mIdx.LookupSize(idInIdx12, restic.TreeBlob)
|
||||
rtest.Equals(t, true, found)
|
||||
rtest.Equals(t, uint(123), size)
|
||||
|
||||
// test not in index
|
||||
found = mIdx.Has(restic.NewRandomID(), restic.TreeBlob)
|
||||
rtest.Assert(t, !found, "Expected no blobs when fetching with a random id")
|
||||
blobs = mIdx.Lookup(restic.NewRandomID(), restic.DataBlob)
|
||||
rtest.Assert(t, blobs == nil, "Expected no blobs when fetching with a random id")
|
||||
size, found = mIdx.LookupSize(restic.NewRandomID(), restic.DataBlob)
|
||||
rtest.Assert(t, !found, "Expected no blobs when fetching with a random id")
|
||||
|
||||
// Test Count
|
||||
num := mIdx.Count(restic.DataBlob)
|
||||
rtest.Equals(t, uint(2), num)
|
||||
num = mIdx.Count(restic.TreeBlob)
|
||||
rtest.Equals(t, uint(2), num)
|
||||
}
|
||||
|
||||
func TestMasterMergeFinalIndexes(t *testing.T) {
|
||||
@@ -96,16 +168,13 @@ func TestMasterMergeFinalIndexes(t *testing.T) {
|
||||
|
||||
mIdx.MergeFinalIndexes()
|
||||
|
||||
blobs, found := mIdx.Lookup(idInIdx1, restic.DataBlob)
|
||||
rtest.Assert(t, found, "Expected to find blob id %v from index 1", idInIdx1)
|
||||
blobs := mIdx.Lookup(idInIdx1, restic.DataBlob)
|
||||
rtest.Equals(t, []restic.PackedBlob{blob1}, blobs)
|
||||
|
||||
blobs, found = mIdx.Lookup(idInIdx2, restic.DataBlob)
|
||||
rtest.Assert(t, found, "Expected to find blob id %v from index 2", idInIdx2)
|
||||
blobs = mIdx.Lookup(idInIdx2, restic.DataBlob)
|
||||
rtest.Equals(t, []restic.PackedBlob{blob2}, blobs)
|
||||
|
||||
blobs, found = mIdx.Lookup(restic.NewRandomID(), restic.DataBlob)
|
||||
rtest.Assert(t, !found, "Expected to not find a blob when fetching with a random id")
|
||||
blobs = mIdx.Lookup(restic.NewRandomID(), restic.DataBlob)
|
||||
rtest.Assert(t, blobs == nil, "Expected no blobs when fetching with a random id")
|
||||
}
|
||||
|
||||
@@ -196,6 +265,16 @@ func BenchmarkMasterIndexLookupParallel(b *testing.B) {
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkMasterIndexLookupBlobSize(b *testing.B) {
|
||||
rng := rand.New(rand.NewSource(0))
|
||||
mIdx, lookupID := createRandomMasterIndex(rand.New(rng), 5, 200000)
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
mIdx.LookupSize(lookupID, restic.DataBlob)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user