kbus_base_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package kbus_base
  2. import (
  3. "testing"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  5. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  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. kBus mKs.IKernelBus
  13. handSub *mock_hand_sub_local.MockHandlerSub
  14. handServ *mock_hand_serve.MockHandlerServe
  15. }
  16. var (
  17. qNameSub = defs.NewTopic("topic_hand_sub")
  18. qNameServe = defs.NewTopic("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.kBus.Unsubscribe(sf.handSub)
  46. sf.kBus.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.kBus.Unsubscribe(nil)
  57. }
  58. func (sf *tester) reqGood1() {
  59. sf.t.Log("reqGood1")
  60. res := sf.kBus.SendRequest(sf.handServ.Topic_, []byte("test_msg"))
  61. if res.IsErr() {
  62. sf.t.Fatalf("reqGood1(): err=%v", res.Err())
  63. }
  64. if res.Ok() == nil {
  65. sf.t.Fatalf("reqGood1(): binMsg==nil")
  66. }
  67. }
  68. func (sf *tester) servGood1() {
  69. sf.t.Log("servGood1")
  70. sf.kBus.RegisterServe(sf.handServ).Hassert("servGood1()")
  71. }
  72. // Нет обработчика для обслуживания запросов.
  73. func (sf *tester) servBad1() {
  74. sf.t.Log("servBad1")
  75. res := sf.kBus.RegisterServe(nil)
  76. if res.IsOk() {
  77. sf.t.Fatalf("servBad1(): err==nil")
  78. }
  79. }
  80. var (
  81. qName1 = defs.NewTopic("test_topic1")
  82. )
  83. // Нет такого топика.
  84. func (sf *tester) reqBad1() {
  85. sf.t.Log("reqBad1")
  86. res := sf.kBus.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.kBus.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. res := sf.kBus.Subscribe(sf.handSub)
  107. if res.IsErr() {
  108. sf.t.Fatalf("subGood1(): err=%v", res.Err())
  109. }
  110. }
  111. // Нет обработчик подписки.
  112. func (sf *tester) subBad1() {
  113. sf.t.Log("subBad1")
  114. res := sf.kBus.Subscribe(nil)
  115. if res.IsOk() {
  116. sf.t.Fatalf("subBad1(): err==nil")
  117. }
  118. }
  119. // Создание локальной шины.
  120. func (sf *tester) new() {
  121. sf.t.Log("new")
  122. sf.newGood1()
  123. }
  124. var (
  125. qNameA = defs.NewTopic("test_topic")
  126. )
  127. // Закрытие шины.
  128. func (sf *tester) close() {
  129. sf.t.Log("close")
  130. kCtx := kctx.GetKernelCtx()
  131. kCtx.Cancel()
  132. kCtx.Wg().Wait()
  133. sf.kBus.(*KBusBase).close()
  134. if sf.kBus.IsWork() {
  135. sf.t.Fatalf("close(): bus work")
  136. }
  137. res := sf.kBus.Subscribe(sf.handSub)
  138. if res.IsOk() {
  139. sf.t.Fatalf("close(): err==nil")
  140. }
  141. res = sf.kBus.Publish(qName1, []byte("test_msg"))
  142. if res.IsOk() {
  143. sf.t.Fatalf("close(): err==nil")
  144. }
  145. res1 := sf.kBus.SendRequest(qNameA, []byte("test_msg"))
  146. if res1.IsOk() {
  147. sf.t.Fatalf("close(): err==nil")
  148. }
  149. }
  150. func (sf *tester) newGood1() {
  151. sf.t.Log("newGood1")
  152. defer func() {
  153. if _panic := recover(); _panic != nil {
  154. sf.t.Fatalf("newGood1(): panic=%v", _panic)
  155. }
  156. }()
  157. sf.kBus = GetKernelBusBase()
  158. sf.kBus = GetKernelBusBase()
  159. if !sf.kBus.IsWork() {
  160. sf.t.Fatalf("newGood1(): bus not work")
  161. }
  162. if log := sf.kBus.Log(); log == nil {
  163. sf.t.Fatalf("newGood1(): log==nil")
  164. }
  165. }