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.

91 lines
1.8 KiB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
  1. package dummy
  2. import (
  3. "testing"
  4. "time"
  5. . "github.com/tendermint/go-common"
  6. "github.com/tendermint/tmsp/server"
  7. "github.com/tendermint/tmsp/types"
  8. )
  9. func TestStream(t *testing.T) {
  10. numAppendTxs := 200000
  11. // Start the listener
  12. _, err := server.NewServer("tcp://127.0.0.1:46658", NewDummyApplication())
  13. if err != nil {
  14. Exit(err.Error())
  15. }
  16. // Connect to the socket
  17. conn, err := Connect("tcp://127.0.0.1:46658")
  18. if err != nil {
  19. Exit(err.Error())
  20. }
  21. // Read response data
  22. done := make(chan struct{})
  23. go func() {
  24. counter := 0
  25. for {
  26. var res = &types.Response{}
  27. err := types.ReadMessage(conn, res)
  28. if err != nil {
  29. Exit(err.Error())
  30. }
  31. // Process response
  32. switch res.Type {
  33. case types.MessageType_AppendTx:
  34. counter += 1
  35. if res.Code != types.CodeType_OK {
  36. t.Error("AppendTx failed with ret_code", res.Code)
  37. }
  38. if counter > numAppendTxs {
  39. t.Fatal("Too many AppendTx responses")
  40. }
  41. t.Log("response", counter)
  42. if counter == numAppendTxs {
  43. go func() {
  44. time.Sleep(time.Second * 2) // Wait for a bit to allow counter overflow
  45. close(done)
  46. }()
  47. }
  48. case types.MessageType_Flush:
  49. // ignore
  50. default:
  51. t.Error("Unexpected response type", res.Type)
  52. }
  53. }
  54. }()
  55. // Write requests
  56. for counter := 0; counter < numAppendTxs; counter++ {
  57. // Send request
  58. var req = types.RequestAppendTx([]byte("test"))
  59. err := types.WriteMessage(req, conn)
  60. if err != nil {
  61. t.Fatal(err.Error())
  62. }
  63. // Sometimes send flush messages
  64. if counter%123 == 0 {
  65. t.Log("flush")
  66. err := types.WriteMessage(types.RequestFlush(), conn)
  67. if err != nil {
  68. t.Fatal(err.Error())
  69. }
  70. }
  71. }
  72. // Send final flush message
  73. err = types.WriteMessage(types.RequestFlush(), conn)
  74. if err != nil {
  75. t.Fatal(err.Error())
  76. }
  77. <-done
  78. }