edgex_source_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. // +build edgex
  2. package extensions
  3. import (
  4. "fmt"
  5. "github.com/edgexfoundry/go-mod-core-contracts/models"
  6. "github.com/emqx/kuiper/common"
  7. "testing"
  8. )
  9. var es = EdgexSource{valueDescs: map[string]string{
  10. "b1" : "bool",
  11. "i1" : "int8",
  12. "i2" : "INT16",
  13. "i3" : "INT32",
  14. "i4" : "INT64",
  15. "i5" : "UINT8",
  16. "i6" : "UINT16",
  17. "i7" : "UINT32",
  18. "i8" : "UINT64",
  19. "f1" : "FLOAT32",
  20. "f2" : "FLOAT64",
  21. "s1" : "String",
  22. },
  23. }
  24. func TestGetValue_Int(t *testing.T) {
  25. var testEvent = models.Event{Device: "test"}
  26. for i := 1; i < 9; i++{
  27. r1 := models.Reading{Name: fmt.Sprintf("i%d", i), Value: "1"}
  28. testEvent.Readings = append(testEvent.Readings, r1)
  29. }
  30. for _, r := range testEvent.Readings {
  31. if v, e := es.getValue(r, common.Log); e != nil {
  32. t.Errorf("%s", e)
  33. } else {
  34. expectOne(t, v)
  35. }
  36. }
  37. }
  38. func expectOne(t *testing.T, expected interface{}) {
  39. if v1, ok := expected.(int); ok {
  40. if v1 != 1 {
  41. t.Errorf("expected 1, but it's %d.", v1)
  42. }
  43. } else {
  44. t.Errorf("expected int type, but it's %t.", expected)
  45. }
  46. }
  47. func TestGetValue_Float(t *testing.T) {
  48. var testEvent = models.Event{Device: "test"}
  49. for i := 1; i < 3; i++{
  50. r1 := models.Reading{Name: fmt.Sprintf("f%d", i), Value: "3.14"}
  51. testEvent.Readings = append(testEvent.Readings, r1)
  52. }
  53. for _, r := range testEvent.Readings {
  54. if v, e := es.getValue(r, common.Log); e != nil {
  55. t.Errorf("%s", e)
  56. } else {
  57. expectPi(t, v)
  58. }
  59. }
  60. }
  61. func expectPi(t *testing.T, expected interface{}) {
  62. if v1, ok := expected.(float64); ok {
  63. if v1 != 3.14 {
  64. t.Errorf("expected 3.14, but it's %f.", v1)
  65. }
  66. } else {
  67. t.Errorf("expected float type, but it's %t.", expected)
  68. }
  69. }
  70. func TestGetValue_Bool(t *testing.T) {
  71. ///////////True
  72. trues := []string{"1", "t", "T", "true", "TRUE", "True"}
  73. for _, v := range trues {
  74. r1 := models.Reading{Name: "b1", Value: v}
  75. if v, e := es.getValue(r1, common.Log); e != nil {
  76. t.Errorf("%s", e)
  77. } else {
  78. expectTrue(t, v)
  79. }
  80. }
  81. r1 := models.Reading{Name: "b1", Value: "TRue"}
  82. if _, e := es.getValue(r1, common.Log); e == nil {
  83. t.Errorf("%s", e)
  84. }
  85. ///////////False
  86. falses := []string{"0", "f", "F", "false", "FALSE", "False"}
  87. for _, v := range falses {
  88. r1 := models.Reading{Name: "b1", Value: v}
  89. if v, e := es.getValue(r1, common.Log); e != nil {
  90. t.Errorf("%s", e)
  91. } else {
  92. expectFalse(t, v)
  93. }
  94. }
  95. r1 = models.Reading{Name: "b1", Value: "FAlse"}
  96. if _, e := es.getValue(r1, common.Log); e == nil {
  97. t.Errorf("%s", e)
  98. }
  99. }
  100. func expectTrue(t *testing.T, expected interface{}) {
  101. if v1, ok := expected.(bool); ok {
  102. if !v1 {
  103. t.Errorf("expected true, but it's false.")
  104. }
  105. } else {
  106. t.Errorf("expected boolean type, but it's %t.", expected)
  107. }
  108. }
  109. func expectFalse(t *testing.T, expected interface{}) {
  110. if v1, ok := expected.(bool); ok {
  111. if v1 {
  112. t.Errorf("expected false, but it's true.")
  113. }
  114. } else {
  115. t.Errorf("expected boolean type, but it's %t.", expected)
  116. }
  117. }
  118. func TestWrongType(t *testing.T) {
  119. es1 := EdgexSource{valueDescs: map[string]string{
  120. "f": "FLOAT", //A not exsited type
  121. },
  122. }
  123. r1 := models.Reading{Name: "f", Value: "100"}
  124. if v, _ := es1.getValue(r1, common.Log); v != "100" {
  125. t.Errorf("Expected 100, but it's %s!", v)
  126. }
  127. }
  128. func TestWrongValue(t *testing.T) {
  129. var testEvent = models.Event{Device: "test"}
  130. r1 := models.Reading{Name: "b1", Value: "100"} //100 cannot be converted to a boolean value
  131. r2 := models.Reading{Name: "i1", Value: "int"} //'int' string cannot be converted to int value
  132. r3 := models.Reading{Name: "f1", Value: "float"} //'float' string cannot be converted to int value
  133. testEvent.Readings = append(testEvent.Readings, r1, r2, r3)
  134. for _, v := range testEvent.Readings {
  135. if _, e := es.getValue(v, common.Log); e == nil {
  136. t.Errorf("Expected an error!")
  137. }
  138. }
  139. }