@@ -464,6 +464,110 @@ func TestBucket_Delete_NonExisting(t *testing.T) {
464
464
}
465
465
}
466
466
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
+
467
571
func TestBucket_MoveBucket (t * testing.T ) {
468
572
testCases := []struct {
469
573
name string
0 commit comments