mirror of https://github.com/dapr/go-sdk.git
Add option to disable topic validation (#271)
* Add option to disable topic validation Signed-off-by: yaron2 <schneider.yaron@live.com> * linter Signed-off-by: yaron2 <schneider.yaron@live.com>
This commit is contained in:
parent
f1f5c7a84c
commit
f0e09312fa
|
@ -99,6 +99,8 @@ type Subscription struct {
|
|||
Match string `json:"match"`
|
||||
// Priority is the priority in which to evaluate the match (lower to higher).
|
||||
Priority int `json:"priority"`
|
||||
// DisableTopicValidation allows to receive events from publisher topics that differ from the subscribed topic.
|
||||
DisableTopicValidation bool `json:"disableTopicValidation"`
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
|
@ -85,7 +85,17 @@ func (s *Server) OnTopicEvent(ctx context.Context, in *pb.TopicEventRequest) (*p
|
|||
return &pb.TopicEventResponse{Status: pb.TopicEventResponse_DROP}, errors.New("pub/sub and topic names required")
|
||||
}
|
||||
key := in.PubsubName + "-" + in.Topic
|
||||
if sub, ok := s.topicRegistrar[key]; ok {
|
||||
noValidationKey := in.PubsubName
|
||||
|
||||
var sub *internal.TopicRegistration
|
||||
var ok bool
|
||||
|
||||
sub, ok = s.topicRegistrar[key]
|
||||
if !ok {
|
||||
sub, ok = s.topicRegistrar[noValidationKey]
|
||||
}
|
||||
|
||||
if ok {
|
||||
data := interface{}(in.Data)
|
||||
if len(in.Data) > 0 {
|
||||
mediaType, _, err := mime.ParseMediaType(in.DataContentType)
|
||||
|
|
|
@ -137,6 +137,36 @@ func TestTopic(t *testing.T) {
|
|||
stopTestServer(t, server)
|
||||
}
|
||||
|
||||
func TestTopicWithValidationDisabled(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
sub := &common.Subscription{
|
||||
PubsubName: "messages",
|
||||
Topic: "*",
|
||||
DisableTopicValidation: true,
|
||||
}
|
||||
server := getTestServer()
|
||||
|
||||
err := server.AddTopicEventHandler(sub, eventHandler)
|
||||
assert.Nil(t, err)
|
||||
|
||||
startTestServer(server)
|
||||
|
||||
in := &runtime.TopicEventRequest{
|
||||
Id: "a123",
|
||||
Source: "test",
|
||||
Type: "test",
|
||||
SpecVersion: "v1.0",
|
||||
DataContentType: "text/plain",
|
||||
Data: []byte("test"),
|
||||
Topic: "test",
|
||||
PubsubName: sub.PubsubName,
|
||||
}
|
||||
|
||||
_, err = server.OnTopicEvent(ctx, in)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestTopicWithErrors(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
|
||||
|
|
|
@ -29,7 +29,14 @@ func (m TopicRegistrar) AddSubscription(sub *common.Subscription, fn common.Topi
|
|||
if fn == nil {
|
||||
return fmt.Errorf("topic handler required")
|
||||
}
|
||||
key := sub.PubsubName + "-" + sub.Topic
|
||||
|
||||
var key string
|
||||
if !sub.DisableTopicValidation {
|
||||
key = sub.PubsubName + "-" + sub.Topic
|
||||
} else {
|
||||
key = sub.PubsubName
|
||||
}
|
||||
|
||||
ts, ok := m[key]
|
||||
if !ok {
|
||||
ts = &TopicRegistration{
|
||||
|
|
Loading…
Reference in New Issue