sql_engine_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package tsdb
  2. import (
  3. "testing"
  4. "time"
  5. . "github.com/smartystreets/goconvey/convey"
  6. )
  7. func TestSqlEngine(t *testing.T) {
  8. Convey("SqlEngine", t, func() {
  9. dt := time.Date(2018, 3, 14, 21, 20, 6, 527e6, time.UTC)
  10. Convey("Given row values with time.Time as time columns", func() {
  11. var nilPointer *time.Time
  12. fixtures := make([]interface{}, 3)
  13. fixtures[0] = dt
  14. fixtures[1] = &dt
  15. fixtures[2] = nilPointer
  16. for i := range fixtures {
  17. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  18. }
  19. Convey("When converting them should return epoch time with millisecond precision ", func() {
  20. expected := float64(dt.UnixNano() / 1e6)
  21. So(fixtures[0].(float64), ShouldEqual, expected)
  22. So(fixtures[1].(float64), ShouldEqual, expected)
  23. So(fixtures[2], ShouldBeNil)
  24. })
  25. })
  26. Convey("Given row values with int64 as time columns", func() {
  27. tSeconds := dt.Unix()
  28. tMilliseconds := dt.UnixNano() / 1e6
  29. tNanoSeconds := dt.UnixNano()
  30. var nilPointer *int64
  31. fixtures := make([]interface{}, 7)
  32. fixtures[0] = tSeconds
  33. fixtures[1] = &tSeconds
  34. fixtures[2] = tMilliseconds
  35. fixtures[3] = &tMilliseconds
  36. fixtures[4] = tNanoSeconds
  37. fixtures[5] = &tNanoSeconds
  38. fixtures[6] = nilPointer
  39. for i := range fixtures {
  40. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  41. }
  42. Convey("When converting them should return epoch time with millisecond precision ", func() {
  43. So(fixtures[0].(int64), ShouldEqual, tSeconds*1e3)
  44. So(fixtures[1].(int64), ShouldEqual, tSeconds*1e3)
  45. So(fixtures[2].(int64), ShouldEqual, tMilliseconds)
  46. So(fixtures[3].(int64), ShouldEqual, tMilliseconds)
  47. So(fixtures[4].(int64), ShouldEqual, tMilliseconds)
  48. So(fixtures[5].(int64), ShouldEqual, tMilliseconds)
  49. So(fixtures[6], ShouldBeNil)
  50. })
  51. })
  52. Convey("Given row values with uin64 as time columns", func() {
  53. tSeconds := uint64(dt.Unix())
  54. tMilliseconds := uint64(dt.UnixNano() / 1e6)
  55. tNanoSeconds := uint64(dt.UnixNano())
  56. var nilPointer *uint64
  57. fixtures := make([]interface{}, 7)
  58. fixtures[0] = tSeconds
  59. fixtures[1] = &tSeconds
  60. fixtures[2] = tMilliseconds
  61. fixtures[3] = &tMilliseconds
  62. fixtures[4] = tNanoSeconds
  63. fixtures[5] = &tNanoSeconds
  64. fixtures[6] = nilPointer
  65. for i := range fixtures {
  66. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  67. }
  68. Convey("When converting them should return epoch time with millisecond precision ", func() {
  69. So(fixtures[0].(int64), ShouldEqual, tSeconds*1e3)
  70. So(fixtures[1].(int64), ShouldEqual, tSeconds*1e3)
  71. So(fixtures[2].(int64), ShouldEqual, tMilliseconds)
  72. So(fixtures[3].(int64), ShouldEqual, tMilliseconds)
  73. So(fixtures[4].(int64), ShouldEqual, tMilliseconds)
  74. So(fixtures[5].(int64), ShouldEqual, tMilliseconds)
  75. So(fixtures[6], ShouldBeNil)
  76. })
  77. })
  78. Convey("Given row values with int32 as time columns", func() {
  79. tSeconds := int32(dt.Unix())
  80. var nilInt *int32
  81. fixtures := make([]interface{}, 3)
  82. fixtures[0] = tSeconds
  83. fixtures[1] = &tSeconds
  84. fixtures[2] = nilInt
  85. for i := range fixtures {
  86. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  87. }
  88. Convey("When converting them should return epoch time with millisecond precision ", func() {
  89. So(fixtures[0].(int64), ShouldEqual, dt.Unix()*1e3)
  90. So(fixtures[1].(int64), ShouldEqual, dt.Unix()*1e3)
  91. So(fixtures[2], ShouldBeNil)
  92. })
  93. })
  94. Convey("Given row values with uint32 as time columns", func() {
  95. tSeconds := uint32(dt.Unix())
  96. var nilInt *uint32
  97. fixtures := make([]interface{}, 3)
  98. fixtures[0] = tSeconds
  99. fixtures[1] = &tSeconds
  100. fixtures[2] = nilInt
  101. for i := range fixtures {
  102. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  103. }
  104. Convey("When converting them should return epoch time with millisecond precision ", func() {
  105. So(fixtures[0].(int64), ShouldEqual, dt.Unix()*1e3)
  106. So(fixtures[1].(int64), ShouldEqual, dt.Unix()*1e3)
  107. So(fixtures[2], ShouldBeNil)
  108. })
  109. })
  110. Convey("Given row values with float64 as time columns", func() {
  111. tSeconds := float64(dt.Unix())
  112. tMilliseconds := float64(dt.UnixNano() / 1e6)
  113. tNanoSeconds := float64(dt.UnixNano())
  114. var nilPointer *float64
  115. fixtures := make([]interface{}, 7)
  116. fixtures[0] = tSeconds
  117. fixtures[1] = &tSeconds
  118. fixtures[2] = tMilliseconds
  119. fixtures[3] = &tMilliseconds
  120. fixtures[4] = tNanoSeconds
  121. fixtures[5] = &tNanoSeconds
  122. fixtures[6] = nilPointer
  123. for i := range fixtures {
  124. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  125. }
  126. Convey("When converting them should return epoch time with millisecond precision ", func() {
  127. So(fixtures[0].(float64), ShouldEqual, tSeconds*1e3)
  128. So(fixtures[1].(float64), ShouldEqual, tSeconds*1e3)
  129. So(fixtures[2].(float64), ShouldEqual, tMilliseconds)
  130. So(fixtures[3].(float64), ShouldEqual, tMilliseconds)
  131. So(fixtures[4].(float64), ShouldEqual, tMilliseconds)
  132. So(fixtures[5].(float64), ShouldEqual, tMilliseconds)
  133. So(fixtures[6], ShouldBeNil)
  134. })
  135. })
  136. Convey("Given row values with float32 as time columns", func() {
  137. tSeconds := float32(dt.Unix())
  138. var nilInt *float32
  139. fixtures := make([]interface{}, 3)
  140. fixtures[0] = tSeconds
  141. fixtures[1] = &tSeconds
  142. fixtures[2] = nilInt
  143. for i := range fixtures {
  144. ConvertSqlTimeColumnToEpochMs(fixtures, i)
  145. }
  146. Convey("When converting them should return epoch time with millisecond precision ", func() {
  147. So(fixtures[0].(float64), ShouldEqual, float32(dt.Unix()*1e3))
  148. So(fixtures[1].(float64), ShouldEqual, float32(dt.Unix()*1e3))
  149. So(fixtures[2], ShouldBeNil)
  150. })
  151. })
  152. })
  153. }