This is an automated email from the ASF dual-hosted git repository.
jonyang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-eventmesh.git
The following commit(s) were added to refs/heads/master by this push:
new 5354032c0 fix issue2885 (#2887)
5354032c0 is described below
commit 5354032c038c76a9eee17df6846c61b045088184
Author: jonyangx <[email protected]>
AuthorDate: Tue Jan 10 23:45:01 2023 +0800
fix issue2885 (#2887)
Co-authored-by: jonyangx <[email protected]>
---
.../http/consumer/consumer_suite_test.go | 62 ++++++++++
.../http/consumer/eventmesh_http_consumer.go | 12 ++
.../http/consumer/eventmesh_http_consumer_test.go | 136 +++++++++------------
3 files changed, 133 insertions(+), 77 deletions(-)
diff --git a/eventmesh-sdk-go/http/consumer/consumer_suite_test.go
b/eventmesh-sdk-go/http/consumer/consumer_suite_test.go
new file mode 100644
index 000000000..1d2b8f786
--- /dev/null
+++ b/eventmesh-sdk-go/http/consumer/consumer_suite_test.go
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package consumer
+
+import (
+ "fmt"
+ "github.com/apache/incubator-eventmesh/eventmesh-sdk-go/http/conf"
+ "net/http"
+ "net/http/httptest"
+ "strings"
+ "testing"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+func TestConsumerAPIs(t *testing.T) {
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "consumer module Tests")
+}
+
+var server *httptest.Server
+var eventMeshHttpConsumer *EventMeshHttpConsumer
+
+var _ = BeforeSuite(func() {
+ f := func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
+ w.Write([]byte(`{"retCode":0}`))
+ }
+ server = httptest.NewServer(http.HandlerFunc(f))
+
+ eventMeshClientConfig := conf.DefaultEventMeshHttpClientConfig
+ sp := strings.Split(server.URL, ":")
+ eventMeshClientConfig.SetLiteEventMeshAddr(fmt.Sprintf("127.0.0.1:%s",
sp[len(sp)-1]))
+ eventMeshHttpConsumer = NewEventMeshHttpConsumer(eventMeshClientConfig)
+
+})
+
+var _ = AfterSuite(func() {
+ if server != nil {
+ server.Close()
+ }
+
+ if eventMeshHttpConsumer != nil {
+ eventMeshHttpConsumer.Close()
+ }
+})
diff --git a/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer.go
b/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer.go
index 21a37df11..678b37b69 100644
--- a/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer.go
+++ b/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer.go
@@ -95,6 +95,18 @@ func (e *EventMeshHttpConsumer) Subscribe(topicList
[]protocol.SubscriptionItem,
e.mutex.Lock()
defer e.mutex.Unlock()
e.subscriptions = append(e.subscriptions, topicList...)
+
+ result := make([]protocol.SubscriptionItem, 0, len(e.subscriptions))
+ tmpMap := make(map[string]struct{})
+ for _, item := range e.subscriptions {
+ if _, ok := tmpMap[item.Topic]; !ok {
+ tmpMap[item.Topic] = struct{}{}
+ result = append(result, item)
+ }
+ }
+
+ e.subscriptions = result
+
}
func (e *EventMeshHttpConsumer) Unsubscribe(topicList []string, subscribeUrl
string) {
diff --git a/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer_test.go
b/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer_test.go
index 7d427b8df..3acdd975c 100644
--- a/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer_test.go
+++ b/eventmesh-sdk-go/http/consumer/eventmesh_http_consumer_test.go
@@ -1,91 +1,73 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package consumer
import (
- "fmt"
"github.com/apache/incubator-eventmesh/eventmesh-sdk-go/common/protocol"
- "github.com/apache/incubator-eventmesh/eventmesh-sdk-go/http/conf"
- "github.com/stretchr/testify/assert"
- "net/http"
- "net/http/httptest"
- "strings"
- "testing"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
)
-func TestEventMeshHttpConsumer_Subscribe(t *testing.T) {
- f := func(w http.ResponseWriter, r *http.Request) {
- w.WriteHeader(http.StatusOK)
- w.Write([]byte(`{"retCode":0}`))
- }
- server := httptest.NewServer(http.HandlerFunc(f))
- defer server.Close()
+var _ = Describe("EventMeshHttpConsumer test", func() {
- eventMeshClientConfig := conf.DefaultEventMeshHttpClientConfig
- sp := strings.Split(server.URL, ":")
- eventMeshClientConfig.SetLiteEventMeshAddr(fmt.Sprintf("127.0.0.1:%s",
sp[len(sp)-1]))
- eventMeshHttpConsumer := NewEventMeshHttpConsumer(eventMeshClientConfig)
+ Context("Subscribe test ", func() {
+ It("should success", func() {
- subscribeUrl := "http://mock-url"
- topicList := []protocol.SubscriptionItem{
- {
- Topic: "mock-topic",
- Mode: protocol.DefaultSubscriptionMode.CLUSTERING,
- Type: protocol.DefaultSubscriptionType.ASYNC,
- },
- }
- eventMeshHttpConsumer.Subscribe(topicList, subscribeUrl)
- assert.Equal(t, 1, len(eventMeshHttpConsumer.subscriptions))
+ subscribeUrl := "http://mock-url"
+ topicList := []protocol.SubscriptionItem{
+ {
+ Topic: "mock-topic",
+ Mode:
protocol.DefaultSubscriptionMode.CLUSTERING,
+ Type:
protocol.DefaultSubscriptionType.ASYNC,
+ },
+ }
+ eventMeshHttpConsumer.Subscribe(topicList, subscribeUrl)
- topicList = []protocol.SubscriptionItem{
- {
- Topic: "mock-topic2",
- Mode: protocol.DefaultSubscriptionMode.CLUSTERING,
- Type: protocol.DefaultSubscriptionType.ASYNC,
- },
- }
- eventMeshHttpConsumer.Subscribe(topicList, subscribeUrl)
- assert.Equal(t, 2, len(eventMeshHttpConsumer.subscriptions))
-}
+ Ω(1).To(Equal(len(eventMeshHttpConsumer.subscriptions)))
-func TestEventMeshHttpConsumer_Unsubscribe(t *testing.T) {
- f := func(w http.ResponseWriter, r *http.Request) {
- w.WriteHeader(http.StatusOK)
- w.Write([]byte(`{"retCode":0}`))
- }
- server := httptest.NewServer(http.HandlerFunc(f))
- defer server.Close()
+ topicList = []protocol.SubscriptionItem{
+ {
+ Topic: "mock-topic2",
+ Mode:
protocol.DefaultSubscriptionMode.CLUSTERING,
+ Type:
protocol.DefaultSubscriptionType.ASYNC,
+ },
+ }
+ eventMeshHttpConsumer.Subscribe(topicList, subscribeUrl)
+ Ω(2).To(Equal(len(eventMeshHttpConsumer.subscriptions)))
+ eventMeshHttpConsumer.Subscribe(topicList, subscribeUrl)
+ Ω(2).To(Equal(len(eventMeshHttpConsumer.subscriptions)))
+ })
- eventMeshClientConfig := conf.DefaultEventMeshHttpClientConfig
- sp := strings.Split(server.URL, ":")
- eventMeshClientConfig.SetLiteEventMeshAddr(fmt.Sprintf("127.0.0.1:%s",
sp[len(sp)-1]))
- eventMeshHttpConsumer := NewEventMeshHttpConsumer(eventMeshClientConfig)
+ })
- subscribeUrl := "http://mock-url"
- subscribeList := []protocol.SubscriptionItem{
- {
- Topic: "mock-topic",
- Mode: protocol.DefaultSubscriptionMode.CLUSTERING,
- Type: protocol.DefaultSubscriptionType.ASYNC,
- },
- }
- eventMeshHttpConsumer.Subscribe(subscribeList, subscribeUrl)
- assert.Equal(t, 1, len(eventMeshHttpConsumer.subscriptions))
+ Context("Unsubscribe test ", func() {
+ It("should success", func() {
+ subscribeUrl := "http://mock-url"
+ var topicList = []string{"mock-topic"}
+ eventMeshHttpConsumer.Unsubscribe(topicList,
subscribeUrl)
+ Ω(1).To(Equal(len(eventMeshHttpConsumer.subscriptions)))
+ topicList = []string{"mock-topic2"}
+ eventMeshHttpConsumer.Unsubscribe(topicList,
subscribeUrl)
+ Ω(0).To(Equal(len(eventMeshHttpConsumer.subscriptions)))
+ topicList = []string{"mock-topic2"}
+ eventMeshHttpConsumer.Unsubscribe(topicList,
subscribeUrl)
+ Ω(0).To(Equal(len(eventMeshHttpConsumer.subscriptions)))
+ })
- var topicList = []string{"mock-topic"}
- eventMeshHttpConsumer.Unsubscribe(topicList, subscribeUrl)
- assert.Equal(t, 0, len(eventMeshHttpConsumer.subscriptions))
-}
+ })
+})
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]