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 }