package remotedb_test import ( "net" "testing" "github.com/stretchr/testify/require" "github.com/tendermint/tmlibs/grpcdb" "github.com/tendermint/tmlibs/remotedb" ) func TestRemoteDB(t *testing.T) { cert := "::.crt" key := "::.key" ln, err := net.Listen("tcp", "0.0.0.0:0") require.Nil(t, err, "expecting a port to have been assigned on which we can listen") srv, err := grpcdb.NewServer(cert, key) require.Nil(t, err) defer srv.Stop() go func() { if err := srv.Serve(ln); err != nil { t.Fatalf("BindServer: %v", err) } }() client, err := remotedb.NewRemoteDB(ln.Addr().String(), cert) require.Nil(t, err, "expecting a successful client creation") require.Nil(t, client.InitRemote(&remotedb.Init{Name: "test-remote-db", Type: "leveldb"})) k1 := []byte("key-1") v1 := client.Get(k1) require.Equal(t, 0, len(v1), "expecting no key1 to have been stored") vv1 := []byte("value-1") client.Set(k1, vv1) gv1 := client.Get(k1) require.Equal(t, gv1, vv1) // Simple iteration itr := client.Iterator(nil, nil) itr.Next() require.Equal(t, itr.Key(), []byte("key-1")) require.Equal(t, itr.Value(), []byte("value-1")) require.Panics(t, itr.Next) itr.Close() // Set some more keys k2 := []byte("key-2") v2 := []byte("value-2") client.Set(k2, v2) gv2 := client.Get(k2) require.Equal(t, gv2, v2) // More iteration itr = client.Iterator(nil, nil) itr.Next() require.Equal(t, itr.Key(), []byte("key-1")) require.Equal(t, itr.Value(), []byte("value-1")) itr.Next() require.Equal(t, itr.Key(), []byte("key-2")) require.Equal(t, itr.Value(), []byte("value-2")) require.Panics(t, itr.Next) // Deletion client.Delete(k1) client.Delete(k2) gv1 = client.Get(k1) gv2 = client.Get(k2) require.Equal(t, len(gv2), 0, "after deletion, not expecting the key to exist anymore") require.Equal(t, len(gv1), 0, "after deletion, not expecting the key to exist anymore") // TODO Batch tests }