瀏覽代碼

SVI Добавление тестов словарю топиков; 46.8%

SVI 2 年之前
父節點
當前提交
04321a21e5
共有 2 個文件被更改,包括 100 次插入3 次删除
  1. 4 3
      internal/dict_topic/dict_topic.go
  2. 96 0
      internal/dict_topic/dict_topic_test.go

+ 4 - 3
internal/dict_topic/dict_topic.go

@@ -42,12 +42,13 @@ func (sf *DictTopic) Unsubscribe(clientProxy types.IClientProxy) error {
 
 // Отписывает под блокировкой клиента от топиков
 func (sf *DictTopic) unsubscribe(clientProxy types.IClientProxy) {
-	sample := clientProxy.SampleTopic()
+	clientName := clientProxy.ClientName()
+	sampleTopic := string(clientProxy.SampleTopic())
 	for name, topic := range sf.dict {
-		if !strings.Contains(string(name), string(sample)) {
+		if !strings.Contains(string(name), sampleTopic) {
 			continue
 		}
-		topic.Unsubscribe(clientProxy.ClientName())
+		topic.Unsubscribe(clientName)
 	}
 }
 

+ 96 - 0
internal/dict_topic/dict_topic_test.go

@@ -5,6 +5,7 @@ import (
 
 	"github.com/google/uuid"
 	"p78git.ddns.net/svi/gobus/api/netapi"
+	"p78git.ddns.net/svi/gobus/pkg/net/client_proxy_buffer"
 )
 
 /*
@@ -23,12 +24,107 @@ func TestAny(t *testing.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)
+		}
+	}
 }
 
 // Нет клиента на подписку