github.com/ava-labs/avalanchego@v1.11.11/chains/atomic/gsharedmemory/shared_memory_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package gsharedmemory 5 6 import ( 7 "io" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/ava-labs/avalanchego/chains/atomic" 13 "github.com/ava-labs/avalanchego/chains/atomic/atomictest" 14 "github.com/ava-labs/avalanchego/database" 15 "github.com/ava-labs/avalanchego/database/memdb" 16 "github.com/ava-labs/avalanchego/database/prefixdb" 17 "github.com/ava-labs/avalanchego/ids" 18 "github.com/ava-labs/avalanchego/vms/rpcchainvm/grpcutils" 19 20 sharedmemorypb "github.com/ava-labs/avalanchego/proto/pb/sharedmemory" 21 ) 22 23 func TestInterface(t *testing.T) { 24 require := require.New(t) 25 26 chainID0 := ids.GenerateTestID() 27 chainID1 := ids.GenerateTestID() 28 29 for _, test := range atomictest.SharedMemoryTests { 30 baseDB := memdb.New() 31 memoryDB := prefixdb.New([]byte{0}, baseDB) 32 testDB := prefixdb.New([]byte{1}, baseDB) 33 34 m := atomic.NewMemory(memoryDB) 35 36 sm0, conn0 := wrapSharedMemory(t, m.NewSharedMemory(chainID0), baseDB) 37 sm1, conn1 := wrapSharedMemory(t, m.NewSharedMemory(chainID1), baseDB) 38 39 test(t, chainID0, chainID1, sm0, sm1, testDB) 40 41 require.NoError(conn0.Close()) 42 require.NoError(conn1.Close()) 43 } 44 } 45 46 func wrapSharedMemory(t *testing.T, sm atomic.SharedMemory, db database.Database) (atomic.SharedMemory, io.Closer) { 47 require := require.New(t) 48 49 listener, err := grpcutils.NewListener() 50 require.NoError(err) 51 serverCloser := grpcutils.ServerCloser{} 52 53 server := grpcutils.NewServer() 54 sharedmemorypb.RegisterSharedMemoryServer(server, NewServer(sm, db)) 55 serverCloser.Add(server) 56 57 go grpcutils.Serve(listener, server) 58 59 conn, err := grpcutils.Dial(listener.Addr().String()) 60 require.NoError(err) 61 62 rpcsm := NewClient(sharedmemorypb.NewSharedMemoryClient(conn)) 63 return rpcsm, conn 64 }