dict_topic_sub_test.go 2.9 KB

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