forked from TrueCloudLab/restic
Move functions to correct file
This commit is contained in:
parent
810056c2bc
commit
6227821b4e
2 changed files with 104 additions and 112 deletions
|
@ -1,112 +0,0 @@
|
|||
package repository_test
|
||||
|
||||
import (
|
||||
"io"
|
||||
"math/rand"
|
||||
"restic/backend"
|
||||
"restic/pack"
|
||||
"restic/repository"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func randomSize(min, max int) int {
|
||||
return rand.Intn(max-min) + min
|
||||
}
|
||||
|
||||
func random(t *testing.T, length int) []byte {
|
||||
rd := repository.NewRandReader(rand.New(rand.NewSource(int64(length))))
|
||||
buf := make([]byte, length)
|
||||
_, err := io.ReadFull(rd, buf)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to read %d random bytes: %v", length, err)
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
func createRandomBlobs(t *testing.T, repo *repository.Repository, blobs int, pData float32) {
|
||||
for i := 0; i < blobs; i++ {
|
||||
var (
|
||||
tpe pack.BlobType
|
||||
length int
|
||||
)
|
||||
|
||||
if rand.Float32() < pData {
|
||||
tpe = pack.Data
|
||||
length = randomSize(50*1024, 2*1024*1024) // 50KiB to 2MiB of data
|
||||
} else {
|
||||
tpe = pack.Tree
|
||||
length = randomSize(5*1024, 50*1024) // 5KiB to 50KiB
|
||||
}
|
||||
|
||||
_, err := repo.SaveAndEncrypt(tpe, random(t, length), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("SaveFrom() error %v", err)
|
||||
}
|
||||
|
||||
if rand.Float32() < 0.2 {
|
||||
if err = repo.Flush(); err != nil {
|
||||
t.Fatalf("repo.Flush() returned error %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := repo.Flush(); err != nil {
|
||||
t.Fatalf("repo.Flush() returned error %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// selectBlobs splits the list of all blobs randomly into two lists. A blob
|
||||
// will be contained in the firstone ith probability p.
|
||||
func selectBlobs(t *testing.T, repo *repository.Repository, p float32) (list1, list2 backend.IDSet) {
|
||||
done := make(chan struct{})
|
||||
defer close(done)
|
||||
|
||||
list1 = backend.NewIDSet()
|
||||
list2 = backend.NewIDSet()
|
||||
|
||||
for id := range repo.List(backend.Data, done) {
|
||||
entries, err := repo.ListPack(id)
|
||||
if err != nil {
|
||||
t.Fatalf("error listing pack %v: %v", id, err)
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
if rand.Float32() <= p {
|
||||
list1.Insert(entry.ID)
|
||||
} else {
|
||||
list2.Insert(entry.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return list1, list2
|
||||
}
|
||||
|
||||
func listPacks(t *testing.T, repo *repository.Repository) backend.IDSet {
|
||||
done := make(chan struct{})
|
||||
defer close(done)
|
||||
|
||||
list := backend.NewIDSet()
|
||||
for id := range repo.List(backend.Data, done) {
|
||||
list.Insert(id)
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
||||
func findPacksForBlobs(t *testing.T, repo *repository.Repository, blobs backend.IDSet) backend.IDSet {
|
||||
packs := backend.NewIDSet()
|
||||
|
||||
idx := repo.Index()
|
||||
for id := range blobs {
|
||||
pb, err := idx.Lookup(id)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
packs.Insert(pb.PackID)
|
||||
}
|
||||
|
||||
return packs
|
||||
}
|
|
@ -1,12 +1,116 @@
|
|||
package repository_test
|
||||
|
||||
import (
|
||||
"io"
|
||||
"math/rand"
|
||||
"restic/backend"
|
||||
"restic/pack"
|
||||
"restic/repository"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func randomSize(min, max int) int {
|
||||
return rand.Intn(max-min) + min
|
||||
}
|
||||
|
||||
func random(t *testing.T, length int) []byte {
|
||||
rd := repository.NewRandReader(rand.New(rand.NewSource(int64(length))))
|
||||
buf := make([]byte, length)
|
||||
_, err := io.ReadFull(rd, buf)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to read %d random bytes: %v", length, err)
|
||||
}
|
||||
|
||||
return buf
|
||||
}
|
||||
|
||||
func createRandomBlobs(t *testing.T, repo *repository.Repository, blobs int, pData float32) {
|
||||
for i := 0; i < blobs; i++ {
|
||||
var (
|
||||
tpe pack.BlobType
|
||||
length int
|
||||
)
|
||||
|
||||
if rand.Float32() < pData {
|
||||
tpe = pack.Data
|
||||
length = randomSize(50*1024, 2*1024*1024) // 50KiB to 2MiB of data
|
||||
} else {
|
||||
tpe = pack.Tree
|
||||
length = randomSize(5*1024, 50*1024) // 5KiB to 50KiB
|
||||
}
|
||||
|
||||
_, err := repo.SaveAndEncrypt(tpe, random(t, length), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("SaveFrom() error %v", err)
|
||||
}
|
||||
|
||||
if rand.Float32() < 0.2 {
|
||||
if err = repo.Flush(); err != nil {
|
||||
t.Fatalf("repo.Flush() returned error %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if err := repo.Flush(); err != nil {
|
||||
t.Fatalf("repo.Flush() returned error %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// selectBlobs splits the list of all blobs randomly into two lists. A blob
|
||||
// will be contained in the firstone ith probability p.
|
||||
func selectBlobs(t *testing.T, repo *repository.Repository, p float32) (list1, list2 backend.IDSet) {
|
||||
done := make(chan struct{})
|
||||
defer close(done)
|
||||
|
||||
list1 = backend.NewIDSet()
|
||||
list2 = backend.NewIDSet()
|
||||
|
||||
for id := range repo.List(backend.Data, done) {
|
||||
entries, err := repo.ListPack(id)
|
||||
if err != nil {
|
||||
t.Fatalf("error listing pack %v: %v", id, err)
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
if rand.Float32() <= p {
|
||||
list1.Insert(entry.ID)
|
||||
} else {
|
||||
list2.Insert(entry.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return list1, list2
|
||||
}
|
||||
|
||||
func listPacks(t *testing.T, repo *repository.Repository) backend.IDSet {
|
||||
done := make(chan struct{})
|
||||
defer close(done)
|
||||
|
||||
list := backend.NewIDSet()
|
||||
for id := range repo.List(backend.Data, done) {
|
||||
list.Insert(id)
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
||||
func findPacksForBlobs(t *testing.T, repo *repository.Repository, blobs backend.IDSet) backend.IDSet {
|
||||
packs := backend.NewIDSet()
|
||||
|
||||
idx := repo.Index()
|
||||
for id := range blobs {
|
||||
pb, err := idx.Lookup(id)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
packs.Insert(pb.PackID)
|
||||
}
|
||||
|
||||
return packs
|
||||
}
|
||||
|
||||
func repack(t *testing.T, repo *repository.Repository, packs, blobs backend.IDSet) {
|
||||
err := repository.Repack(repo, packs, blobs)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue