edgex_sink_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. // +build edgex
  2. package sinks
  3. import (
  4. "fmt"
  5. "github.com/edgexfoundry/go-mod-core-contracts/models"
  6. "reflect"
  7. "testing"
  8. )
  9. func TestProduceEvents(t1 *testing.T) {
  10. var tests = []struct {
  11. input string
  12. deviceName string
  13. expected *models.Event
  14. error string
  15. }{
  16. {
  17. input: `[
  18. {"meta":{
  19. "correlationid":"","created":1,"device":"demo","id":"","modified":2,"origin":3,"pushed":0,
  20. "humidity":{"created":11,"device":"test device name1","id":"12","modified":13,"origin":14,"pushed":15},
  21. "temperature":{"created":21,"device":"test device name2","id":"22","modified":23,"origin":24,"pushed":25}
  22. }
  23. },
  24. {"humidity":100},
  25. {"temperature":50}
  26. ]`,
  27. expected: &models.Event{
  28. ID: "",
  29. Pushed: 0,
  30. Device: "demo",
  31. Created: 1,
  32. Modified: 2,
  33. Origin: 3,
  34. Readings: []models.Reading{
  35. {
  36. Name: "humidity",
  37. Value: "100",
  38. Created: 11,
  39. Device: "test device name1",
  40. Id: "12",
  41. Modified: 13,
  42. Origin: 14,
  43. Pushed: 15,
  44. },
  45. {
  46. Name: "temperature",
  47. Value: "50",
  48. Created: 21,
  49. Device: "test device name2",
  50. Id: "22",
  51. Modified: 23,
  52. Origin: 24,
  53. Pushed: 25,
  54. },
  55. },
  56. },
  57. error: "",
  58. },
  59. {
  60. input: `[
  61. {"meta":{
  62. "correlationid":"","created":1,"device":"demo","id":"","modified":2,"origin":3,"pushed":0,
  63. "humidity":{"created":11,"device":"test device name1","id":"12","modified":13,"origin":14,"pushed":15},
  64. "temperature":{"created":21,"device":"test device name2","id":"22","modified":23,"origin":24,"pushed":25}
  65. }
  66. },
  67. {"h1":100}
  68. ]`,
  69. expected: &models.Event{
  70. ID: "",
  71. Pushed: 0,
  72. Device: "demo",
  73. Created: 1,
  74. Modified: 2,
  75. Origin: 3,
  76. Readings: []models.Reading{
  77. {
  78. Name: "h1",
  79. Value: "100",
  80. Created: 0,
  81. Device: "",
  82. Id: "",
  83. Modified: 0,
  84. Origin: 0,
  85. Pushed: 0,
  86. },
  87. },
  88. },
  89. error: "",
  90. },
  91. {
  92. input: `[
  93. {"meta": 50},
  94. {"h1":100}
  95. ]`,
  96. expected: &models.Event{
  97. ID: "",
  98. Pushed: 0,
  99. Device: "",
  100. Created: 0,
  101. Modified: 0,
  102. Origin: 0,
  103. Readings: []models.Reading{
  104. {
  105. Name: "h1",
  106. Value: "100",
  107. Created: 0,
  108. Device: "",
  109. Id: "",
  110. Modified: 0,
  111. Origin: 0,
  112. Pushed: 0,
  113. },
  114. },
  115. },
  116. error: "",
  117. },
  118. {
  119. input: `[
  120. {"meta1": 50},
  121. {"h1":100}
  122. ]`,
  123. expected: &models.Event{
  124. ID: "",
  125. Pushed: 0,
  126. Device: "",
  127. Created: 0,
  128. Modified: 0,
  129. Origin: 0,
  130. Readings: []models.Reading{
  131. {
  132. Name: "meta1",
  133. Value: "50",
  134. Created: 0,
  135. Device: "",
  136. Id: "",
  137. Modified: 0,
  138. Origin: 0,
  139. Pushed: 0,
  140. },
  141. {
  142. Name: "h1",
  143. Value: "100",
  144. Created: 0,
  145. Device: "",
  146. Id: "",
  147. Modified: 0,
  148. Origin: 0,
  149. Pushed: 0,
  150. },
  151. },
  152. },
  153. error: "",
  154. },
  155. {
  156. input: `[]`,
  157. deviceName: "kuiper",
  158. expected: &models.Event{
  159. ID: "",
  160. Pushed: 0,
  161. Device: "kuiper",
  162. Created: 0,
  163. Modified: 0,
  164. Origin: 0,
  165. Readings: nil,
  166. },
  167. error: "",
  168. },
  169. }
  170. fmt.Printf("The test bucket size is %d.\n\n", len(tests))
  171. for i, t := range tests {
  172. ems := EdgexMsgBusSink{deviceName: t.deviceName, metadata: "meta"}
  173. result, err := ems.produceEvents([]byte(t.input))
  174. if !reflect.DeepEqual(t.error, errstring(err)) {
  175. t1.Errorf("%d. %q: error mismatch:\n exp=%s\n got=%s\n\n", i, t.input, t.error, err)
  176. } else if t.error == "" && !reflect.DeepEqual(t.expected, result) {
  177. t1.Errorf("%d. %q\n\nresult mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, t.input, t.expected, result)
  178. }
  179. }
  180. }
  181. // errstring returns the string representation of an error.
  182. func errstring(err error) string {
  183. if err != nil {
  184. return err.Error()
  185. }
  186. return ""
  187. }