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) } }) } }