Generalize interface to allow processing of any events, not just Gitea events.
102 lines
2.3 KiB
Go
102 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 := &RabbitMQGiteaEventsProcessor{
|
|
Orgs: test.orgs1,
|
|
Handlers: make(map[string]RequestProcessor),
|
|
c: &RabbitConnection{
|
|
RabbitURL: u,
|
|
topicSubChanges: make(chan string, len(test.topicDelta)*10),
|
|
},
|
|
}
|
|
|
|
slices.Sort(test.topicDelta)
|
|
|
|
for _, r := range test.handlers {
|
|
l.Handlers[r] = nil
|
|
}
|
|
|
|
changes := []string{}
|
|
l.c.UpdateTopics(l)
|
|
a:
|
|
for {
|
|
select {
|
|
case c := <-l.c.topicSubChanges:
|
|
changes = append(changes, c)
|
|
default:
|
|
changes = []string{}
|
|
break a
|
|
}
|
|
}
|
|
|
|
l.Orgs = test.orgs2
|
|
|
|
l.c.UpdateTopics(l)
|
|
changes = []string{}
|
|
|
|
b:
|
|
for {
|
|
select {
|
|
case c := <-l.c.topicSubChanges:
|
|
changes = append(changes, c)
|
|
default:
|
|
slices.Sort(changes)
|
|
break b
|
|
}
|
|
}
|
|
if !slices.Equal(changes, test.topicDelta) {
|
|
t.Error("got:", changes, " expected:", test.topicDelta)
|
|
}
|
|
})
|
|
}
|
|
}
|