github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/execution/exec/event_test.go (about) 1 package exec 2 3 import ( 4 "testing" 5 6 "github.com/hyperledger/burrow/binary" 7 "github.com/hyperledger/burrow/crypto" 8 "github.com/hyperledger/burrow/event" 9 "github.com/hyperledger/burrow/event/query" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 "github.com/tmthrgd/go-hex" 13 ) 14 15 func TestEventTagQueries(t *testing.T) { 16 ev := logEvent() 17 18 qb := query.NewBuilder().AndEquals(event.EventTypeKey, TypeLog.String()) 19 qry, err := qb.Query() 20 require.NoError(t, err) 21 assert.True(t, qry.Matches(ev)) 22 require.NoError(t, qry.MatchError()) 23 24 qb = qb.AndContains(event.EventIDKey, "bar") 25 qry, err = qb.Query() 26 require.NoError(t, err) 27 assert.True(t, qry.Matches(ev)) 28 require.NoError(t, qry.MatchError()) 29 30 qb = qb.AndEquals(event.TxHashKey, hex.EncodeUpperToString(ev.Header.TxHash)) 31 qry, err = qb.Query() 32 require.NoError(t, err) 33 assert.True(t, qry.Matches(ev)) 34 require.NoError(t, qry.MatchError()) 35 36 qb = qb.AndGreaterThanOrEqual(event.HeightKey, ev.Header.Height) 37 qry, err = qb.Query() 38 require.NoError(t, err) 39 assert.True(t, qry.Matches(ev)) 40 require.NoError(t, qry.MatchError()) 41 42 qb = qb.AndStrictlyLessThan(event.IndexKey, ev.Header.Index+1) 43 qry, err = qb.Query() 44 require.NoError(t, err) 45 assert.True(t, qry.Matches(ev)) 46 require.NoError(t, qry.MatchError()) 47 48 qb = qb.AndEquals(event.AddressKey, ev.Log.Address) 49 qry, err = qb.Query() 50 require.NoError(t, err) 51 assert.True(t, qry.Matches(ev)) 52 require.NoError(t, qry.MatchError()) 53 54 qb = qb.AndEquals(LogNTextKey(0), "marmot") 55 qry, err = qb.Query() 56 require.NoError(t, err) 57 assert.True(t, qry.Matches(ev)) 58 require.NoError(t, qry.MatchError()) 59 } 60 61 func BenchmarkMatching(b *testing.B) { 62 b.StopTimer() 63 ev := logEvent() 64 qb := query.NewBuilder().AndEquals(event.EventTypeKey, TypeLog.String()). 65 AndContains(event.EventIDKey, "bar"). 66 AndEquals(event.TxHashKey, hex.EncodeUpperToString(ev.Header.TxHash)). 67 AndGreaterThanOrEqual(event.HeightKey, ev.Header.Height). 68 AndStrictlyLessThan(event.IndexKey, ev.Header.Index+1). 69 AndEquals(event.AddressKey, ev.Log.Address). 70 AndEquals(LogNTextKey(0), "marmot") 71 qry, err := qb.Query() 72 require.NoError(b, err) 73 b.StartTimer() 74 for i := 0; i < b.N; i++ { 75 qry.Matches(ev) 76 } 77 } 78 79 func logEvent() *Event { 80 return &Event{ 81 Header: &Header{ 82 EventType: TypeLog, 83 EventID: "foo/bar", 84 TxHash: []byte{2, 3, 4}, 85 Height: 34, 86 Index: 2, 87 }, 88 Log: &LogEvent{ 89 Address: crypto.MustAddressFromHexString("DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF"), 90 Topics: []binary.Word256{binary.RightPadWord256([]byte("marmot"))}, 91 }, 92 } 93 }