github.com/tendermint/tmlibs@v0.9.0/db/remotedb/remotedb_test.go (about)

     1  package remotedb_test
     2  
     3  import (
     4  	"net"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/tendermint/tmlibs/db/remotedb"
    11  	"github.com/tendermint/tmlibs/db/remotedb/grpcdb"
    12  )
    13  
    14  func TestRemoteDB(t *testing.T) {
    15  	cert := "::.crt"
    16  	key := "::.key"
    17  	ln, err := net.Listen("tcp", "0.0.0.0:0")
    18  	require.Nil(t, err, "expecting a port to have been assigned on which we can listen")
    19  	srv, err := grpcdb.NewServer(cert, key)
    20  	require.Nil(t, err)
    21  	defer srv.Stop()
    22  	go func() {
    23  		if err := srv.Serve(ln); err != nil {
    24  			t.Fatalf("BindServer: %v", err)
    25  		}
    26  	}()
    27  
    28  	client, err := remotedb.NewRemoteDB(ln.Addr().String(), cert)
    29  	require.Nil(t, err, "expecting a successful client creation")
    30  	dbName := "test-remote-db"
    31  	require.Nil(t, client.InitRemote(&remotedb.Init{Name: dbName, Type: "leveldb"}))
    32  	defer func() {
    33  		err := os.RemoveAll(dbName + ".db")
    34  		if err != nil {
    35  			panic(err)
    36  		}
    37  	}()
    38  
    39  	k1 := []byte("key-1")
    40  	v1 := client.Get(k1)
    41  	require.Equal(t, 0, len(v1), "expecting no key1 to have been stored, got %X (%s)", v1, v1)
    42  	vv1 := []byte("value-1")
    43  	client.Set(k1, vv1)
    44  	gv1 := client.Get(k1)
    45  	require.Equal(t, gv1, vv1)
    46  
    47  	// Simple iteration
    48  	itr := client.Iterator(nil, nil)
    49  	itr.Next()
    50  	require.Equal(t, itr.Key(), []byte("key-1"))
    51  	require.Equal(t, itr.Value(), []byte("value-1"))
    52  	require.Panics(t, itr.Next)
    53  	itr.Close()
    54  
    55  	// Set some more keys
    56  	k2 := []byte("key-2")
    57  	v2 := []byte("value-2")
    58  	client.SetSync(k2, v2)
    59  	has := client.Has(k2)
    60  	require.True(t, has)
    61  	gv2 := client.Get(k2)
    62  	require.Equal(t, gv2, v2)
    63  
    64  	// More iteration
    65  	itr = client.Iterator(nil, nil)
    66  	itr.Next()
    67  	require.Equal(t, itr.Key(), []byte("key-1"))
    68  	require.Equal(t, itr.Value(), []byte("value-1"))
    69  	itr.Next()
    70  	require.Equal(t, itr.Key(), []byte("key-2"))
    71  	require.Equal(t, itr.Value(), []byte("value-2"))
    72  	require.Panics(t, itr.Next)
    73  	itr.Close()
    74  
    75  	// Deletion
    76  	client.Delete(k1)
    77  	client.DeleteSync(k2)
    78  	gv1 = client.Get(k1)
    79  	gv2 = client.Get(k2)
    80  	require.Equal(t, len(gv2), 0, "after deletion, not expecting the key to exist anymore")
    81  	require.Equal(t, len(gv1), 0, "after deletion, not expecting the key to exist anymore")
    82  
    83  	// Batch tests - set
    84  	k3 := []byte("key-3")
    85  	k4 := []byte("key-4")
    86  	k5 := []byte("key-5")
    87  	v3 := []byte("value-3")
    88  	v4 := []byte("value-4")
    89  	v5 := []byte("value-5")
    90  	bat := client.NewBatch()
    91  	bat.Set(k3, v3)
    92  	bat.Set(k4, v4)
    93  	rv3 := client.Get(k3)
    94  	require.Equal(t, 0, len(rv3), "expecting no k3 to have been stored")
    95  	rv4 := client.Get(k4)
    96  	require.Equal(t, 0, len(rv4), "expecting no k4 to have been stored")
    97  	bat.Write()
    98  	rv3 = client.Get(k3)
    99  	require.Equal(t, rv3, v3, "expecting k3 to have been stored")
   100  	rv4 = client.Get(k4)
   101  	require.Equal(t, rv4, v4, "expecting k4 to have been stored")
   102  
   103  	// Batch tests - deletion
   104  	bat = client.NewBatch()
   105  	bat.Delete(k4)
   106  	bat.Delete(k3)
   107  	bat.WriteSync()
   108  	rv3 = client.Get(k3)
   109  	require.Equal(t, 0, len(rv3), "expecting k3 to have been deleted")
   110  	rv4 = client.Get(k4)
   111  	require.Equal(t, 0, len(rv4), "expecting k4 to have been deleted")
   112  
   113  	// Batch tests - set and delete
   114  	bat = client.NewBatch()
   115  	bat.Set(k4, v4)
   116  	bat.Set(k5, v5)
   117  	bat.Delete(k4)
   118  	bat.WriteSync()
   119  	rv4 = client.Get(k4)
   120  	require.Equal(t, 0, len(rv4), "expecting k4 to have been deleted")
   121  	rv5 := client.Get(k5)
   122  	require.Equal(t, rv5, v5, "expecting k5 to have been stored")
   123  }