github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/tm-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/fibonacci-chain/fbc/libs/tm-db/remotedb" 11 "github.com/fibonacci-chain/fbc/libs/tm-db/remotedb/grpcdb" 12 ) 13 14 func TestRemoteDB(t *testing.T) { 15 cert := "test.crt" 16 key := "test.key" 17 ln, err := net.Listen("tcp", "localhost: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() { //nolint:staticcheck 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: "goleveldb"})) 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, err := client.Get(k1) 41 require.NoError(t, err) 42 require.Equal(t, 0, len(v1), "expecting no key1 to have been stored, got %X (%s)", v1, v1) 43 vv1 := []byte("value-1") 44 err = client.Set(k1, vv1) 45 require.NoError(t, err) 46 47 gv1, err := client.Get(k1) 48 require.NoError(t, err) 49 require.Equal(t, gv1, vv1) 50 51 // Simple iteration 52 itr, err := client.Iterator(nil, nil) 53 require.NoError(t, err) 54 55 itr.Next() 56 57 key1 := itr.Key() 58 value := itr.Value() 59 60 require.Equal(t, key1, []byte("key-1")) 61 require.Equal(t, value, []byte("value-1")) 62 itr.Close() 63 64 // Set some more keys 65 k2 := []byte("key-2") 66 v2 := []byte("value-2") 67 err = client.SetSync(k2, v2) 68 require.NoError(t, err) 69 has, err := client.Has(k2) 70 require.NoError(t, err) 71 require.True(t, has) 72 gv2, err := client.Get(k2) 73 require.NoError(t, err) 74 require.Equal(t, gv2, v2) 75 76 // More iteration 77 itr, err = client.Iterator(nil, nil) 78 require.NoError(t, err) 79 80 itr.Next() 81 82 key1 = itr.Key() 83 84 value = itr.Value() 85 86 require.Equal(t, key1, []byte("key-1")) 87 require.Equal(t, value, []byte("value-1")) 88 itr.Next() 89 90 key1 = itr.Key() 91 92 value = itr.Value() 93 require.Equal(t, key1, []byte("key-2")) 94 require.Equal(t, value, []byte("value-2")) 95 itr.Close() 96 97 // Deletion 98 err = client.Delete(k1) 99 require.NoError(t, err) 100 err = client.DeleteSync(k2) 101 require.NoError(t, err) 102 gv1, err = client.Get(k1) 103 require.NoError(t, err) 104 gv2, err = client.Get(k2) 105 require.NoError(t, err) 106 require.Equal(t, len(gv2), 0, "after deletion, not expecting the key to exist anymore") 107 require.Equal(t, len(gv1), 0, "after deletion, not expecting the key to exist anymore") 108 109 // Batch tests - set 110 k3 := []byte("key-3") 111 k4 := []byte("key-4") 112 k5 := []byte("key-5") 113 v3 := []byte("value-3") 114 v4 := []byte("value-4") 115 v5 := []byte("value-5") 116 bat := client.NewBatch() 117 bat.Set(k3, v3) 118 bat.Set(k4, v4) 119 120 rv3, err := client.Get(k3) 121 require.NoError(t, err) 122 require.Equal(t, 0, len(rv3), "expecting no k3 to have been stored") 123 124 rv4, err := client.Get(k4) 125 require.NoError(t, err) 126 require.Equal(t, 0, len(rv4), "expecting no k4 to have been stored") 127 err = bat.Write() 128 require.NoError(t, err) 129 130 rv3, err = client.Get(k3) 131 require.NoError(t, err) 132 require.Equal(t, rv3, v3, "expecting k3 to have been stored") 133 134 rv4, err = client.Get(k4) 135 require.NoError(t, err) 136 require.Equal(t, rv4, v4, "expecting k4 to have been stored") 137 138 // Batch tests - deletion 139 bat = client.NewBatch() 140 bat.Delete(k4) 141 bat.Delete(k3) 142 err = bat.WriteSync() 143 require.NoError(t, err) 144 145 rv3, err = client.Get(k3) 146 require.NoError(t, err) 147 require.Equal(t, 0, len(rv3), "expecting k3 to have been deleted") 148 149 rv4, err = client.Get(k4) 150 require.NoError(t, err) 151 require.Equal(t, 0, len(rv4), "expecting k4 to have been deleted") 152 153 // Batch tests - set and delete 154 bat = client.NewBatch() 155 bat.Set(k4, v4) 156 bat.Set(k5, v5) 157 bat.Delete(k4) 158 err = bat.WriteSync() 159 require.NoError(t, err) 160 161 rv4, err = client.Get(k4) 162 require.NoError(t, err) 163 require.Equal(t, 0, len(rv4), "expecting k4 to have been deleted") 164 165 rv5, err := client.Get(k5) 166 require.NoError(t, err) 167 require.Equal(t, rv5, v5, "expecting k5 to have been stored") 168 }