MCPcopy
hub / github.com/etcd-io/bbolt / TestBucket_Nested

Function TestBucket_Nested

bucket_test.go:471–554  ·  view source on GitHub ↗

Ensure that accessing and updating nested buckets is ok across transactions.

(t *testing.T)

Source from the content-addressed store, hash-verified

469
470// Ensure that accessing and updating nested buckets is ok across transactions.
471func TestBucket_Nested(t *testing.T) {
472 db := btesting.MustCreateDB(t)
473
474 if err := db.Update(func(tx *bolt.Tx) error {
475 // Create a widgets bucket.
476 b, err := tx.CreateBucket([]byte("widgets"))
477 if err != nil {
478 t.Fatal(err)
479 }
480
481 // Create a widgets/foo bucket.
482 _, err = b.CreateBucket([]byte("foo"))
483 if err != nil {
484 t.Fatal(err)
485 }
486
487 // Create a widgets/bar key.
488 if err := b.Put([]byte("bar"), []byte("0000")); err != nil {
489 t.Fatal(err)
490 }
491
492 return nil
493 }); err != nil {
494 t.Fatal(err)
495 }
496 db.MustCheck()
497
498 // Update widgets/bar.
499 if err := db.Update(func(tx *bolt.Tx) error {
500 b := tx.Bucket([]byte("widgets"))
501 if err := b.Put([]byte("bar"), []byte("xxxx")); err != nil {
502 t.Fatal(err)
503 }
504 return nil
505 }); err != nil {
506 t.Fatal(err)
507 }
508 db.MustCheck()
509
510 // Cause a split.
511 if err := db.Update(func(tx *bolt.Tx) error {
512 var b = tx.Bucket([]byte("widgets"))
513 for i := 0; i < 10000; i++ {
514 if err := b.Put([]byte(strconv.Itoa(i)), []byte(strconv.Itoa(i))); err != nil {
515 t.Fatal(err)
516 }
517 }
518 return nil
519 }); err != nil {
520 t.Fatal(err)
521 }
522 db.MustCheck()
523
524 // Insert into widgets/foo/baz.
525 if err := db.Update(func(tx *bolt.Tx) error {
526 var b = tx.Bucket([]byte("widgets"))
527 if err := b.Bucket([]byte("foo")).Put([]byte("baz"), []byte("yyyy")); err != nil {
528 t.Fatal(err)

Callers

nothing calls this directly

Calls 10

MustCreateDBFunction · 0.92
UpdateMethod · 0.80
MustCheckMethod · 0.80
ViewMethod · 0.80
FatalMethod · 0.65
FatalfMethod · 0.65
CreateBucketMethod · 0.45
PutMethod · 0.45
BucketMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected