common: rabbit refactor
Generalize interface to allow processing of any events, not just Gitea events.
This commit is contained in:
101
common/rabbitmq_test.go
Normal file
101
common/rabbitmq_test.go
Normal file
@@ -0,0 +1,101 @@
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user