...

Source file src/go.etcd.io/bbolt/manydbs_test.go

Documentation: go.etcd.io/bbolt

     1  package bbolt
     2  
     3  import (
     4  	"fmt"
     5  	"math/rand"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  )
    10  
    11  func createDb(t *testing.T) (*DB, func()) {
    12  	// First, create a temporary directory to be used for the duration of
    13  	// this test.
    14  	tempDirName, err := os.MkdirTemp("", "bboltmemtest")
    15  	if err != nil {
    16  		t.Fatalf("error creating temp dir: %v", err)
    17  	}
    18  	path := filepath.Join(tempDirName, "testdb.db")
    19  
    20  	bdb, err := Open(path, 0600, nil)
    21  	if err != nil {
    22  		t.Fatalf("error creating bbolt db: %v", err)
    23  	}
    24  
    25  	cleanup := func() {
    26  		bdb.Close()
    27  		os.RemoveAll(tempDirName)
    28  	}
    29  
    30  	return bdb, cleanup
    31  }
    32  
    33  func createAndPutKeys(t *testing.T) {
    34  	t.Parallel()
    35  
    36  	db, cleanup := createDb(t)
    37  	defer cleanup()
    38  
    39  	bucketName := []byte("bucket")
    40  
    41  	for i := 0; i < 100; i++ {
    42  		err := db.Update(func(tx *Tx) error {
    43  			nodes, err := tx.CreateBucketIfNotExists(bucketName)
    44  			if err != nil {
    45  				return err
    46  			}
    47  
    48  			var key [16]byte
    49  			rand.Read(key[:])
    50  			if err := nodes.Put(key[:], nil); err != nil {
    51  				return err
    52  			}
    53  
    54  			return nil
    55  		})
    56  		if err != nil {
    57  			t.Fatal(err)
    58  		}
    59  	}
    60  }
    61  
    62  func TestManyDBs(t *testing.T) {
    63  	if testing.Short() {
    64  		t.Skip("skipping test in short mode")
    65  	}
    66  
    67  	for i := 0; i < 100; i++ {
    68  		t.Run(fmt.Sprintf("%d", i), createAndPutKeys)
    69  	}
    70  }
    71  

View as plain text