create helper to validate channel name

add test cases
This commit is contained in:
Marcelo Pires
2018-09-12 09:42:45 +02:00
parent 17a2e4a408
commit b5bb59476c
3 changed files with 106 additions and 28 deletions

View File

@ -2,6 +2,7 @@ package subscription
import (
"github.com/thesyncim/faye/message"
"regexp"
)
type Unsubscriber func(subscription *Subscription) error
@ -63,3 +64,10 @@ func (s *Subscription) Unsubscribe() error {
func (s *Subscription) Publish(msg message.Data) (string, error) {
return s.pub(msg)
}
var validChannelName = regexp.MustCompile(`^\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+(\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+)*$`)
var validChannelPattern = regexp.MustCompile(`^(\/(((([a-z]|[A-Z])|[0-9])|(\-|\_|\!|\~|\(|\)|\$|\@)))+)*\/\*{1,2}$`)
func IsValidChannel(channel string) bool {
return validChannelName.MatchString(channel) || validChannelPattern.MatchString(channel)
}

View File

@ -0,0 +1,73 @@
package subscription
import "testing"
/*
assertEqual( ["/**", "/foo", "/*"],
Channel.expand("/foo") )
assertEqual( ["/**", "/foo/bar", "/foo/*", "/foo/**"],
Channel.expand("/foo/bar") )
assertEqual( ["/**", "/foo/bar/qux", "/foo/bar/*", "/foo/**", "/foo/bar/**"],
*/
func TestIsValidChannel(t *testing.T) {
type args struct {
channel string
}
tests := []struct {
name string
args args
want bool
}{
{
name: "single asterisc",
args: args{
channel: "/*",
},
want: true,
},
{
name: "double asterisc",
args: args{
channel: "/**",
},
want: true,
},
{
name: "regular channel",
args: args{
channel: "/foo",
},
want: true,
},
{
name: "regular channel 2",
args: args{
channel: "/foo/bar",
},
want: true,
},
{
name: "invalid slash ending",
args: args{
channel: "/foo/",
},
want: false,
},
{
name: "invalid asterisc at the middle",
args: args{
channel: "/foo/**/bar",
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := IsValidChannel(tt.args.channel); got != tt.want {
t.Errorf("IsValidChannel() = %v, want %v", got, tt.want)
}
})
}
}