/src/ctl/v1/txnz_test.go

https://github.com/radondb/radon · Go · 97 lines · 74 code · 13 blank · 10 comment · 5 complexity · 54067d7bcac99c9f27e73c34edc0c0a8 MD5 · raw file

  1. /*
  2. * Radon
  3. *
  4. * Copyright 2018 The Radon Authors.
  5. * Code is licensed under the GPLv3.
  6. *
  7. */
  8. package v1
  9. import (
  10. "strings"
  11. "sync"
  12. "testing"
  13. "time"
  14. "proxy"
  15. "github.com/ant0ine/go-json-rest/rest"
  16. "github.com/ant0ine/go-json-rest/rest/test"
  17. "github.com/stretchr/testify/assert"
  18. "github.com/xelabs/go-mysqlstack/driver"
  19. "github.com/xelabs/go-mysqlstack/sqlparser/depends/sqltypes"
  20. "github.com/xelabs/go-mysqlstack/xlog"
  21. )
  22. func TestCtlV1Txnz(t *testing.T) {
  23. log := xlog.NewStdLog(xlog.Level(xlog.PANIC))
  24. fakedbs, proxy, cleanup := proxy.MockProxy(log)
  25. defer cleanup()
  26. address := proxy.Address()
  27. // fakedbs.
  28. {
  29. fakedbs.AddQueryPattern("create .*", &sqltypes.Result{})
  30. fakedbs.AddQueryPattern("select .*", &sqltypes.Result{})
  31. fakedbs.AddQueryDelay("select * from test.t1_0000 as t1", &sqltypes.Result{}, 1000)
  32. }
  33. // create database.
  34. {
  35. client, err := driver.NewConn("mock", "mock", address, "", "utf8")
  36. assert.Nil(t, err)
  37. query := "create database test"
  38. _, err = client.FetchAll(query, -1)
  39. assert.Nil(t, err)
  40. }
  41. // create test table.
  42. {
  43. client, err := driver.NewConn("mock", "mock", address, "", "utf8")
  44. assert.Nil(t, err)
  45. query := "create table test.t1(id int, b int) partition by hash(id)"
  46. _, err = client.FetchAll(query, -1)
  47. assert.Nil(t, err)
  48. }
  49. var wg sync.WaitGroup
  50. {
  51. wg.Add(2)
  52. go func() {
  53. defer wg.Done()
  54. client, err := driver.NewConn("mock", "mock", address, "", "utf8")
  55. assert.Nil(t, err)
  56. query := "select * from test.t1"
  57. _, err = client.FetchAll(query, -1)
  58. assert.Nil(t, err)
  59. }()
  60. go func() {
  61. defer wg.Done()
  62. client, err := driver.NewConn("mock", "mock", address, "", "utf8")
  63. assert.Nil(t, err)
  64. query := "select * from test.t1"
  65. _, err = client.FetchAll(query, -1)
  66. assert.Nil(t, err)
  67. }()
  68. }
  69. time.Sleep(time.Millisecond * 100)
  70. {
  71. api := rest.NewApi()
  72. router, _ := rest.MakeRouter(
  73. rest.Get("/v1/debug/txnz/:limit", TxnzHandler(log, proxy)),
  74. )
  75. api.SetApp(router)
  76. handler := api.MakeHandler()
  77. recorded := test.RunRequest(t, handler, test.MakeSimpleRequest("GET", "http://localhost/v1/debug/txnz/3", nil))
  78. recorded.CodeIs(200)
  79. got := recorded.Recorder.Body.String()
  80. log.Debug(got)
  81. assert.True(t, strings.Contains(got, "txnStateExecutingNormal"))
  82. }
  83. wg.Wait()
  84. }