kbus_base_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package kbus_base
  2. import (
  3. "testing"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/alias"
  5. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/mock_hand_serve"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/mock_hand_sub_local"
  9. )
  10. type tester struct {
  11. t *testing.T
  12. bus IKernelBus
  13. handSub *mock_hand_sub_local.MockHandlerSub
  14. handServ *mock_hand_serve.MockHandlerServe
  15. }
  16. var (
  17. qNameSub = alias.NewATopic("topic_hand_sub")
  18. qNameServe = alias.NewATopic("topic_hand_serv")
  19. )
  20. func TestKernelBusLocal(t *testing.T) {
  21. sf := &tester{
  22. t: t,
  23. handSub: mock_hand_sub_local.NewMockHandlerSub(qNameSub, "mock_hand_sub"),
  24. handServ: mock_hand_serve.NewMockHandlerServe(qNameServe, "mock_hand_serv"),
  25. }
  26. sf.new()
  27. sf.subBad1()
  28. sf.subGood1()
  29. sf.pubGood10()
  30. sf.reqBad1()
  31. sf.servBad1()
  32. sf.servGood1()
  33. sf.reqGood1()
  34. sf.close()
  35. sf.unsubBad1()
  36. sf.unsubGood1()
  37. }
  38. func (sf *tester) unsubGood1() {
  39. sf.t.Log("unsubBad1")
  40. defer func() {
  41. if _panic := recover(); _panic != nil {
  42. sf.t.Fatalf("unsubGood1(): panic=%v", _panic)
  43. }
  44. }()
  45. sf.bus.Unsubscribe(sf.handSub)
  46. sf.bus.Unsubscribe(sf.handSub)
  47. }
  48. // Отписка от топика, нет обработчика.
  49. func (sf *tester) unsubBad1() {
  50. sf.t.Log("unsubBad1")
  51. defer func() {
  52. if _panic := recover(); _panic == nil {
  53. sf.t.Fatalf("unsubBad1(): panic==nil")
  54. }
  55. }()
  56. sf.bus.Unsubscribe(nil)
  57. }
  58. func (sf *tester) reqGood1() {
  59. sf.t.Log("reqGood1")
  60. res := sf.bus.SendRequest(sf.handServ.Topic_, []byte("test_msg"))
  61. if res.IsErr() {
  62. sf.t.Fatalf("reqGood1(): err=%v", res.Err())
  63. }
  64. if res.Val() == nil {
  65. sf.t.Fatalf("reqGood1(): binMsg==nil")
  66. }
  67. }
  68. func (sf *tester) servGood1() {
  69. sf.t.Log("servGood1")
  70. sf.bus.RegisterServe(sf.handServ).Hassert("servGood1()")
  71. }
  72. // Нет обработчика для обслуживания запросов.
  73. func (sf *tester) servBad1() {
  74. sf.t.Log("servBad1")
  75. res := sf.bus.RegisterServe(nil)
  76. if res.IsOk() {
  77. sf.t.Fatalf("servBad1(): err==nil")
  78. }
  79. }
  80. var (
  81. qName1 = alias.NewATopic("test_topic1")
  82. )
  83. // Нет такого топика.
  84. func (sf *tester) reqBad1() {
  85. sf.t.Log("reqBad1")
  86. res := sf.bus.SendRequest(qName1, []byte("test_msg"))
  87. if res.IsOk() {
  88. sf.t.Fatalf("reqBad1(): err==nil")
  89. }
  90. }
  91. // Нет читателей топика.
  92. func (sf *tester) pubGood10() {
  93. sf.t.Log("pubGood10")
  94. defer func() {
  95. if _panic := recover(); _panic != nil {
  96. sf.t.Fatalf("pubGood10(): panic=%v", _panic)
  97. }
  98. }()
  99. res := sf.bus.Publish(qName1, []byte("test_msg"))
  100. if res.IsErr() {
  101. sf.t.Fatalf("pubGood10(): err=%v", res.Err())
  102. }
  103. }
  104. func (sf *tester) subGood1() {
  105. sf.t.Log("subGood1")
  106. defer func() {
  107. if _panic := recover(); _panic != nil {
  108. sf.t.Fatalf("subGood1(): panic=%v", _panic)
  109. }
  110. }()
  111. res := sf.bus.Subscribe(sf.handSub)
  112. if res.IsErr() {
  113. sf.t.Fatalf("subGood1(): err=%v", res.Err())
  114. }
  115. }
  116. // Нет обработчик подписки.
  117. func (sf *tester) subBad1() {
  118. sf.t.Log("subBad1")
  119. defer func() {
  120. if _panic := recover(); _panic == nil {
  121. sf.t.Fatalf("subBad1(): panic==nil")
  122. }
  123. }()
  124. _ = sf.bus.Subscribe(nil)
  125. }
  126. // Создание локальной шины.
  127. func (sf *tester) new() {
  128. sf.t.Log("new")
  129. sf.newGood1()
  130. }
  131. var (
  132. qNameA = alias.NewATopic("test_topic")
  133. )
  134. // Закрытие шины.
  135. func (sf *tester) close() {
  136. sf.t.Log("close")
  137. ctx := kctx.GetKernelCtx().Hassert("close()")
  138. ctx.Cancel()
  139. ctx.Wg().Wait()
  140. sf.bus.(*KBusBase).close()
  141. if sf.bus.IsWork() {
  142. sf.t.Fatalf("close(): bus work")
  143. }
  144. res := sf.bus.Subscribe(sf.handSub)
  145. if res.IsOk() {
  146. sf.t.Fatalf("close(): err==nil")
  147. }
  148. res = sf.bus.Publish(qName1, []byte("test_msg"))
  149. if res.IsOk() {
  150. sf.t.Fatalf("close(): err==nil")
  151. }
  152. res1 := sf.bus.SendRequest(qNameA, []byte("test_msg"))
  153. if res1.IsOk() {
  154. sf.t.Fatalf("close(): err==nil")
  155. }
  156. }
  157. func (sf *tester) newGood1() {
  158. sf.t.Log("newGood1")
  159. defer func() {
  160. if _panic := recover(); _panic != nil {
  161. sf.t.Fatalf("newGood1(): panic=%v", _panic)
  162. }
  163. }()
  164. sf.bus = GetKernelBusBase().Hassert("newGood1()")
  165. sf.bus = GetKernelBusBase().Hassert("newGood1()")
  166. if !sf.bus.IsWork() {
  167. sf.t.Fatalf("newGood1(): bus not work")
  168. }
  169. if log := sf.bus.Log(); log == nil {
  170. sf.t.Fatalf("newGood1(): log==nil")
  171. }
  172. }