dict_topic_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package dict_topic
  2. import (
  3. "testing"
  4. "github.com/google/uuid"
  5. "p78git.ddns.net/svi/gobus/api/netapi"
  6. "p78git.ddns.net/svi/gobus/pkg/net/client_proxy_buffer"
  7. )
  8. /*
  9. Тест для потокобезопасного словаря топиков.
  10. */
  11. type tester struct {
  12. t *testing.T
  13. dictTopic *DictTopic
  14. }
  15. func TestAny(t *testing.T) {
  16. sf := &tester{
  17. t: t,
  18. }
  19. sf.create()
  20. sf.pub()
  21. sf.sub()
  22. sf.unsub()
  23. }
  24. // Отписка прокси-клиента от топика
  25. func (sf *tester) unsub() {
  26. sf.t.Log("unsub")
  27. sf.unsubBad1()
  28. sf.unsubGood1()
  29. }
  30. // Нет такого клиента
  31. func (sf *tester) unsubGood1() {
  32. sf.t.Log("unsubGood1")
  33. req := &netapi.BuffRequest{
  34. Sample: "t1",
  35. ClientName: "est",
  36. MsgSumSizeLimit: 100_000,
  37. MsgSaveSecondLimit: 60,
  38. }
  39. proxy, err := client_proxy_buffer.NewClientProxyBuffer(req)
  40. if err != nil {
  41. sf.t.Fatalf("unsubGood1(): err=%v", err)
  42. }
  43. err = sf.dictTopic.Unsubscribe(proxy)
  44. if err != nil {
  45. sf.t.Fatalf("unsubGood1(): err=%v", err)
  46. }
  47. { // Подписка (не должно быть совпадений)
  48. err := sf.dictTopic.Subscribe(proxy)
  49. if err != nil {
  50. sf.t.Fatalf("unsubGood1(): err=%v", err)
  51. }
  52. if topic := sf.dictTopic.Get("test_topic2"); topic == nil {
  53. sf.t.Fatalf("unsubGood1(): topic==nil")
  54. }
  55. if len_ := sf.dictTopic.Len(); len_ != 2 {
  56. sf.t.Fatalf("unsubGood1(): len_(%v)!=1", len_)
  57. }
  58. if size := sf.dictTopic.Size(); size != 69 {
  59. sf.t.Fatalf("unsubGood1(): size(%v)!=69", size)
  60. }
  61. }
  62. }
  63. // Нет прокси для отписки
  64. func (sf *tester) unsubBad1() {
  65. sf.t.Log("unsubBad1")
  66. err := sf.dictTopic.Unsubscribe(nil)
  67. if err == nil {
  68. sf.t.Fatalf("unsubBad1(): err==nil")
  69. }
  70. }
  71. // Подписка клиента на топики
  72. func (sf *tester) sub() {
  73. sf.t.Log("sub")
  74. sf.subBad1()
  75. sf.subGood1()
  76. }
  77. func (sf *tester) subGood1() {
  78. sf.t.Log("subGood1")
  79. req := &netapi.BuffRequest{
  80. Sample: "est",
  81. ClientName: "test_client",
  82. MsgSumSizeLimit: 100_000,
  83. MsgSaveSecondLimit: 60,
  84. }
  85. proxy, err := client_proxy_buffer.NewClientProxyBuffer(req)
  86. if err != nil {
  87. sf.t.Fatalf("subGood1(): err=%v", err)
  88. }
  89. err = sf.dictTopic.Subscribe(proxy)
  90. if err != nil {
  91. sf.t.Fatalf("subGood1(): err=%v", err)
  92. }
  93. err = sf.dictTopic.Subscribe(proxy)
  94. if err != nil {
  95. sf.t.Fatalf("subGood1(): err=%v", err)
  96. }
  97. { // Публикация
  98. msg := &netapi.TopicMsg{
  99. Source: 0,
  100. Topic: "test_topic2",
  101. BinMsg: []byte{},
  102. StrUuid: uuid.New().String(),
  103. }
  104. err := sf.dictTopic.Public(msg)
  105. if err != nil {
  106. sf.t.Fatalf("subGood1(): err=%v", err)
  107. }
  108. if topic := sf.dictTopic.Get("test_topic2"); topic == nil {
  109. sf.t.Fatalf("subGood1(): topic==nil")
  110. }
  111. if len_ := sf.dictTopic.Len(); len_ != 2 {
  112. sf.t.Fatalf("subGood1(): len_(%v)!=1", len_)
  113. }
  114. if size := sf.dictTopic.Size(); size != 69 {
  115. sf.t.Fatalf("subGood1(): size(%v)!=69", size)
  116. }
  117. }
  118. }
  119. // Нет клиента на подписку
  120. func (sf *tester) subBad1() {
  121. sf.t.Log("subBad1")
  122. err := sf.dictTopic.Subscribe(nil)
  123. if err == nil {
  124. sf.t.Fatalf("subBad1(): err==nil")
  125. }
  126. }
  127. // Публикация в топик
  128. func (sf *tester) pub() {
  129. sf.t.Log("pub")
  130. sf.pubBad1()
  131. sf.pubBud2()
  132. sf.pubGood1()
  133. }
  134. func (sf *tester) pubGood1() {
  135. sf.t.Log("pubGood1")
  136. msg := &netapi.TopicMsg{
  137. Source: 0,
  138. Topic: "test_topic",
  139. BinMsg: []byte{},
  140. StrUuid: uuid.New().String(),
  141. }
  142. err := sf.dictTopic.Public(msg)
  143. if err != nil {
  144. sf.t.Fatalf("pubGood1(): err=%v", err)
  145. }
  146. if topic := sf.dictTopic.Get("test_topic"); topic == nil {
  147. sf.t.Fatalf("createGood1(): topic==nil")
  148. }
  149. if len_ := sf.dictTopic.Len(); len_ != 1 {
  150. sf.t.Fatalf("createGood1(): len_(%v)!=1", len_)
  151. }
  152. if size := sf.dictTopic.Size(); size != 34 {
  153. sf.t.Fatalf("createGood1(): size(%v)!=34", size)
  154. }
  155. }
  156. // Нет топика
  157. func (sf *tester) pubBud2() {
  158. sf.t.Log("pubBud2")
  159. msg := &netapi.TopicMsg{
  160. Source: 0,
  161. Topic: "",
  162. BinMsg: []byte{},
  163. StrUuid: "",
  164. }
  165. err := sf.dictTopic.Public(msg)
  166. if err == nil {
  167. sf.t.Fatalf("pubBud2(): err==nil")
  168. }
  169. }
  170. // Нет сообщения для публикации
  171. func (sf *tester) pubBad1() {
  172. sf.t.Log("pubBad1]")
  173. err := sf.dictTopic.Public(nil)
  174. if err == nil {
  175. sf.t.Fatalf("pubBad1(): err==nil")
  176. }
  177. }
  178. func (sf *tester) create() {
  179. sf.t.Log("create")
  180. sf.dictTopic = NewDictTopic()
  181. if sf.dictTopic == nil {
  182. sf.t.Fatalf("create(): dictTopic==nil")
  183. }
  184. }