package dict_topic import ( "testing" "github.com/google/uuid" "p78git.ddns.net/svi/gobus/api/netapi" "p78git.ddns.net/svi/gobus/pkg/net/client_proxy_buffer" ) /* Тест для потокобезопасного словаря топиков. */ type tester struct { t *testing.T dictTopic *DictTopic } func TestAny(t *testing.T) { sf := &tester{ t: t, } sf.create() sf.pub() sf.sub() sf.unsub() } // Отписка прокси-клиента от топика func (sf *tester) unsub() { sf.t.Log("unsub") sf.unsubBad1() sf.unsubGood1() } // Нет такого клиента func (sf *tester) unsubGood1() { sf.t.Log("unsubGood1") req := &netapi.BuffRequest{ Sample: "t1", ClientName: "est", MsgSumSizeLimit: 100_000, MsgSaveSecondLimit: 60, } proxy, err := client_proxy_buffer.NewClientProxyBuffer(req) if err != nil { sf.t.Fatalf("unsubGood1(): err=%v", err) } err = sf.dictTopic.Unsubscribe(proxy) if err != nil { sf.t.Fatalf("unsubGood1(): err=%v", err) } { // Подписка (не должно быть совпадений) err := sf.dictTopic.Subscribe(proxy) if err != nil { sf.t.Fatalf("unsubGood1(): err=%v", err) } if topic := sf.dictTopic.Get("test_topic2"); topic == nil { sf.t.Fatalf("unsubGood1(): topic==nil") } if len_ := sf.dictTopic.Len(); len_ != 2 { sf.t.Fatalf("unsubGood1(): len_(%v)!=1", len_) } if size := sf.dictTopic.Size(); size != 69 { sf.t.Fatalf("unsubGood1(): size(%v)!=69", size) } } } // Нет прокси для отписки func (sf *tester) unsubBad1() { sf.t.Log("unsubBad1") err := sf.dictTopic.Unsubscribe(nil) if err == nil { sf.t.Fatalf("unsubBad1(): err==nil") } } // Подписка клиента на топики func (sf *tester) sub() { sf.t.Log("sub") sf.subBad1() sf.subGood1() } func (sf *tester) subGood1() { sf.t.Log("subGood1") req := &netapi.BuffRequest{ Sample: "est", ClientName: "test_client", MsgSumSizeLimit: 100_000, MsgSaveSecondLimit: 60, } proxy, err := client_proxy_buffer.NewClientProxyBuffer(req) if err != nil { sf.t.Fatalf("subGood1(): err=%v", err) } err = sf.dictTopic.Subscribe(proxy) if err != nil { sf.t.Fatalf("subGood1(): err=%v", err) } err = sf.dictTopic.Subscribe(proxy) if err != nil { sf.t.Fatalf("subGood1(): err=%v", err) } { // Публикация msg := &netapi.TopicMsg{ Source: 0, Topic: "test_topic2", BinMsg: []byte{}, StrUuid: uuid.New().String(), } err := sf.dictTopic.Public(msg) if err != nil { sf.t.Fatalf("subGood1(): err=%v", err) } if topic := sf.dictTopic.Get("test_topic2"); topic == nil { sf.t.Fatalf("subGood1(): topic==nil") } if len_ := sf.dictTopic.Len(); len_ != 2 { sf.t.Fatalf("subGood1(): len_(%v)!=1", len_) } if size := sf.dictTopic.Size(); size != 69 { sf.t.Fatalf("subGood1(): size(%v)!=69", size) } } } // Нет клиента на подписку func (sf *tester) subBad1() { sf.t.Log("subBad1") err := sf.dictTopic.Subscribe(nil) if err == nil { sf.t.Fatalf("subBad1(): err==nil") } } // Публикация в топик func (sf *tester) pub() { sf.t.Log("pub") sf.pubBad1() sf.pubBud2() sf.pubGood1() } func (sf *tester) pubGood1() { sf.t.Log("pubGood1") msg := &netapi.TopicMsg{ Source: 0, Topic: "test_topic", BinMsg: []byte{}, StrUuid: uuid.New().String(), } err := sf.dictTopic.Public(msg) if err != nil { sf.t.Fatalf("pubGood1(): err=%v", err) } if topic := sf.dictTopic.Get("test_topic"); topic == nil { sf.t.Fatalf("createGood1(): topic==nil") } if len_ := sf.dictTopic.Len(); len_ != 1 { sf.t.Fatalf("createGood1(): len_(%v)!=1", len_) } if size := sf.dictTopic.Size(); size != 34 { sf.t.Fatalf("createGood1(): size(%v)!=34", size) } } // Нет топика func (sf *tester) pubBud2() { sf.t.Log("pubBud2") msg := &netapi.TopicMsg{ Source: 0, Topic: "", BinMsg: []byte{}, StrUuid: "", } err := sf.dictTopic.Public(msg) if err == nil { sf.t.Fatalf("pubBud2(): err==nil") } } // Нет сообщения для публикации func (sf *tester) pubBad1() { sf.t.Log("pubBad1]") err := sf.dictTopic.Public(nil) if err == nil { sf.t.Fatalf("pubBad1(): err==nil") } } func (sf *tester) create() { sf.t.Log("create") sf.dictTopic = NewDictTopic() if sf.dictTopic == nil { sf.t.Fatalf("create(): dictTopic==nil") } }