package kbus_base import ( "testing" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/kctx" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/mock_hand_serve" "gitp78su.ipnodns.ru/svi/kern/v4/lev2/mock_hand_sub_local" ) type tester struct { t *testing.T kBus mKs.IKernelBus handSub *mock_hand_sub_local.MockHandlerSub handServ *mock_hand_serve.MockHandlerServe } var ( qNameSub = defs.NewTopic("topic_hand_sub") qNameServe = defs.NewTopic("topic_hand_serv") ) func TestKernelBusLocal(t *testing.T) { sf := &tester{ t: t, handSub: mock_hand_sub_local.NewMockHandlerSub(qNameSub, "mock_hand_sub"), handServ: mock_hand_serve.NewMockHandlerServe(qNameServe, "mock_hand_serv"), } sf.new() sf.subBad1() sf.subGood1() sf.pubGood10() sf.reqBad1() sf.servBad1() sf.servGood1() sf.reqGood1() sf.close() sf.unsubBad1() sf.unsubGood1() } func (sf *tester) unsubGood1() { sf.t.Log("unsubBad1") defer func() { if _panic := recover(); _panic != nil { sf.t.Fatalf("unsubGood1(): panic=%v", _panic) } }() sf.kBus.Unsubscribe(sf.handSub) sf.kBus.Unsubscribe(sf.handSub) } // Отписка от топика, нет обработчика. func (sf *tester) unsubBad1() { sf.t.Log("unsubBad1") defer func() { if _panic := recover(); _panic == nil { sf.t.Fatalf("unsubBad1(): panic==nil") } }() sf.kBus.Unsubscribe(nil) } func (sf *tester) reqGood1() { sf.t.Log("reqGood1") res := sf.kBus.SendRequest(sf.handServ.Topic_, []byte("test_msg")) if res.IsErr() { sf.t.Fatalf("reqGood1(): err=%v", res.Err()) } if res.Ok() == nil { sf.t.Fatalf("reqGood1(): binMsg==nil") } } func (sf *tester) servGood1() { sf.t.Log("servGood1") sf.kBus.RegisterServe(sf.handServ).Hassert("servGood1()") } // Нет обработчика для обслуживания запросов. func (sf *tester) servBad1() { sf.t.Log("servBad1") res := sf.kBus.RegisterServe(nil) if res.IsOk() { sf.t.Fatalf("servBad1(): err==nil") } } var ( qName1 = defs.NewTopic("test_topic1") ) // Нет такого топика. func (sf *tester) reqBad1() { sf.t.Log("reqBad1") res := sf.kBus.SendRequest(qName1, []byte("test_msg")) if res.IsOk() { sf.t.Fatalf("reqBad1(): err==nil") } } // Нет читателей топика. func (sf *tester) pubGood10() { sf.t.Log("pubGood10") defer func() { if _panic := recover(); _panic != nil { sf.t.Fatalf("pubGood10(): panic=%v", _panic) } }() res := sf.kBus.Publish(qName1, []byte("test_msg")) if res.IsErr() { sf.t.Fatalf("pubGood10(): err=%v", res.Err()) } } func (sf *tester) subGood1() { sf.t.Log("subGood1") res := sf.kBus.Subscribe(sf.handSub) if res.IsErr() { sf.t.Fatalf("subGood1(): err=%v", res.Err()) } } // Нет обработчик подписки. func (sf *tester) subBad1() { sf.t.Log("subBad1") res := sf.kBus.Subscribe(nil) if res.IsOk() { sf.t.Fatalf("subBad1(): err==nil") } } // Создание локальной шины. func (sf *tester) new() { sf.t.Log("new") sf.newGood1() } var ( qNameA = defs.NewTopic("test_topic") ) // Закрытие шины. func (sf *tester) close() { sf.t.Log("close") kCtx := kctx.GetKernelCtx() kCtx.Cancel() kCtx.Wg().Wait() sf.kBus.(*KBusBase).close() if sf.kBus.IsWork().Get() { sf.t.Fatalf("close(): bus work") } res := sf.kBus.Subscribe(sf.handSub) if res.IsOk() { sf.t.Fatalf("close(): err==nil") } res = sf.kBus.Publish(qName1, []byte("test_msg")) if res.IsOk() { sf.t.Fatalf("close(): err==nil") } res1 := sf.kBus.SendRequest(qNameA, []byte("test_msg")) if res1.IsOk() { sf.t.Fatalf("close(): err==nil") } } func (sf *tester) newGood1() { sf.t.Log("newGood1") defer func() { if _panic := recover(); _panic != nil { sf.t.Fatalf("newGood1(): panic=%v", _panic) } }() sf.kBus = GetKernelBusBase() sf.kBus = GetKernelBusBase() if !sf.kBus.IsWork().Get() { sf.t.Fatalf("newGood1(): bus not work") } if log := sf.kBus.Log(); log == nil { sf.t.Fatalf("newGood1(): log==nil") } }