You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.8 KiB

  1. /*
  2. package mock returns a Client implementation that
  3. accepts various (mock) implementations of the various methods.
  4. This implementation is useful for using in tests, when you don't
  5. need a real server, but want a high-level of control about
  6. the server response you want to mock (eg. error handling),
  7. or if you just want to record the calls to verify in your tests.
  8. For real clients, you probably want the "http" package. If you
  9. want to directly call a tendermint node in process, you can use the
  10. "local" package.
  11. */
  12. package mock
  13. import (
  14. "reflect"
  15. data "github.com/tendermint/go-wire/data"
  16. "github.com/tendermint/tendermint/rpc/client"
  17. "github.com/tendermint/tendermint/rpc/core"
  18. ctypes "github.com/tendermint/tendermint/rpc/core/types"
  19. "github.com/tendermint/tendermint/types"
  20. )
  21. // Client wraps arbitrary implementations of the various interfaces.
  22. //
  23. // We provide a few choices to mock out each one in this package.
  24. // Nothing hidden here, so no New function, just construct it from
  25. // some parts, and swap them out them during the tests.
  26. type Client struct {
  27. client.ABCIClient
  28. client.SignClient
  29. client.HistoryClient
  30. client.StatusClient
  31. // create a mock with types.NewEventSwitch()
  32. types.EventSwitch
  33. }
  34. var _ client.Client = Client{}
  35. // Call is used by recorders to save a call and response.
  36. // It can also be used to configure mock responses.
  37. //
  38. type Call struct {
  39. Name string
  40. Args interface{}
  41. Response interface{}
  42. Error error
  43. }
  44. // GetResponse will generate the apporiate response for us, when
  45. // using the Call struct to configure a Mock handler.
  46. //
  47. // When configuring a response, if only one of Response or Error is
  48. // set then that will always be returned. If both are set, then
  49. // we return Response if the Args match the set args, Error otherwise.
  50. func (c Call) GetResponse(args interface{}) (interface{}, error) {
  51. // handle the case with no response
  52. if c.Response == nil {
  53. if c.Error == nil {
  54. panic("Misconfigured call, you must set either Response or Error")
  55. }
  56. return nil, c.Error
  57. }
  58. // response without error
  59. if c.Error == nil {
  60. return c.Response, nil
  61. }
  62. // have both, we must check args....
  63. if reflect.DeepEqual(args, c.Args) {
  64. return c.Response, nil
  65. }
  66. return nil, c.Error
  67. }
  68. func (c Client) Status() (*ctypes.ResultStatus, error) {
  69. return core.Status()
  70. }
  71. func (c Client) ABCIInfo() (*ctypes.ResultABCIInfo, error) {
  72. return core.ABCIInfo()
  73. }
  74. func (c Client) ABCIQuery(path string, data data.Bytes) (*ctypes.ResultABCIQuery, error) {
  75. return c.ABCIQueryWithOptions(path, data, client.DefaultABCIQueryOptions)
  76. }
  77. func (c Client) ABCIQueryWithOptions(path string, data data.Bytes, opts client.ABCIQueryOptions) (*ctypes.ResultABCIQuery, error) {
  78. return core.ABCIQuery(path, data, opts.Height, opts.Trusted)
  79. }
  80. func (c Client) BroadcastTxCommit(tx types.Tx) (*ctypes.ResultBroadcastTxCommit, error) {
  81. return core.BroadcastTxCommit(tx)
  82. }
  83. func (c Client) BroadcastTxAsync(tx types.Tx) (*ctypes.ResultBroadcastTx, error) {
  84. return core.BroadcastTxAsync(tx)
  85. }
  86. func (c Client) BroadcastTxSync(tx types.Tx) (*ctypes.ResultBroadcastTx, error) {
  87. return core.BroadcastTxSync(tx)
  88. }
  89. func (c Client) NetInfo() (*ctypes.ResultNetInfo, error) {
  90. return core.NetInfo()
  91. }
  92. func (c Client) DialSeeds(seeds []string) (*ctypes.ResultDialSeeds, error) {
  93. return core.UnsafeDialSeeds(seeds)
  94. }
  95. func (c Client) BlockchainInfo(minHeight, maxHeight int) (*ctypes.ResultBlockchainInfo, error) {
  96. return core.BlockchainInfo(minHeight, maxHeight)
  97. }
  98. func (c Client) Genesis() (*ctypes.ResultGenesis, error) {
  99. return core.Genesis()
  100. }
  101. func (c Client) Block(height *int) (*ctypes.ResultBlock, error) {
  102. return core.Block(height)
  103. }
  104. func (c Client) Commit(height *int) (*ctypes.ResultCommit, error) {
  105. return core.Commit(height)
  106. }
  107. func (c Client) Validators(height *int) (*ctypes.ResultValidators, error) {
  108. return core.Validators(height)
  109. }