edgex_source_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. "f1" : "FLOAT32",
  19. "f2" : "FLOAT64",
  20. "s1" : "String",
  21. "i8" : "UINT64", //i8 will be handled by special case
  22. },
  23. }
  24. func TestGetValue_Int(t *testing.T) {
  25. var testEvent = models.Event{Device: "test"}
  26. for i := 1; i < 8; 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. r1 := models.Reading{Name: "i8", Value: "10796529505058023104"}
  38. if v, e := es.getValue(r1, common.Log); e != nil {
  39. t.Errorf("%s", e)
  40. } else {
  41. if v1, ok := v.(uint64); ok {
  42. if v1 != 10796529505058023104 {
  43. t.Errorf("expected 10796529505058023104, but it's %d.", v1)
  44. }
  45. }
  46. }
  47. }
  48. func expectOne(t *testing.T, expected interface{}) {
  49. if v1, ok := expected.(int); ok {
  50. if v1 != 1 {
  51. t.Errorf("expected 1, but it's %d.", v1)
  52. }
  53. } else {
  54. t.Errorf("expected int type, but it's %T.", expected)
  55. }
  56. }
  57. func TestGetValue_Float(t *testing.T) {
  58. var testEvent = models.Event{Device: "test"}
  59. for i := 1; i < 3; i++{
  60. r1 := models.Reading{Name: fmt.Sprintf("f%d", i), Value: "3.14"}
  61. testEvent.Readings = append(testEvent.Readings, r1)
  62. }
  63. for _, r := range testEvent.Readings {
  64. if v, e := es.getValue(r, common.Log); e != nil {
  65. t.Errorf("%s", e)
  66. } else {
  67. expectPi(t, v)
  68. }
  69. }
  70. }
  71. func expectPi(t *testing.T, expected interface{}) {
  72. if v1, ok := expected.(float64); ok {
  73. if v1 != 3.14 {
  74. t.Errorf("expected 3.14, but it's %f.", v1)
  75. }
  76. } else {
  77. t.Errorf("expected float type, but it's %t.", expected)
  78. }
  79. }
  80. func TestGetValue_Bool(t *testing.T) {
  81. ///////////True
  82. trues := []string{"1", "t", "T", "true", "TRUE", "True"}
  83. for _, v := range trues {
  84. r1 := models.Reading{Name: "b1", Value: v}
  85. if v, e := es.getValue(r1, common.Log); e != nil {
  86. t.Errorf("%s", e)
  87. } else {
  88. expectTrue(t, v)
  89. }
  90. }
  91. r1 := models.Reading{Name: "b1", Value: "TRue"}
  92. if _, e := es.getValue(r1, common.Log); e == nil {
  93. t.Errorf("%s", e)
  94. }
  95. ///////////False
  96. falses := []string{"0", "f", "F", "false", "FALSE", "False"}
  97. for _, v := range falses {
  98. r1 := models.Reading{Name: "b1", Value: v}
  99. if v, e := es.getValue(r1, common.Log); e != nil {
  100. t.Errorf("%s", e)
  101. } else {
  102. expectFalse(t, v)
  103. }
  104. }
  105. r1 = models.Reading{Name: "b1", Value: "FAlse"}
  106. if _, e := es.getValue(r1, common.Log); e == nil {
  107. t.Errorf("%s", e)
  108. }
  109. }
  110. func expectTrue(t *testing.T, expected interface{}) {
  111. if v1, ok := expected.(bool); ok {
  112. if !v1 {
  113. t.Errorf("expected true, but it's false.")
  114. }
  115. } else {
  116. t.Errorf("expected boolean type, but it's %t.", expected)
  117. }
  118. }
  119. func expectFalse(t *testing.T, expected interface{}) {
  120. if v1, ok := expected.(bool); ok {
  121. if v1 {
  122. t.Errorf("expected false, but it's true.")
  123. }
  124. } else {
  125. t.Errorf("expected boolean type, but it's %t.", expected)
  126. }
  127. }
  128. func TestWrongType(t *testing.T) {
  129. es1 := EdgexSource{valueDescs: map[string]string{
  130. "f": "FLOAT", //A not exsited type
  131. },
  132. }
  133. r1 := models.Reading{Name: "f", Value: "100"}
  134. if v, _ := es1.getValue(r1, common.Log); v != "100" {
  135. t.Errorf("Expected 100, but it's %s!", v)
  136. }
  137. }
  138. func TestWrongValue(t *testing.T) {
  139. var testEvent = models.Event{Device: "test"}
  140. r1 := models.Reading{Name: "b1", Value: "100"} //100 cannot be converted to a boolean value
  141. r2 := models.Reading{Name: "i1", Value: "int"} //'int' string cannot be converted to int value
  142. r3 := models.Reading{Name: "f1", Value: "float"} //'float' string cannot be converted to int value
  143. testEvent.Readings = append(testEvent.Readings, r1, r2, r3)
  144. for _, v := range testEvent.Readings {
  145. if _, e := es.getValue(v, common.Log); e == nil {
  146. t.Errorf("Expected an error!")
  147. }
  148. }
  149. }