Skip to content

Commit 795773d

Browse files
committed
add test for srcBucket or dstBucket are RootBucket
Signed-off-by: Mustafa Elbehery <melbeher@redhat.com>
1 parent e21d44f commit 795773d

File tree

1 file changed

+118
-48
lines changed

1 file changed

+118
-48
lines changed

tx_test.go

+118-48
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,34 @@ func TestTx_MoveBucket(t *testing.T) {
518518
false,
519519
nil,
520520
},
521+
{
522+
"dstBucket is RootBucket",
523+
"srcBucket",
524+
"subBucket",
525+
"this is subBucket key",
526+
"this is subBucket value",
527+
"dstBucket",
528+
true,
529+
false,
530+
false,
531+
false,
532+
true,
533+
nil,
534+
},
535+
{
536+
"srcBucket is RootBucket, and dstBucket is RootBucket, corner case",
537+
"srcBucket",
538+
"subBucket",
539+
"this is subBucket key",
540+
"this is subBucket value",
541+
"dstBucket",
542+
true,
543+
true,
544+
false,
545+
true,
546+
true,
547+
nil,
548+
},
521549
}
522550

523551
for _, tc := range testCases {
@@ -526,49 +554,66 @@ func TestTx_MoveBucket(t *testing.T) {
526554

527555
// arrange
528556
if err := db.Update(func(tx *bolt.Tx) error {
529-
// create src bucket
530-
srcBucket, bErr := tx.CreateBucketIfNotExists([]byte(tc.srcBucketName))
531-
if bErr != nil {
532-
t.Fatalf("error creating src bucket %s: %v", tc.srcBucketName, bErr)
533-
}
534-
// insert K/V pair into src bucket
535-
if pErr := srcBucket.Put([]byte("foo"), []byte("0000")); pErr != nil {
536-
t.Fatal(pErr)
557+
var srcBucket *bolt.Bucket = nil
558+
var bErr error = nil
559+
var subBucket *bolt.Bucket = nil
560+
var sErr error = nil
561+
562+
if !tc.srcBucketIsRootBucket {
563+
// create src bucket
564+
srcBucket, bErr = tx.CreateBucketIfNotExists([]byte(tc.srcBucketName))
565+
if bErr != nil {
566+
t.Fatalf("error creating src bucket %s: %v", tc.srcBucketName, bErr)
567+
}
568+
// insert K/V pair into src bucket
569+
if pErr := srcBucket.Put([]byte("foo"), []byte("0000")); pErr != nil {
570+
t.Fatal(pErr)
571+
}
537572
}
538573

539574
if tc.subBucketExistSrcBucket {
540-
// create subBucket within srcBucket
541-
subBucket, sErr := srcBucket.CreateBucket([]byte(tc.subBucketName))
542-
if sErr != nil {
543-
t.Fatalf("error creating subBucket %s within root bucket: %v", tc.subBucketName, sErr)
575+
if tc.srcBucketIsRootBucket {
576+
// create subBucket within root bucket
577+
subBucket, sErr = tx.CreateBucket([]byte(tc.subBucketName))
578+
if sErr != nil {
579+
t.Fatalf("error creating subBucket %s within root bucket: %v", tc.subBucketName, sErr)
580+
}
581+
} else {
582+
// create subBucket within srcBucket
583+
subBucket, sErr = srcBucket.CreateBucket([]byte(tc.subBucketName))
584+
if sErr != nil {
585+
t.Fatalf("error creating subBucket %s within srcBucket %s: %v", tc.subBucketName, tc.srcBucketName, sErr)
586+
}
544587
}
545-
// insert K/V pair into subBucket
588+
// insert K/V pair into subBucket
546589
if pErr := subBucket.Put([]byte(tc.subBucketKey), []byte(tc.subBucketValue)); pErr != nil {
547590
t.Fatal(pErr)
548591
}
549592
}
550593

551594
// create dst bucket
552-
dstBucket, bErr := tx.CreateBucketIfNotExists([]byte(tc.dstBucketName))
553-
if bErr != nil {
554-
t.Fatalf("error creating dst bucket %s: %v", tc.dstBucketName, bErr)
555-
}
556-
// insert K/V pair into dst bucket
557-
if pErr := dstBucket.Put([]byte("bar"), []byte("0000")); pErr != nil {
558-
t.Fatal(pErr)
559-
}
595+
if !tc.dstBucketIsRootBucket {
596+
dstBucket, bErr := tx.CreateBucketIfNotExists([]byte(tc.dstBucketName))
597+
if bErr != nil {
598+
t.Fatalf("error creating dst bucket %s: %v", tc.dstBucketName, bErr)
599+
}
600+
// insert K/V pair into dst bucket
601+
if pErr := dstBucket.Put([]byte("bar"), []byte("0000")); pErr != nil {
602+
t.Fatal(pErr)
603+
}
560604

561-
if tc.subBucketExistDstBucket {
562-
// create subBucket within dstBucket
563-
_, sErr := dstBucket.CreateBucket([]byte(tc.subBucketName))
564-
if sErr != nil {
565-
t.Fatal(sErr)
605+
if tc.subBucketExistDstBucket {
606+
// create subBucket within dstBucket
607+
_, sErr := dstBucket.CreateBucket([]byte(tc.subBucketName))
608+
if sErr != nil {
609+
t.Fatal(sErr)
610+
}
566611
}
567-
}
568612

569-
if tc.keyNoSubBucketDstBucket {
570-
if pErr := dstBucket.Put([]byte(tc.subBucketName), []byte(tc.subBucketValue)); pErr != nil {
571-
t.Fatal(pErr)
613+
if tc.keyNoSubBucketDstBucket {
614+
if pErr := dstBucket.Put([]byte(tc.subBucketName), []byte(tc.subBucketValue)); pErr != nil {
615+
t.Fatal(pErr)
616+
}
572617
}
573618
}
574619

@@ -581,12 +626,12 @@ func TestTx_MoveBucket(t *testing.T) {
581626
// act: move the subBucket from srcBucket to dstBucket
582627
if err := db.Update(func(tx *bolt.Tx) error {
583628
srcBucket := tx.Bucket([]byte(tc.srcBucketName))
584-
if srcBucket == nil {
629+
if srcBucket == nil && !tc.srcBucketIsRootBucket {
585630
t.Fatalf("src bucket %s does not exist: %v", tc.srcBucketName, berrors.ErrBucketNotFound)
586631
}
587632

588633
dstBucket := tx.Bucket([]byte(tc.dstBucketName))
589-
if dstBucket == nil {
634+
if dstBucket == nil && !tc.dstBucketIsRootBucket {
590635
t.Fatalf("dst bucket %s does not exist: %v", tc.dstBucketName, berrors.ErrBucketNotFound)
591636
}
592637

@@ -611,24 +656,49 @@ func TestTx_MoveBucket(t *testing.T) {
611656

612657
// assert: check subBucket has been deleted from srcBucket, and exists in dstBucket
613658
if err := db.View(func(tx *bolt.Tx) error {
614-
rootCur := tx.Cursor()
615-
k, _ := rootCur.Seek([]byte(tc.subBucketName))
616-
if bytes.Equal([]byte(tc.subBucketName), k) {
617-
t.Fatalf("key %q still exists in the root bucket: %v", tc.subBucketName, berrors.ErrIncompatibleValue)
618-
}
659+
if !tc.srcBucketIsRootBucket {
660+
srcBucket := tx.Bucket([]byte(tc.srcBucketName))
661+
if srcBucket == nil {
662+
t.Fatalf("src bucket %s does not exist: %v", tc.srcBucketName, berrors.ErrBucketNotFound)
663+
}
619664

620-
dstBucket := tx.Bucket([]byte(tc.dstBucketName))
621-
if dstBucket == nil {
622-
t.Fatalf("dst bucket %s does not exist: %v", tc.dstBucketName, berrors.ErrBucketNotFound)
623-
}
624-
v := dstBucket.Get([]byte(tc.subBucketName))
625-
if v != nil {
626-
t.Fatalf("expected nil value, as the key is nested bucket, got %v instead", v)
665+
srcCur := srcBucket.Cursor()
666+
k, _ := srcCur.Seek([]byte(tc.subBucketName))
667+
if bytes.Equal([]byte(tc.subBucketName), k) {
668+
t.Fatalf("key %q still exists in the srcBucket %s : %v", tc.subBucketName, tc.srcBucketName, berrors.ErrIncompatibleValue)
669+
}
670+
} else {
671+
subBucket := tx.Bucket([]byte(tc.subBucketName))
672+
if subBucket != nil {
673+
t.Fatalf("expected subBucket '%s' to be moved, but still exist in rootBucket", tc.subBucketName)
674+
}
627675
}
628-
subBucket := dstBucket.Bucket([]byte(tc.subBucketName))
629-
v = subBucket.Get([]byte(tc.subBucketKey))
630-
if v == nil {
631-
t.Fatalf("expected value %v, but got %v instead", tc.subBucketValue, v)
676+
677+
if !tc.dstBucketIsRootBucket {
678+
dstBucket := tx.Bucket([]byte(tc.dstBucketName))
679+
if dstBucket == nil {
680+
t.Fatalf("dst bucket %s does not exist: %v", tc.dstBucketName, berrors.ErrBucketNotFound)
681+
}
682+
683+
v := dstBucket.Get([]byte(tc.subBucketName))
684+
if v != nil {
685+
t.Fatalf("expected nil value, as the key is nested bucket, got %v instead", v)
686+
}
687+
subBucket := dstBucket.Bucket([]byte(tc.subBucketName))
688+
v = subBucket.Get([]byte(tc.subBucketKey))
689+
if v == nil {
690+
t.Fatalf("expected value %v, but got %v instead", tc.subBucketValue, v)
691+
}
692+
} else {
693+
subBucket := tx.Bucket([]byte(tc.subBucketName))
694+
if subBucket == nil {
695+
t.Fatalf("dst bucket %s does not exist in rootBucket: %v", tc.subBucketName, berrors.ErrBucketNotFound)
696+
}
697+
698+
v := subBucket.Get([]byte(tc.subBucketKey))
699+
if v == nil {
700+
t.Fatalf("expected value %v, but got %v instead", tc.subBucketValue, v)
701+
}
632702
}
633703

634704
return nil

0 commit comments

Comments
 (0)