table_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
  2. // Use of this source code is governed by MIT
  3. // license that can be found in the LICENSE file.
  4. package query
  5. import (
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func mustParseTime(s string) time.Time {
  12. t, err := time.Parse(time.RFC3339, s)
  13. if err != nil {
  14. panic(err)
  15. }
  16. return t
  17. }
  18. func TestTable(t *testing.T) {
  19. table := &FluxTableMetadata{position: 1}
  20. table.AddColumn(&FluxColumn{dataType: "string", defaultValue: "_result", name: "result", group: false, index: 0})
  21. table.AddColumn(&FluxColumn{dataType: "long", defaultValue: "10", name: "_table", group: false, index: 1})
  22. table.AddColumn(&FluxColumn{dataType: "dateTime:RFC3339", defaultValue: "", name: "_start", group: true, index: 2})
  23. table.AddColumn(&FluxColumn{dataType: "double", defaultValue: "1.1", name: "_value", group: false, index: 3})
  24. table.AddColumn(&FluxColumn{dataType: "string", defaultValue: "", name: "_field", group: true, index: 4})
  25. require.Len(t, table.columns, 5)
  26. assert.Equal(t, 1, table.Position())
  27. require.NotNil(t, table.Column(0))
  28. assert.Equal(t, "_result", table.Column(0).DefaultValue())
  29. assert.Equal(t, "string", table.Column(0).DataType())
  30. assert.Equal(t, "result", table.Column(0).Name())
  31. assert.Equal(t, 0, table.Column(0).Index())
  32. assert.Equal(t, false, table.Column(0).IsGroup())
  33. require.NotNil(t, table.Column(1))
  34. assert.Equal(t, "10", table.Column(1).DefaultValue())
  35. assert.Equal(t, "long", table.Column(1).DataType())
  36. assert.Equal(t, "_table", table.Column(1).Name())
  37. assert.Equal(t, 1, table.Column(1).Index())
  38. assert.Equal(t, false, table.Column(1).IsGroup())
  39. require.NotNil(t, table.Column(2))
  40. assert.Equal(t, "", table.Column(2).DefaultValue())
  41. assert.Equal(t, "dateTime:RFC3339", table.Column(2).DataType())
  42. assert.Equal(t, "_start", table.Column(2).Name())
  43. assert.Equal(t, 2, table.Column(2).Index())
  44. assert.Equal(t, true, table.Column(2).IsGroup())
  45. require.NotNil(t, table.Column(3))
  46. assert.Equal(t, "1.1", table.Column(3).DefaultValue())
  47. assert.Equal(t, "double", table.Column(3).DataType())
  48. assert.Equal(t, "_value", table.Column(3).Name())
  49. assert.Equal(t, 3, table.Column(3).Index())
  50. assert.Equal(t, false, table.Column(3).IsGroup())
  51. require.NotNil(t, table.Column(4))
  52. assert.Equal(t, "", table.Column(4).DefaultValue())
  53. assert.Equal(t, "string", table.Column(4).DataType())
  54. assert.Equal(t, "_field", table.Column(4).Name())
  55. assert.Equal(t, 4, table.Column(4).Index())
  56. assert.Equal(t, true, table.Column(4).IsGroup())
  57. }
  58. func TestRecord(t *testing.T) {
  59. record := &FluxRecord{table: 2,
  60. values: map[string]interface{}{
  61. "result": "_result",
  62. "table": int64(2),
  63. "_start": mustParseTime("2020-02-17T22:19:49.747562847Z"),
  64. "_stop": mustParseTime("2020-02-18T22:19:49.747562847Z"),
  65. "_time": mustParseTime("2020-02-18T10:34:08.135814545Z"),
  66. "_value": 1.4,
  67. "_field": "f",
  68. "_measurement": "test",
  69. "a": "1",
  70. "b": "adsfasdf",
  71. },
  72. }
  73. require.Len(t, record.values, 10)
  74. assert.Equal(t, mustParseTime("2020-02-17T22:19:49.747562847Z"), record.Start())
  75. assert.Equal(t, mustParseTime("2020-02-18T22:19:49.747562847Z"), record.Stop())
  76. assert.Equal(t, mustParseTime("2020-02-18T10:34:08.135814545Z"), record.Time())
  77. assert.Equal(t, "_result", record.Result())
  78. assert.Equal(t, "f", record.Field())
  79. assert.Equal(t, 1.4, record.Value())
  80. assert.Equal(t, "test", record.Measurement())
  81. assert.Equal(t, 2, record.Table())
  82. agRec := &FluxRecord{table: 0,
  83. values: map[string]interface{}{
  84. "room": "bathroom",
  85. "sensor": "SHT",
  86. "temp": 24.3,
  87. "hum": 42,
  88. },
  89. }
  90. require.Len(t, agRec.values, 4)
  91. assert.Equal(t, time.Time{}, agRec.Start())
  92. assert.Equal(t, time.Time{}, agRec.Stop())
  93. assert.Equal(t, time.Time{}, agRec.Time())
  94. assert.Equal(t, "", agRec.Field())
  95. assert.Equal(t, "", agRec.Result())
  96. assert.Nil(t, agRec.Value())
  97. assert.Equal(t, "", agRec.Measurement())
  98. assert.Equal(t, 0, agRec.Table())
  99. assert.Equal(t, 24.3, agRec.ValueByKey("temp"))
  100. assert.Equal(t, 42, agRec.ValueByKey("hum"))
  101. assert.Nil(t, agRec.ValueByKey("notexist"))
  102. }