mirror of
https://github.com/octoleo/restic.git
synced 2024-11-29 16:23:59 +00:00
Move functions to correct file
This commit is contained in:
parent
810056c2bc
commit
6227821b4e
@ -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
|
package repository_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"restic/backend"
|
"restic/backend"
|
||||||
|
"restic/pack"
|
||||||
"restic/repository"
|
"restic/repository"
|
||||||
"testing"
|
"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) {
|
func repack(t *testing.T, repo *repository.Repository, packs, blobs backend.IDSet) {
|
||||||
err := repository.Repack(repo, packs, blobs)
|
err := repository.Repack(repo, packs, blobs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user