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  }