github.com/MetalBlockchain/metalgo@v1.11.9/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/MetalBlockchain/metalgo/chains/atomic" 13 "github.com/MetalBlockchain/metalgo/database" 14 "github.com/MetalBlockchain/metalgo/database/memdb" 15 "github.com/MetalBlockchain/metalgo/database/prefixdb" 16 "github.com/MetalBlockchain/metalgo/ids" 17 "github.com/MetalBlockchain/metalgo/vms/rpcchainvm/grpcutils" 18 19 sharedmemorypb "github.com/MetalBlockchain/metalgo/proto/pb/sharedmemory" 20 ) 21 22 func TestInterface(t *testing.T) { 23 require := require.New(t) 24 25 chainID0 := ids.GenerateTestID() 26 chainID1 := ids.GenerateTestID() 27 28 for _, test := range atomic.SharedMemoryTests { 29 baseDB := memdb.New() 30 memoryDB := prefixdb.New([]byte{0}, baseDB) 31 testDB := prefixdb.New([]byte{1}, baseDB) 32 33 m := atomic.NewMemory(memoryDB) 34 35 sm0, conn0 := wrapSharedMemory(t, m.NewSharedMemory(chainID0), baseDB) 36 sm1, conn1 := wrapSharedMemory(t, m.NewSharedMemory(chainID1), baseDB) 37 38 test(t, chainID0, chainID1, sm0, sm1, testDB) 39 40 require.NoError(conn0.Close()) 41 require.NoError(conn1.Close()) 42 } 43 } 44 45 func wrapSharedMemory(t *testing.T, sm atomic.SharedMemory, db database.Database) (atomic.SharedMemory, io.Closer) { 46 require := require.New(t) 47 48 listener, err := grpcutils.NewListener() 49 require.NoError(err) 50 serverCloser := grpcutils.ServerCloser{} 51 52 server := grpcutils.NewServer() 53 sharedmemorypb.RegisterSharedMemoryServer(server, NewServer(sm, db)) 54 serverCloser.Add(server) 55 56 go grpcutils.Serve(listener, server) 57 58 conn, err := grpcutils.Dial(listener.Addr().String()) 59 require.NoError(err) 60 61 rpcsm := NewClient(sharedmemorypb.NewSharedMemoryClient(conn)) 62 return rpcsm, conn 63 }