func (p HandlerProvider) Get( platform boshplatform.Platform, dirProvider boshdir.Provider, ) (handler boshhandler.Handler, err error) { if p.handler != nil { handler = p.handler return } mbusURL, err := url.Parse(p.settingsService.GetSettings().Mbus) if err != nil { err = bosherr.WrapError(err, "Parsing handler URL") return } switch mbusURL.Scheme { case "nats": handler = NewNatsHandler(p.settingsService, yagnats.NewClient(), p.logger) case "https": handler = boshmicro.NewHTTPSHandler(mbusURL, p.logger, platform.GetFs(), dirProvider) default: err = bosherr.Errorf("Message Bus Handler with scheme %s could not be found", mbusURL.Scheme) } p.handler = handler return }
BeforeEach(func() { settingsService = &fakesettings.FakeSettingsService{} logger = boshlog.NewLogger(boshlog.LevelNone) platform = fakeplatform.NewFakePlatform() dirProvider = boshdir.NewProvider("/var/vcap") provider = NewHandlerProvider(settingsService, logger) }) Describe("Get", func() { It("returns nats handler", func() { settingsService.Settings.Mbus = "nats://lol" handler, err := provider.Get(platform, dirProvider) Expect(err).ToNot(HaveOccurred()) // yagnats.NewClient returns new object every time expectedHandler := NewNatsHandler(settingsService, yagnats.NewClient(), logger) Expect(reflect.TypeOf(handler)).To(Equal(reflect.TypeOf(expectedHandler))) }) It("returns https handler", func() { url, err := gourl.Parse("https://lol") Expect(err).ToNot(HaveOccurred()) settingsService.Settings.Mbus = "https://lol" handler, err := provider.Get(platform, dirProvider) Expect(err).ToNot(HaveOccurred()) Expect(handler).To(Equal(micro.NewHTTPSHandler(url, logger, platform.GetFs(), dirProvider))) }) It("returns an error if not supported", func() { settingsService.Settings.Mbus = "unknown-scheme://lol"