SHA256
1
0
forked from adamm/autogits
Files
autogits/common/listen_test.go

100 lines
2.3 KiB
Go

package common
import (
"net/url"
"slices"
"testing"
)
func TestListenDefinitionsTopicUpdate(t *testing.T) {
tests := []struct {
name string
handlers []string
orgs1, orgs2 []string
topicDelta []string
}{
{
name: "no handlers, no orgs",
},
{
name: "adding one org",
handlers: []string{"foo"},
orgs2: []string{"NewOrg"},
topicDelta: []string{"+suse.src.NewOrg.foo.#"},
},
{
name: "adding two orgs",
handlers: []string{"foo", "bar"},
orgs1: []string{"old"},
orgs2: []string{"old", "NewOrg", "NewOrg2"},
topicDelta: []string{"+suse.src.NewOrg.foo.#", "+suse.src.NewOrg2.foo.#", "+suse.src.NewOrg.bar.#", "+suse.src.NewOrg2.bar.#"},
},
{
name: "adding one org and removing old one",
handlers: []string{"foo", "bar"},
orgs1: []string{"old"},
orgs2: []string{"NewOrg"},
topicDelta: []string{"+suse.src.NewOrg.foo.#", "+suse.src.NewOrg.bar.#", "-suse.src.old.foo.#", "-suse.src.old.bar.#"},
},
{
name: "adding one org and removing old one",
handlers: []string{"foo", "bar"},
orgs1: []string{"NewOrg"},
orgs2: []string{"old"},
topicDelta: []string{"-suse.src.NewOrg.foo.#", "-suse.src.NewOrg.bar.#", "+suse.src.old.foo.#", "+suse.src.old.bar.#"},
},
}
u, _ := url.Parse("amqps://rabbit.example.com")
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
l := ListenDefinitions{
Orgs: test.orgs1,
Handlers: make(map[string]RequestProcessor),
topicSubChanges: make(chan string, len(test.topicDelta)*10),
RabbitURL: u,
}
slices.Sort(test.topicDelta)
for _, r := range test.handlers {
l.Handlers[r] = nil
}
changes := []string{}
l.UpdateTopics()
a:
for {
select {
case c := <-l.topicSubChanges:
changes = append(changes, c)
default:
changes = []string{}
break a
}
}
l.Orgs = test.orgs2
l.UpdateTopics()
changes = []string{}
b:
for {
select {
case c := <-l.topicSubChanges:
changes = append(changes, c)
default:
slices.Sort(changes)
break b
}
}
if !slices.Equal(changes, test.topicDelta) {
t.Error("got:", changes, " expected:", test.topicDelta)
}
})
}
}