diff --git a/bucket_test.go b/bucket_test.go index f8e3b4adc..62824c1e3 100644 --- a/bucket_test.go +++ b/bucket_test.go @@ -464,6 +464,110 @@ func TestBucket_Delete_NonExisting(t *testing.T) { } } +func generateTestKeysValues(t testing.TB, srcBucketPath []string, db *btesting.DB) { + t.Helper() + + var min, max = 1, 1024 + var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") + // init matrix of bucket keys + keys := make([][]string, 0, len(srcBucketPath)) + values := make([][]string, 0, len(srcBucketPath)) + + for idx := range srcBucketPath { + // rand number of keys/values in each bucket + n := rand.Intn(max-min) + min + keys[idx] = make([]string, n) + values[idx] = make([]string, n) + + for i := 0; i < n; i++ { + // generate rand key/value length + keyLength := rand.Intn(max-min) + min + valLength := rand.Intn(max-min) + min + + keyData := make([]rune, keyLength) + valData := make([]rune, valLength) + + for i := range keyData { + keyData[i] = letters[rand.Intn(len(letters))] + } + keys[idx][i] = string(keyData) + + for i := range valData { + valData[i] = letters[rand.Intn(len(letters))] + } + values[idx][i] = string(valData) + } + } + + // dump the data in the testDB + if err := db.Update(func(tx *bolt.Tx) error { + lastBucket := "" + + for idx, bucket := range srcBucketPath { + var b *bolt.Bucket + var bErr error + + if lastBucket == "" { + b, bErr = tx.CreateBucketIfNotExists([]byte(bucket)) + if bErr != nil { + t.Fatalf("error creating bucket %v: %v", bucket, bErr) + } + } else { + b = b.Bucket([]byte(lastBucket)) + if b == nil { + t.Fatalf("error retrieving last bucket %v", lastBucket) + } + } + + lastBucket = bucket + + // insert all key/values for this bucket + ks := keys[idx] + vs := values[idx] + + for i := 0; i < len(ks); i++ { + pErr := b.Put([]byte(ks[i]), []byte(vs[i])) + if pErr != nil { + t.Fatalf("error inserting key %v and value %v in bucket %v: %v", ks[i], vs[i], bucket, pErr) + } + } + } + + return nil + }); err != nil { + t.Fatal(err) + } + db.MustCheck() +} + +func TestBucket_MoveBucket2(t *testing.T) { + testCases := []struct { + name string + srcBucketPath []string + dstBucketPath []string + isInlined bool + expErr error + }{ + { + name: "happy path", + srcBucketPath: []string{"x", "y", "z"}, + dstBucketPath: []string{"x", "y"}, + isInlined: false, + expErr: nil, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(*testing.T) { + + db := btesting.MustCreateDB(t) + + generateTestKeysValues(t, tc.srcBucketPath, db) + + }) + } +} + func TestBucket_MoveBucket(t *testing.T) { testCases := []struct { name string