sql_engine_test.go 5.6 KB

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