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 }