kbus_base_test.go 4.0 KB

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