xsql_processor_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package processors
  2. import (
  3. "fmt"
  4. "reflect"
  5. "testing"
  6. )
  7. func TestStreamCreateProcessor(t *testing.T) {
  8. const BadgerDir = "D:\\tmp\\test"
  9. var tests = []struct {
  10. s string
  11. r []string
  12. err string
  13. }{
  14. {
  15. s: `SHOW STREAMS;`,
  16. r: []string{"no stream definition found"},
  17. },
  18. {
  19. s: `EXPLAIN STREAM demo;`,
  20. err: "stream demo not found",
  21. },
  22. {
  23. s: `CREATE STREAM demo (
  24. USERID BIGINT,
  25. FIRST_NAME STRING,
  26. LAST_NAME STRING,
  27. NICKNAMES ARRAY(STRING),
  28. Gender BOOLEAN,
  29. ADDRESS STRUCT(STREET_NAME STRING, NUMBER BIGINT),
  30. ) WITH (DATASOURCE="users", FORMAT="AVRO", KEY="USERID");`,
  31. r: []string{"stream demo created"},
  32. },
  33. {
  34. s: `CREATE STREAM demo (
  35. USERID BIGINT,
  36. ) WITH (DATASOURCE="users", FORMAT="AVRO", KEY="USERID");`,
  37. err: "key demo already exist, delete it before creating a new one",
  38. },
  39. {
  40. s: `EXPLAIN STREAM demo;`,
  41. r: []string{"TO BE SUPPORTED"},
  42. },
  43. {
  44. s: `DESCRIBE STREAM demo;`,
  45. r: []string{"Fields\n--------------------------------------------------------------------------------\nUSERID\tbigint\nFIRST_NAME\tstring\nLAST_NAME\tstring\nNICKNAMES\t" +
  46. "array(string)\nGender\tboolean\nADDRESS\tstruct(STREET_NAME string, NUMBER bigint)\n\n" +
  47. "DATASOURCE: users\nFORMAT: AVRO\nKEY: USERID\n"},
  48. },
  49. {
  50. s: `SHOW STREAMS;`,
  51. r: []string{"demo"},
  52. },
  53. {
  54. s: `DROP STREAM demo;`,
  55. r: []string{"stream demo dropped"},
  56. },
  57. {
  58. s: `DESCRIBE STREAM demo;`,
  59. err: "stream demo not found",
  60. },
  61. {
  62. s: `DROP STREAM demo;`,
  63. err: "Key not found",
  64. },
  65. }
  66. fmt.Printf("The test bucket size is %d.\n\n", len(tests))
  67. for i, tt := range tests {
  68. results, err := NewStreamProcessor(tt.s, BadgerDir).Exec()
  69. if !reflect.DeepEqual(tt.err, errstring(err)) {
  70. t.Errorf("%d. %q: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.s, tt.err, err)
  71. } else if tt.err == "" {
  72. if !reflect.DeepEqual(tt.r, results) {
  73. t.Errorf("%d. %q\n\nstmt mismatch:\n\ngot=%#v\n\n", i, tt.s, results)
  74. }
  75. }
  76. }
  77. }
  78. func errstring(err error) string {
  79. if err != nil {
  80. return err.Error()
  81. }
  82. return ""
  83. }