1
0
Fork 0
golang-github-nicholas-fedo.../pkg/router/router_suite_test.go
Daniel Baumann c0c4addb85
Adding upstream version 0.8.9.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-22 10:16:14 +02:00

157 lines
4.7 KiB
Go

package router
import (
"fmt"
"log"
"os"
"testing"
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
)
func TestRouter(t *testing.T) {
gomega.RegisterFailHandler(ginkgo.Fail)
ginkgo.RunSpecs(t, "Router Suite")
}
var sr ServiceRouter
const (
mockCustomURL = "teams+https://publicservice.webhook.office.com/webhookb2/11111111-4444-4444-8444-cccccccccccc@22222222-4444-4444-8444-cccccccccccc/IncomingWebhook/33333333012222222222333333333344/44444444-4444-4444-8444-cccccccccccc/V2ESyij_gAljSoUQHvZoZYzlpAoAXExyOl26dlf1xHEx05?host=publicservice.webhook.office.com"
)
var _ = ginkgo.Describe("the router suite", func() {
ginkgo.BeforeEach(func() {
sr = ServiceRouter{
logger: log.New(ginkgo.GinkgoWriter, "Test", log.LstdFlags),
}
})
ginkgo.When("extract service name is given a url", func() {
ginkgo.It("should extract the protocol/service part", func() {
url := "slack://rest/of/url"
serviceName, _, err := sr.ExtractServiceName(url)
gomega.Expect(err).ToNot(gomega.HaveOccurred())
gomega.Expect(serviceName).To(gomega.Equal("slack"))
})
ginkgo.It("should extract the service part when provided in custom form", func() {
url := "teams+https://rest/of/url"
serviceName, _, err := sr.ExtractServiceName(url)
gomega.Expect(err).ToNot(gomega.HaveOccurred())
gomega.Expect(serviceName).To(gomega.Equal("teams"))
})
ginkgo.It("should return an error if the protocol/service part is missing", func() {
url := "://rest/of/url"
serviceName, _, err := sr.ExtractServiceName(url)
gomega.Expect(err).To(gomega.HaveOccurred())
gomega.Expect(serviceName).To(gomega.Equal(""))
})
ginkgo.It(
"should return an error if the protocol/service part is containing invalid letters",
func() {
url := "a d://rest/of/url"
serviceName, _, err := sr.ExtractServiceName(url)
gomega.Expect(err).To(gomega.HaveOccurred())
gomega.Expect(serviceName).To(gomega.Equal(""))
},
)
})
ginkgo.When("initializing a service with a custom URL", func() {
ginkgo.It("should return an error if the service does not support it", func() {
service, err := sr.initService("log+https://hybr.is")
gomega.Expect(err).To(gomega.HaveOccurred())
gomega.Expect(service).To(gomega.BeNil())
})
})
ginkgo.Describe("the service map", func() {
ginkgo.When("resolving implemented services", func() {
services := (&ServiceRouter{}).ListServices()
for _, scheme := range services {
// copy ref to local closure
serviceScheme := scheme
ginkgo.It(fmt.Sprintf("should return a Service for '%s'", serviceScheme), func() {
service, err := newService(serviceScheme)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(service).ToNot(gomega.BeNil())
})
}
})
})
ginkgo.When("initializing a service with a custom URL", func() {
ginkgo.It("should return an error if the service does not support it", func() {
service, err := sr.initService("log+https://hybr.is")
gomega.Expect(err).To(gomega.HaveOccurred())
gomega.Expect(service).To(gomega.BeNil())
})
ginkgo.It("should successfully init a service that does support it", func() {
service, err := sr.initService(mockCustomURL)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(service).NotTo(gomega.BeNil())
})
})
ginkgo.When("a message is enqueued", func() {
ginkgo.It("should be added to the internal queue", func() {
sr.Enqueue("message body")
gomega.Expect(sr.queue).ToNot(gomega.BeNil())
gomega.Expect(sr.queue).To(gomega.HaveLen(1))
})
})
ginkgo.When("a formatted message is enqueued", func() {
ginkgo.It("should be added with the specified format", func() {
sr.Enqueue("message with number %d", 5)
gomega.Expect(sr.queue).ToNot(gomega.BeNil())
gomega.Expect(sr.queue[0]).To(gomega.Equal("message with number 5"))
})
})
ginkgo.When("it leaves the scope after flush has been deferred", func() {
ginkgo.When("it hasn't been assigned a sender", func() {
ginkgo.It("should not cause a panic", func() {
defer sr.Flush(nil)
sr.Enqueue("message")
})
})
})
ginkgo.When("router has not been provided a logger", func() {
ginkgo.It("should not crash when trying to log", func() {
router := ServiceRouter{}
_, err := router.initService(mockCustomURL)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
})
})
})
func ExampleNew() {
logger := log.New(os.Stdout, "", 0)
sr, err := New(logger, "logger://")
if err != nil {
log.Fatalf("could not create router: %s", err)
}
sr.Send("hello", nil)
// Output: hello
}
func ExampleServiceRouter_Enqueue() {
logger := log.New(os.Stdout, "", 0)
sr, err := New(logger, "logger://")
if err != nil {
log.Fatalf("could not create router: %s", err)
}
defer sr.Flush(nil)
sr.Enqueue("hello")
sr.Enqueue("world")
// Output:
// hello
// world
}