mock_hand_serve.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // package mock_hand_serve -- мок-обработчик входящих запросов.
  2. package mock_hand_serve
  3. import (
  4. "fmt"
  5. "sync"
  6. mL0 "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  7. mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  8. mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  9. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  10. "gitp78su.ipnodns.ru/svi/kern/v4/lev1/safe_bool"
  11. )
  12. // MockHandlerServe -- мок-обработчик входящих запросов.
  13. type MockHandlerServe struct {
  14. IsBad_ mKs.ISafeBool // Признак сбоя при вызове
  15. Msg_ []byte // Для обратного вызова
  16. Name_ *mKd.HandlerName // Уникальное имя мок-обработчика подписки
  17. Topic_ *mKd.Topic // Имя топика подписки
  18. block sync.Mutex
  19. }
  20. // NewMockHandlerServe -- возвращает новый обработчик подписки.
  21. func NewMockHandlerServe(topic *mKd.Topic, name string) *MockHandlerServe {
  22. mKh.Hassert(topic.Get() != "", "NewMockHandlerServe(): topic is empty")
  23. mKh.Hassert(name != "", "NewMockHandlerServe(): name is empty")
  24. sf := &MockHandlerServe{
  25. Topic_: topic,
  26. Name_: mKd.NewHandlerName(name),
  27. IsBad_: safe_bool.NewSafeBool(),
  28. }
  29. _ = mKs.IBusHandlerServe(sf)
  30. return sf
  31. }
  32. // Функция обратного вызова подписки.
  33. func (sf *MockHandlerServe) FnBack(binMsg []byte) mL0.IResult[[]byte] {
  34. sf.block.Lock()
  35. defer sf.block.Unlock()
  36. if sf.IsBad_.Get() {
  37. err := fmt.Errorf("FnBack(): isBad==true")
  38. return mL0.NewErr[[]byte](err)
  39. }
  40. sf.Msg_ = binMsg
  41. return mL0.NewRes(binMsg)
  42. }
  43. // Возвращает уникальное имя обработчика подписки.
  44. func (sf *MockHandlerServe) Topic() *mKd.Topic {
  45. return sf.Topic_
  46. }
  47. // Возвращает топик для обработчика подписки.
  48. func (sf *MockHandlerServe) Name() *mKd.HandlerName {
  49. return sf.Name_
  50. }