Skip to content

Commit 4ba996b

Browse files
committed
generate synthetic test data
Signed-off-by: Mustafa Elbehery <melbeher@redhat.com>
1 parent ec490c8 commit 4ba996b

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

bucket_test.go

+104
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,110 @@ func TestBucket_Delete_NonExisting(t *testing.T) {
464464
}
465465
}
466466

467+
func generateTestKeysValues(t testing.TB, srcBucketPath []string, db *btesting.DB) {
468+
t.Helper()
469+
470+
var min, max = 1, 1024
471+
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
472+
// init matrix of bucket keys
473+
keys := make([][]string, 0, len(srcBucketPath))
474+
values := make([][]string, 0, len(srcBucketPath))
475+
476+
for idx := range srcBucketPath {
477+
// rand number of keys/values in each bucket
478+
n := rand.Intn(max-min) + min
479+
keys[idx] = make([]string, n)
480+
values[idx] = make([]string, n)
481+
482+
for i := 0; i < n; i++ {
483+
// generate rand key/value length
484+
keyLength := rand.Intn(max-min) + min
485+
valLength := rand.Intn(max-min) + min
486+
487+
keyData := make([]rune, keyLength)
488+
valData := make([]rune, valLength)
489+
490+
for i := range keyData {
491+
keyData[i] = letters[rand.Intn(len(letters))]
492+
}
493+
keys[idx][i] = string(keyData)
494+
495+
for i := range valData {
496+
valData[i] = letters[rand.Intn(len(letters))]
497+
}
498+
values[idx][i] = string(valData)
499+
}
500+
}
501+
502+
// dump the data in the testDB
503+
if err := db.Update(func(tx *bolt.Tx) error {
504+
lastBucket := ""
505+
506+
for idx, bucket := range srcBucketPath {
507+
var b *bolt.Bucket
508+
var bErr error
509+
510+
if lastBucket == "" {
511+
b, bErr = tx.CreateBucketIfNotExists([]byte(bucket))
512+
if bErr != nil {
513+
t.Fatalf("error creating bucket %v: %v", bucket, bErr)
514+
}
515+
} else {
516+
b = b.Bucket([]byte(lastBucket))
517+
if b == nil {
518+
t.Fatalf("error retrieving last bucket %v", lastBucket)
519+
}
520+
}
521+
522+
lastBucket = bucket
523+
524+
// insert all key/values for this bucket
525+
ks := keys[idx]
526+
vs := values[idx]
527+
528+
for i := 0; i < len(ks); i++ {
529+
pErr := b.Put([]byte(ks[i]), []byte(vs[i]))
530+
if pErr != nil {
531+
t.Fatalf("error inserting key %v and value %v in bucket %v: %v", ks[i], vs[i], bucket, pErr)
532+
}
533+
}
534+
}
535+
536+
return nil
537+
}); err != nil {
538+
t.Fatal(err)
539+
}
540+
db.MustCheck()
541+
}
542+
543+
func TestBucket_MoveBucket2(t *testing.T) {
544+
testCases := []struct {
545+
name string
546+
srcBucketPath []string
547+
dstBucketPath []string
548+
isInlined bool
549+
expErr error
550+
}{
551+
{
552+
name: "happy path",
553+
srcBucketPath: []string{"x", "y", "z"},
554+
dstBucketPath: []string{"x", "y"},
555+
isInlined: false,
556+
expErr: nil,
557+
},
558+
}
559+
560+
for _, tc := range testCases {
561+
t.Run(tc.name, func(*testing.T) {
562+
563+
db := btesting.MustCreateDB(t)
564+
565+
generateTestKeysValues(t, tc.srcBucketPath, db)
566+
567+
})
568+
}
569+
}
570+
467571
func TestBucket_MoveBucket(t *testing.T) {
468572
testCases := []struct {
469573
name string

0 commit comments

Comments
 (0)