github.com/tri-stone/burrow@v0.25.0/consensus/abci/peers_filter_test.go (about) 1 package abci 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hyperledger/burrow/logging" 8 9 "github.com/hyperledger/burrow/consensus/tendermint/codes" 10 "github.com/stretchr/testify/assert" 11 "github.com/tendermint/tendermint/abci/types" 12 abciTypes "github.com/tendermint/tendermint/abci/types" 13 ) 14 15 const ( 16 aNodeId = "836AB8674A33416718E5A19557A25ED826B2BDD3" 17 aNodeAddress = "127.0.0.1:26656" 18 ) 19 20 func TestApp_QueryAuthorizedPeers(t *testing.T) { 21 var panicked bool 22 app := &App{ 23 panicFunc: func(e error) { 24 panicked = true 25 }, 26 // Given no authorized node defined 27 authorizedPeersProvider: func() ([]string, []string) { 28 return []string{}, []string{} 29 }, 30 logger: logging.NewNoopLogger(), 31 } 32 33 // When authorized node query is raised with any node id 34 resp := app.Query(*makeTestFilterQuery("id", aNodeId)) 35 36 // Then we should authorized any node 37 assert.NotNil(t, resp) 38 assert.Equal(t, codes.PeerFilterAuthorizedCode, resp.Code) 39 40 // Given authorized nodes defined 41 app.authorizedPeersProvider = func() ([]string, []string) { 42 return []string{aNodeId}, []string{aNodeAddress} 43 } 44 45 // When authorized node query is raised for an authorized node by id 46 resp = app.Query(*makeTestFilterQuery("id", aNodeId)) 47 48 // Then we should authorize it 49 assert.NotNil(t, resp) 50 assert.Equal(t, codes.PeerFilterAuthorizedCode, resp.Code) 51 52 // When authorized node query is raised for another node by id 53 resp = app.Query(*makeTestFilterQuery("id", "forbiddenId")) 54 55 // Then we should forbid this node to sync 56 assert.NotNil(t, resp) 57 assert.Equal(t, codes.PeerFilterForbiddenCode, resp.Code) 58 59 // When authorized node query is raised for an authorized node by address 60 resp = app.Query(*makeTestFilterQuery("addr", aNodeAddress)) 61 62 // Then we should authorize it 63 assert.NotNil(t, resp) 64 assert.Equal(t, codes.PeerFilterAuthorizedCode, resp.Code) 65 66 // When authorized node query is raised for another node 67 resp = app.Query(*makeTestFilterQuery("addr", "forbiddenAddress")) 68 69 // Then we should forbid this node to sync 70 assert.NotNil(t, resp) 71 assert.Equal(t, codes.PeerFilterForbiddenCode, resp.Code) 72 73 // Given a provider which panics 74 assert.False(t, panicked) 75 app.authorizedPeersProvider = func() ([]string, []string) { 76 panic("ouch") 77 } 78 79 // When authorized node query is raised 80 resp = app.Query(*makeTestFilterQuery("addr", "hackMe")) 81 82 // The we should recover and mark the query as unsupported, so the node cannot sync 83 assert.True(t, panicked) 84 assert.NotNil(t, resp) 85 assert.Equal(t, codes.UnsupportedRequestCode, resp.Code) 86 } 87 88 func TestIsPeersFilterQuery(t *testing.T) { 89 assert.True(t, isPeersFilterQuery(makeTestFilterQuery("id", aNodeId))) 90 assert.True(t, isPeersFilterQuery(makeTestFilterQuery("addr", aNodeAddress))) 91 assert.False(t, isPeersFilterQuery(makeTestQuery("/another/query"))) 92 } 93 94 func makeTestFilterQuery(filterType string, peer string) *abciTypes.RequestQuery { 95 return makeTestQuery(fmt.Sprintf("%v%v/%v", peersFilterQueryPath, filterType, peer)) 96 } 97 98 func makeTestQuery(path string) *types.RequestQuery { 99 return &abciTypes.RequestQuery{ 100 Path: path, 101 } 102 }