Documentation ¶
Overview ¶
Provides test utility to mock a network in unittests
Index ¶
- Constants
- Variables
- func CreateNewMemoryEndpoint() *common.Endpoint
- func GenerateKey(dirPath, certPath, keyPath string)
- func RateLimitMiddleware(logger logging.Logger, rule common.RateLimitRule) mux.MiddlewareFunc
- func RecoverMiddleware(logger logging.Logger) mux.MiddlewareFunc
- func SetHTTPLogging(level logging.Lvl, handler logging.Handler)
- func SetLogging(level logging.Lvl, handler logging.Handler)
- type ConnectionManager
- type DiscoveryMessage
- func (dm DiscoveryMessage) Equal(common.Message) bool
- func (dm DiscoveryMessage) FilterUndiscovered(validators map[string]*node.Validator) []*node.Validator
- func (dm DiscoveryMessage) GetHash() string
- func (dm DiscoveryMessage) GetType() common.MessageType
- func (dm DiscoveryMessage) IsWellFormed(conf common.Config) error
- func (dm DiscoveryMessage) Serialize() ([]byte, error)
- func (dm *DiscoveryMessage) Sign(kp keypair.KP, networkID []byte)
- func (dm DiscoveryMessage) Source() string
- func (dm DiscoveryMessage) String() string
- func (dm DiscoveryMessage) Version() string
- type DiscoveryMessageBody
- type DiscoveryMessageHeader
- type HTTP2ErrorLog15Writer
- type HTTP2Log15Handler
- type HTTP2MessageBroker
- type HTTP2Network
- func (t *HTTP2Network) AddHandler(pattern string, handler http.HandlerFunc) (router *mux.Route)
- func (t *HTTP2Network) AddMiddleware(routerName string, mws ...mux.MiddlewareFunc) error
- func (t *HTTP2Network) Endpoint() *common.Endpoint
- func (t *HTTP2Network) GetClient(endpoint *common.Endpoint) NetworkClient
- func (t *HTTP2Network) IsReady() bool
- func (t *HTTP2Network) MessageBroker() MessageBroker
- func (t *HTTP2Network) Ready() error
- func (t *HTTP2Network) ReceiveChannel() chan common.NetworkMessage
- func (t *HTTP2Network) ReceiveMessage() <-chan common.NetworkMessage
- func (t *HTTP2Network) SetMessageBroker(mb MessageBroker)
- func (t *HTTP2Network) Start() (err error)
- func (t *HTTP2Network) Stop()
- type HTTP2NetworkClient
- func (c *HTTP2NetworkClient) Connect(n node.Node) (body []byte, err error)
- func (c *HTTP2NetworkClient) DefaultHeaders() http.Header
- func (c *HTTP2NetworkClient) Endpoint() *common.Endpoint
- func (client *HTTP2NetworkClient) Get(endpoint string) ([]byte, error)
- func (c *HTTP2NetworkClient) GetBallots() (retBody []byte, err error)
- func (c *HTTP2NetworkClient) GetNodeInfo() (body []byte, err error)
- func (c *HTTP2NetworkClient) GetTransactions(txs []string) (retBody []byte, err error)
- func (c *HTTP2NetworkClient) Send(path string, message interface{}) (retBody []byte, err error)
- func (c *HTTP2NetworkClient) SendBallot(message interface{}) (retBody []byte, err error)
- func (c *HTTP2NetworkClient) SendDiscovery(message interface{}) (retBody []byte, err error)
- func (c *HTTP2NetworkClient) SendMessage(message interface{}) (retBody []byte, err error)
- func (c *HTTP2NetworkClient) SendTransaction(message interface{}) (retBody []byte, err error)
- func (c *HTTP2NetworkClient) SetDefaultHeaders(headers http.Header)
- type HTTP2NetworkConfig
- type HTTP2ResponseLog15Writer
- func (l *HTTP2ResponseLog15Writer) Flush()
- func (l *HTTP2ResponseLog15Writer) Header() http.Header
- func (l *HTTP2ResponseLog15Writer) Size() int
- func (l *HTTP2ResponseLog15Writer) Status() int
- func (l *HTTP2ResponseLog15Writer) Write(b []byte) (int, error)
- func (l *HTTP2ResponseLog15Writer) WriteHeader(s int)
- type HandlerFunc
- type Handlers
- type KeyGenerator
- type MemoryMessageBroker
- type MemoryNetwork
- func (p *MemoryNetwork) AddHandler(string, http.HandlerFunc) *mux.Route
- func (p *MemoryNetwork) AddMiddleware(string, ...mux.MiddlewareFunc) error
- func (p *MemoryNetwork) Endpoint() *common.Endpoint
- func (t *MemoryNetwork) GetClient(endpoint *common.Endpoint) NetworkClient
- func (p *MemoryNetwork) GetNodeInfo() []byte
- func (p *MemoryNetwork) IsReady() bool
- func (p *MemoryNetwork) MessageBroker() MessageBroker
- func (prev *MemoryNetwork) NewMemoryNetwork() *MemoryNetwork
- func (p *MemoryNetwork) Ready() error
- func (p *MemoryNetwork) ReceiveChannel() chan common.NetworkMessage
- func (p *MemoryNetwork) ReceiveMessage() <-chan common.NetworkMessage
- func (p *MemoryNetwork) Send(mt common.MessageType, b []byte) (err error)
- func (p *MemoryNetwork) SetLocalNode(localNode *node.LocalNode)
- func (p *MemoryNetwork) SetMessageBroker(mb MessageBroker)
- func (p *MemoryNetwork) Start() error
- func (p *MemoryNetwork) Stop()
- type MemoryTransportClient
- func (m *MemoryTransportClient) Connect(node node.Node) (b []byte, err error)
- func (m *MemoryTransportClient) Endpoint() *common.Endpoint
- func (m *MemoryTransportClient) GetBallots() ([]byte, error)
- func (m *MemoryTransportClient) GetNodeInfo() ([]byte, error)
- func (m *MemoryTransportClient) GetTransactions([]string) ([]byte, error)
- func (m *MemoryTransportClient) SendBallot(message interface{}) (body []byte, err error)
- func (m *MemoryTransportClient) SendDiscovery(message interface{}) (body []byte, err error)
- func (m *MemoryTransportClient) SendMessage(message interface{}) (body []byte, err error)
- func (m *MemoryTransportClient) SendTransaction(message interface{}) (body []byte, err error)
- type MessageBroker
- type Network
- type NetworkClient
- type ValidatorConnectionManager
- func (c *ValidatorConnectionManager) AllConnected() []string
- func (c *ValidatorConnectionManager) AllValidators() []string
- func (c *ValidatorConnectionManager) Broadcast(message common.Message)
- func (c *ValidatorConnectionManager) CountConnected() int
- func (c *ValidatorConnectionManager) Discovery(dm DiscoveryMessage) error
- func (c *ValidatorConnectionManager) GetConnection(address string) (client NetworkClient)
- func (c *ValidatorConnectionManager) GetConnectionByEndpoint(endpoint *common.Endpoint) (client NetworkClient)
- func (c *ValidatorConnectionManager) IsReady() bool
- func (c *ValidatorConnectionManager) Start()
Constants ¶
const ( RouterNameNode = "node" RouterNameAPI = "api" RouterNameMetric = "metrics" RouterNameDebug = "debug" )
Variables ¶
var ( UrlPathPrefixNode = fmt.Sprintf("/%s", RouterNameNode) UrlPathPrefixAPI = fmt.Sprintf("/%s", RouterNameAPI) UrlPathPrefixDebug = fmt.Sprintf("/%s", RouterNameDebug) UrlPathPrefixMetric = fmt.Sprintf("/%s", RouterNameMetric) UrlPathPrefixes = []string{ UrlPathPrefixNode, UrlPathPrefixAPI, UrlPathPrefixDebug, UrlPathPrefixMetric, } )
var HeaderKeyFiltered []string = []string{
"Content-Length",
"Content-Type",
"Accept",
"Accept-Encoding",
"User-Agent",
}
var VerboseLogs bool
Functions ¶
func CreateNewMemoryEndpoint ¶
func GenerateKey ¶
func GenerateKey(dirPath, certPath, keyPath string)
func RateLimitMiddleware ¶
func RateLimitMiddleware(logger logging.Logger, rule common.RateLimitRule) mux.MiddlewareFunc
RateLimitMiddleware throttles the incoming requests; if `Limit` is 0, there will be no limit.
func RecoverMiddleware ¶
func RecoverMiddleware(logger logging.Logger) mux.MiddlewareFunc
Types ¶
type ConnectionManager ¶
type ConnectionManager interface { GetConnection(string) NetworkClient Broadcast(common.Message) Start() AllConnected() []string AllValidators() []string CountConnected() int IsReady() bool Discovery(DiscoveryMessage) error }
func NewValidatorConnectionManager ¶
func NewValidatorConnectionManager( localNode *node.LocalNode, network Network, policy voting.ThresholdPolicy, config common.Config, ) ConnectionManager
type DiscoveryMessage ¶
type DiscoveryMessage struct { H DiscoveryMessageHeader B DiscoveryMessageBody }
func DiscoveryMessageFromJSON ¶
func DiscoveryMessageFromJSON(b []byte) (dm DiscoveryMessage, err error)
func NewDiscoveryMessage ¶
func (DiscoveryMessage) FilterUndiscovered ¶
func (dm DiscoveryMessage) FilterUndiscovered(validators map[string]*node.Validator) []*node.Validator
FilterUndiscovered returns,
- not yet registered validators
- registered, but endpoint is changed.
FilterUndiscovered can get the `node.LocalNode.GetValidators()` directly.
func (DiscoveryMessage) GetHash ¶
func (dm DiscoveryMessage) GetHash() string
func (DiscoveryMessage) GetType ¶
func (dm DiscoveryMessage) GetType() common.MessageType
func (DiscoveryMessage) IsWellFormed ¶
func (dm DiscoveryMessage) IsWellFormed(conf common.Config) error
func (DiscoveryMessage) Serialize ¶
func (dm DiscoveryMessage) Serialize() ([]byte, error)
func (DiscoveryMessage) Source ¶
func (dm DiscoveryMessage) Source() string
func (DiscoveryMessage) String ¶
func (dm DiscoveryMessage) String() string
func (DiscoveryMessage) Version ¶
func (dm DiscoveryMessage) Version() string
type DiscoveryMessageBody ¶
type DiscoveryMessageBody struct { Created string `json:"created"` Address string `json:"address"` // LocalNode.Address() Endpoint *common.Endpoint `json:"endpoint"` // LocalNode.publishEndpoint() Validators []*node.Validator `json:"validators"` }
func (DiscoveryMessageBody) MakeHashString ¶
func (db DiscoveryMessageBody) MakeHashString() string
type DiscoveryMessageHeader ¶
type DiscoveryMessageHeader struct {
Signature string `json:"signature"`
}
type HTTP2ErrorLog15Writer ¶
type HTTP2ErrorLog15Writer struct {
// contains filtered or unexported fields
}
type HTTP2Log15Handler ¶
type HTTP2Log15Handler struct {
// contains filtered or unexported fields
}
func (HTTP2Log15Handler) ServeHTTP ¶
func (l HTTP2Log15Handler) ServeHTTP(w http.ResponseWriter, r *http.Request)
ServeHTTP will log in 2 phase, when request received and response sent. This was derived from github.com/gorilla/handlers/handlers.go
type HTTP2MessageBroker ¶
type HTTP2MessageBroker struct {
// contains filtered or unexported fields
}
func (HTTP2MessageBroker) Receive ¶
func (r HTTP2MessageBroker) Receive(msg common.NetworkMessage)
type HTTP2Network ¶
type HTTP2Network struct {
// contains filtered or unexported fields
}
func NewHTTP2Network ¶
func NewHTTP2Network(config *HTTP2NetworkConfig) (h2n *HTTP2Network)
func (*HTTP2Network) AddHandler ¶
func (t *HTTP2Network) AddHandler(pattern string, handler http.HandlerFunc) (router *mux.Route)
func (*HTTP2Network) AddMiddleware ¶
func (t *HTTP2Network) AddMiddleware(routerName string, mws ...mux.MiddlewareFunc) error
func (*HTTP2Network) Endpoint ¶
func (t *HTTP2Network) Endpoint() *common.Endpoint
func (*HTTP2Network) GetClient ¶
func (t *HTTP2Network) GetClient(endpoint *common.Endpoint) NetworkClient
GetClient creates new keep-alive HTTP2 client
func (*HTTP2Network) IsReady ¶
func (t *HTTP2Network) IsReady() bool
func (*HTTP2Network) MessageBroker ¶
func (t *HTTP2Network) MessageBroker() MessageBroker
func (*HTTP2Network) Ready ¶
func (t *HTTP2Network) Ready() error
func (*HTTP2Network) ReceiveChannel ¶
func (t *HTTP2Network) ReceiveChannel() chan common.NetworkMessage
func (*HTTP2Network) ReceiveMessage ¶
func (t *HTTP2Network) ReceiveMessage() <-chan common.NetworkMessage
func (*HTTP2Network) SetMessageBroker ¶
func (t *HTTP2Network) SetMessageBroker(mb MessageBroker)
func (*HTTP2Network) Start ¶
func (t *HTTP2Network) Start() (err error)
Start will start `HTTP2Network`.
func (*HTTP2Network) Stop ¶
func (t *HTTP2Network) Stop()
type HTTP2NetworkClient ¶
type HTTP2NetworkClient struct {
// contains filtered or unexported fields
}
func NewHTTP2NetworkClient ¶
func NewHTTP2NetworkClient(endpoint *common.Endpoint, client *common.HTTP2Client) *HTTP2NetworkClient
func (*HTTP2NetworkClient) Connect ¶
func (c *HTTP2NetworkClient) Connect(n node.Node) (body []byte, err error)
func (*HTTP2NetworkClient) DefaultHeaders ¶
func (c *HTTP2NetworkClient) DefaultHeaders() http.Header
func (*HTTP2NetworkClient) Endpoint ¶
func (c *HTTP2NetworkClient) Endpoint() *common.Endpoint
func (*HTTP2NetworkClient) Get ¶
func (client *HTTP2NetworkClient) Get(endpoint string) ([]byte, error)
/ / Perform a raw Get request on this peer / / This is a quick way to request the API. / As APIs are rapidly evolving, wrapping all of them properly / would be counter productive, to this function is provided. / / Params: / endpoint = URL chunk to request (e.g. `/api/foo?bar=baguette`) / / Returns: / []byte = Body part returned by the query if it was successful / error = Error information if the query wasn't successful /
func (*HTTP2NetworkClient) GetBallots ¶
func (c *HTTP2NetworkClient) GetBallots() (retBody []byte, err error)
func (*HTTP2NetworkClient) GetNodeInfo ¶
func (c *HTTP2NetworkClient) GetNodeInfo() (body []byte, err error)
func (*HTTP2NetworkClient) GetTransactions ¶
func (c *HTTP2NetworkClient) GetTransactions(txs []string) (retBody []byte, err error)
func (*HTTP2NetworkClient) Send ¶
func (c *HTTP2NetworkClient) Send(path string, message interface{}) (retBody []byte, err error)
func (*HTTP2NetworkClient) SendBallot ¶
func (c *HTTP2NetworkClient) SendBallot(message interface{}) (retBody []byte, err error)
func (*HTTP2NetworkClient) SendDiscovery ¶
func (c *HTTP2NetworkClient) SendDiscovery(message interface{}) (retBody []byte, err error)
func (*HTTP2NetworkClient) SendMessage ¶
func (c *HTTP2NetworkClient) SendMessage(message interface{}) (retBody []byte, err error)
func (*HTTP2NetworkClient) SendTransaction ¶
func (c *HTTP2NetworkClient) SendTransaction(message interface{}) (retBody []byte, err error)
func (*HTTP2NetworkClient) SetDefaultHeaders ¶
func (c *HTTP2NetworkClient) SetDefaultHeaders(headers http.Header)
type HTTP2NetworkConfig ¶
type HTTP2NetworkConfig struct { NodeName string Endpoint *common.Endpoint Addr string ReadTimeout, ReadHeaderTimeout, WriteTimeout, IdleTimeout time.Duration TLSCertFile, TLSKeyFile string }
func NewHTTP2NetworkConfigFromEndpoint ¶
func NewHTTP2NetworkConfigFromEndpoint(nodeName string, endpoint *common.Endpoint) (config *HTTP2NetworkConfig, err error)
func (HTTP2NetworkConfig) IsHTTPS ¶
func (config HTTP2NetworkConfig) IsHTTPS() bool
func (HTTP2NetworkConfig) String ¶
func (config HTTP2NetworkConfig) String() string
type HTTP2ResponseLog15Writer ¶
type HTTP2ResponseLog15Writer struct {
// contains filtered or unexported fields
}
func (*HTTP2ResponseLog15Writer) Flush ¶
func (l *HTTP2ResponseLog15Writer) Flush()
func (*HTTP2ResponseLog15Writer) Header ¶
func (l *HTTP2ResponseLog15Writer) Header() http.Header
func (*HTTP2ResponseLog15Writer) Size ¶
func (l *HTTP2ResponseLog15Writer) Size() int
func (*HTTP2ResponseLog15Writer) Status ¶
func (l *HTTP2ResponseLog15Writer) Status() int
func (*HTTP2ResponseLog15Writer) Write ¶
func (l *HTTP2ResponseLog15Writer) Write(b []byte) (int, error)
func (*HTTP2ResponseLog15Writer) WriteHeader ¶
func (l *HTTP2ResponseLog15Writer) WriteHeader(s int)
type HandlerFunc ¶
type HandlerFunc func(w http.ResponseWriter, r *http.Request)
type KeyGenerator ¶
type KeyGenerator struct {
// contains filtered or unexported fields
}
func NewKeyGenerator ¶
func NewKeyGenerator(dirPath, certPath, keyPath string) *KeyGenerator
func (*KeyGenerator) Close ¶
func (g *KeyGenerator) Close()
func (*KeyGenerator) GetCertPath ¶
func (g *KeyGenerator) GetCertPath() string
func (*KeyGenerator) GetKeyPath ¶
func (g *KeyGenerator) GetKeyPath() string
type MemoryMessageBroker ¶
type MemoryMessageBroker struct { Messages []common.NetworkMessage // contains filtered or unexported fields }
func (*MemoryMessageBroker) Receive ¶
func (r *MemoryMessageBroker) Receive(m common.NetworkMessage)
type MemoryNetwork ¶
type MemoryNetwork struct {
// contains filtered or unexported fields
}
func CreateMemoryNetwork ¶
func CreateMemoryNetwork(prev *MemoryNetwork) (*MemoryNetwork, *node.LocalNode)
Create a MemoryNetwork for unittests purpose
If the argument `prev` is `nil`, a whole new network, disconnected from any other network, is created. If `prev` is not `nil`, the returned `MemoryNetwork` will be reachable from every node `prev` can reference
func (*MemoryNetwork) AddHandler ¶
func (p *MemoryNetwork) AddHandler(string, http.HandlerFunc) *mux.Route
func (*MemoryNetwork) AddMiddleware ¶
func (p *MemoryNetwork) AddMiddleware(string, ...mux.MiddlewareFunc) error
func (*MemoryNetwork) Endpoint ¶
func (p *MemoryNetwork) Endpoint() *common.Endpoint
func (*MemoryNetwork) GetClient ¶
func (t *MemoryNetwork) GetClient(endpoint *common.Endpoint) NetworkClient
func (*MemoryNetwork) GetNodeInfo ¶
func (p *MemoryNetwork) GetNodeInfo() []byte
func (*MemoryNetwork) IsReady ¶
func (p *MemoryNetwork) IsReady() bool
func (*MemoryNetwork) MessageBroker ¶
func (p *MemoryNetwork) MessageBroker() MessageBroker
func (*MemoryNetwork) NewMemoryNetwork ¶
func (prev *MemoryNetwork) NewMemoryNetwork() *MemoryNetwork
func (*MemoryNetwork) Ready ¶
func (p *MemoryNetwork) Ready() error
func (*MemoryNetwork) ReceiveChannel ¶
func (p *MemoryNetwork) ReceiveChannel() chan common.NetworkMessage
func (*MemoryNetwork) ReceiveMessage ¶
func (p *MemoryNetwork) ReceiveMessage() <-chan common.NetworkMessage
func (*MemoryNetwork) Send ¶
func (p *MemoryNetwork) Send(mt common.MessageType, b []byte) (err error)
func (*MemoryNetwork) SetLocalNode ¶
func (p *MemoryNetwork) SetLocalNode(localNode *node.LocalNode)
func (*MemoryNetwork) SetMessageBroker ¶
func (p *MemoryNetwork) SetMessageBroker(mb MessageBroker)
func (*MemoryNetwork) Start ¶
func (p *MemoryNetwork) Start() error
func (*MemoryNetwork) Stop ¶
func (p *MemoryNetwork) Stop()
type MemoryTransportClient ¶
type MemoryTransportClient struct {
// contains filtered or unexported fields
}
func NewMemoryNetworkClient ¶
func NewMemoryNetworkClient(endpoint *common.Endpoint, server *MemoryNetwork) *MemoryTransportClient
func (*MemoryTransportClient) Connect ¶
func (m *MemoryTransportClient) Connect(node node.Node) (b []byte, err error)
func (*MemoryTransportClient) Endpoint ¶
func (m *MemoryTransportClient) Endpoint() *common.Endpoint
func (*MemoryTransportClient) GetBallots ¶
func (m *MemoryTransportClient) GetBallots() ([]byte, error)
func (*MemoryTransportClient) GetNodeInfo ¶
func (m *MemoryTransportClient) GetNodeInfo() ([]byte, error)
func (*MemoryTransportClient) GetTransactions ¶
func (m *MemoryTransportClient) GetTransactions([]string) ([]byte, error)
func (*MemoryTransportClient) SendBallot ¶
func (m *MemoryTransportClient) SendBallot(message interface{}) (body []byte, err error)
func (*MemoryTransportClient) SendDiscovery ¶
func (m *MemoryTransportClient) SendDiscovery(message interface{}) (body []byte, err error)
func (*MemoryTransportClient) SendMessage ¶
func (m *MemoryTransportClient) SendMessage(message interface{}) (body []byte, err error)
func (*MemoryTransportClient) SendTransaction ¶
func (m *MemoryTransportClient) SendTransaction(message interface{}) (body []byte, err error)
type MessageBroker ¶
type Network ¶
type Network interface { Endpoint() *common.Endpoint GetClient(endpoint *common.Endpoint) NetworkClient AddHandler(string, http.HandlerFunc) *mux.Route AddMiddleware(string, ...mux.MiddlewareFunc) error // Starts network handling // Blocks until finished, either because of an error // or because `Stop` was called Start() error Stop() SetMessageBroker(MessageBroker) MessageBroker() MessageBroker Ready() error IsReady() bool ReceiveChannel() chan common.NetworkMessage ReceiveMessage() <-chan common.NetworkMessage }
type NetworkClient ¶
type NetworkClient interface { Endpoint() *common.Endpoint Connect(node node.Node) ([]byte, error) GetNodeInfo() ([]byte, error) SendMessage(interface{}) ([]byte, error) SendTransaction(interface{}) ([]byte, error) SendBallot(interface{}) ([]byte, error) SendDiscovery(interface{}) ([]byte, error) GetTransactions([]string) ([]byte, error) GetBallots() ([]byte, error) }
type ValidatorConnectionManager ¶
func (*ValidatorConnectionManager) AllConnected ¶
func (c *ValidatorConnectionManager) AllConnected() []string
func (*ValidatorConnectionManager) AllValidators ¶
func (c *ValidatorConnectionManager) AllValidators() []string
Returns:
A list of all validators
func (*ValidatorConnectionManager) Broadcast ¶
func (c *ValidatorConnectionManager) Broadcast(message common.Message)
func (*ValidatorConnectionManager) CountConnected ¶
func (c *ValidatorConnectionManager) CountConnected() int
Returns:
the number of validators which are currently connected
func (*ValidatorConnectionManager) Discovery ¶
func (c *ValidatorConnectionManager) Discovery(dm DiscoveryMessage) error
func (*ValidatorConnectionManager) GetConnection ¶
func (c *ValidatorConnectionManager) GetConnection(address string) (client NetworkClient)
func (*ValidatorConnectionManager) GetConnectionByEndpoint ¶
func (c *ValidatorConnectionManager) GetConnectionByEndpoint(endpoint *common.Endpoint) (client NetworkClient)
func (*ValidatorConnectionManager) IsReady ¶
func (c *ValidatorConnectionManager) IsReady() bool
func (*ValidatorConnectionManager) Start ¶
func (c *ValidatorConnectionManager) Start()