github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/execution/engine/dispatcher_test.go (about)

     1  package engine
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/hyperledger/burrow/acm"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  type testDispatcher struct {
    12  	name      string
    13  	externals Dispatcher
    14  }
    15  
    16  func newDispatcher(name string) *testDispatcher {
    17  	return &testDispatcher{
    18  		name: name,
    19  	}
    20  }
    21  
    22  func (t *testDispatcher) SetExternals(externals Dispatcher) {
    23  	t.externals = externals
    24  }
    25  
    26  func (t *testDispatcher) String() string {
    27  	if t.externals != nil {
    28  		ds, ok := t.externals.(Dispatchers)
    29  		if ok {
    30  			var exts []string
    31  			for _, d := range ds {
    32  				td, ok := d.(*testDispatcher)
    33  				if ok {
    34  					exts = append(exts, td.name)
    35  				}
    36  			}
    37  			if len(exts) > 0 {
    38  				return fmt.Sprintf("%s -> %v", t.name, exts)
    39  			}
    40  		}
    41  	}
    42  	return t.name
    43  }
    44  
    45  func (t *testDispatcher) Dispatch(acc *acm.Account) Callable {
    46  	return nil
    47  }
    48  
    49  func TestNewDispatchers(t *testing.T) {
    50  	d1 := newDispatcher("1")
    51  	d2 := newDispatcher("2")
    52  	d3 := newDispatcher("3")
    53  
    54  	dd1 := NewDispatchers(d1, d2, d3)
    55  
    56  	require.Equal(t, "[1 2 3 1 2 3]", fmt.Sprint(NewDispatchers(dd1, dd1)))
    57  	require.Equal(t, "[1 2 3 1 3]", fmt.Sprint(NewDispatchers(dd1, d1, d3)))
    58  	require.Equal(t, "[3 1 1 2 3]", fmt.Sprint(NewDispatchers(d3, d1, dd1)))
    59  }
    60  
    61  func TestConnect(t *testing.T) {
    62  	d1 := newDispatcher("1")
    63  	d2 := newDispatcher("2")
    64  	d3 := newDispatcher("3")
    65  
    66  	// Check we don't panic
    67  	Connect()
    68  
    69  	// Does nothing but fine
    70  	Connect(d1)
    71  	require.Equal(t, "1", d1.String())
    72  
    73  	Connect(d1, d2)
    74  	require.Equal(t, "1 -> [2]", d1.String())
    75  	require.Equal(t, "2 -> [1]", d2.String())
    76  	require.Equal(t, "3", d3.String())
    77  
    78  	Connect(d1, d2, d3)
    79  	require.Equal(t, "1 -> [2 3]", d1.String())
    80  	require.Equal(t, "2 -> [3 1]", d2.String())
    81  	require.Equal(t, "3 -> [1 2]", d3.String())
    82  }