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  }