dict_topic_sub_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package dict_topic_sub
  2. import (
  3. "testing"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/alias"
  5. . "gitp78su.ipnodns.ru/svi/kern/v4/lev1"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/mock_hand_sub_local"
  7. )
  8. type tester struct {
  9. t *testing.T
  10. dict *dictTopicSub
  11. hand *mock_hand_sub_local.MockHandlerSub
  12. }
  13. var (
  14. qTopicDictSub = alias.NewATopic("topic_dict_sub")
  15. qTopicDictSub1 = alias.NewATopic("topic_dict_sub1")
  16. qTopicTest = alias.NewATopic("test_test")
  17. qTopicTestBad = alias.NewATopic("test_bad_topic")
  18. qTopicEmpty = alias.NewATopic("")
  19. )
  20. func TestDictSub(t *testing.T) {
  21. sf := &tester{
  22. t: t,
  23. hand: mock_hand_sub_local.NewMockHandlerSub(qTopicDictSub, "name_dict_sub"),
  24. }
  25. sf.new()
  26. sf.addBad1()
  27. sf.addGood1()
  28. sf.addGood2()
  29. sf.callGood10()
  30. sf.callGood1()
  31. sf.callBad2()
  32. sf.delBad1()
  33. sf.delGood2()
  34. sf.unsub1()
  35. }
  36. // Прямой вызов отписки от топика которого точно нет.
  37. func (sf *tester) unsub1() {
  38. sf.t.Log("unsub1")
  39. sf.dict.Unsubscribe(sf.hand)
  40. sf.dict.Read(qTopicTest, []byte("test test"))
  41. hand := mock_hand_sub_local.NewMockHandlerSub(qTopicDictSub1, "name_dict_sub")
  42. sf.dict.Unsubscribe(hand)
  43. count := 0
  44. for count < 100 {
  45. SleepMs()
  46. count++
  47. }
  48. sf.dict.Read(qTopicDictSub, []byte("test test"))
  49. count = 0
  50. for count < 200 {
  51. SleepMs()
  52. count++
  53. }
  54. }
  55. func (sf *tester) delGood2() {
  56. sf.t.Log("delGood2()")
  57. defer func() {
  58. if _panic := recover(); _panic != nil {
  59. sf.t.Fatalf("delGood2(): panic=%v", _panic)
  60. }
  61. }()
  62. sf.dict.Unsubscribe(sf.hand)
  63. sf.dict.Unsubscribe(sf.hand)
  64. }
  65. // Удаляет, чего нет.
  66. func (sf *tester) delBad1() {
  67. sf.t.Log("delBad1()")
  68. sf.dict.Unsubscribe(nil)
  69. }
  70. func (sf *tester) callGood1() {
  71. sf.t.Log("callGood1")
  72. sf.dict.Read(sf.hand.Topic(), []byte("test_good"))
  73. }
  74. // повторное добавление обработчика.
  75. func (sf *tester) addGood2() {
  76. sf.t.Log("addGood2")
  77. res := sf.dict.Subscribe(sf.hand)
  78. res.Hassert("addGood2()")
  79. }
  80. // Правильное добавление обработчика подписки.
  81. func (sf *tester) addGood1() {
  82. sf.t.Log("addGood1()")
  83. res := sf.dict.Subscribe(sf.hand)
  84. res.Hassert("addGood1()")
  85. }
  86. // Вместо обработчика пустышка.
  87. func (sf *tester) addBad1() {
  88. sf.t.Log("addBad1()")
  89. res := sf.dict.Subscribe(nil)
  90. if res.IsOk() {
  91. sf.t.Fatalf("addBad1(): res.IsOk()==true")
  92. }
  93. }
  94. // Нет топика.
  95. func (sf *tester) callBad2() {
  96. sf.t.Log("callBad2")
  97. sf.dict.Read(qTopicEmpty, []byte("test_msg"))
  98. }
  99. // Нет данных в топике.
  100. func (sf *tester) callGood10() {
  101. sf.t.Log("callGood10")
  102. defer func() {
  103. if _panic := recover(); _panic != nil {
  104. sf.t.Fatalf("callGood10(): panic=%v", _panic)
  105. }
  106. }()
  107. sf.dict.Read(qTopicTestBad, []byte("test"))
  108. }
  109. // Создание словаря подписчиков.
  110. func (sf *tester) new() {
  111. sf.t.Log("new")
  112. sf.newGood1()
  113. }
  114. func (sf *tester) newGood1() {
  115. sf.t.Log("newGood1")
  116. defer func() {
  117. if _panic := recover(); _panic != nil {
  118. sf.t.Fatalf("newGood1(): panic=%v", _panic)
  119. }
  120. }()
  121. sf.dict = NewDictTopicSub().Hassert("newGood1()")
  122. if sf.dict == nil {
  123. sf.t.Fatalf("newGood1(): DictSub==nil")
  124. }
  125. }