protected override void Load(ContainerBuilder builder) { // ITransportSettings builder.Register(c => new DefaultTransportSettings(this.scheme, HostName, this.port, this.tlsCertificate)) .As <ITransportSettings>() .SingleInstance(); // ITransportListenerProvider builder.Register(c => new AmqpTransportListenerProvider()) .As <ITransportListenerProvider>() .SingleInstance(); // ILinkHandlerProvider builder.Register( c => { IMessageConverter <AmqpMessage> messageConverter = new AmqpMessageConverter(); IMessageConverter <AmqpMessage> twinMessageConverter = new AmqpTwinMessageConverter(); IMessageConverter <AmqpMessage> directMethodMessageConverter = new AmqpDirectMethodMessageConverter(); var identityProvider = c.Resolve <IIdentityProvider>(); ILinkHandlerProvider linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, directMethodMessageConverter, identityProvider); return(linkHandlerProvider); }) .As <ILinkHandlerProvider>() .SingleInstance(); // Task<AmqpProtocolHead> builder.Register( async c => { var identityFactory = c.Resolve <IClientCredentialsFactory>(); var transportSettings = c.Resolve <ITransportSettings>(); var transportListenerProvider = c.Resolve <ITransportListenerProvider>(); var linkHandlerProvider = c.Resolve <ILinkHandlerProvider>(); var credentialsCacheTask = c.Resolve <Task <ICredentialsCache> >(); var authenticatorTask = c.Resolve <Task <IAuthenticator> >(); var connectionProviderTask = c.Resolve <Task <IConnectionProvider> >(); ICredentialsCache credentialsCache = await credentialsCacheTask; IAuthenticator authenticator = await authenticatorTask; IConnectionProvider connectionProvider = await connectionProviderTask; var webSocketListenerRegistry = c.Resolve <IWebSocketListenerRegistry>(); AmqpSettings amqpSettings = AmqpSettingsProvider.GetDefaultAmqpSettings( this.iotHubHostName, authenticator, identityFactory, linkHandlerProvider, connectionProvider, credentialsCache); return(new AmqpProtocolHead( transportSettings, amqpSettings, transportListenerProvider, webSocketListenerRegistry)); }) .As <Task <AmqpProtocolHead> >() .SingleInstance(); base.Load(builder); }
public void GetLinkHandlerTest(LinkType linkType, bool isReceiver, Type expectedLinkHandlerType) { // Arrange var messageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var twinMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var methodMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, methodMessageConverter); var uri = new Uri("amqps://foo.bar//abs/prq"); var amqpConnection = Mock.Of <IAmqpConnection>(c => c.FindExtension <IConnectionHandler>() == Mock.Of <IConnectionHandler>()); var amqpSession = Mock.Of <IAmqpSession>(s => s.Connection == amqpConnection); IAmqpLink amqpLink = isReceiver ? Mock.Of <IReceivingAmqpLink>(l => l.IsReceiver && l.Session == amqpSession) : Mock.Of <ISendingAmqpLink>(l => !l.IsReceiver && l.Session == amqpSession) as IAmqpLink; if (linkType == LinkType.Cbs) { Mock.Get(amqpConnection).Setup(c => c.FindExtension <ICbsNode>()).Returns(Mock.Of <ICbsNode>()); } // Act ILinkHandler linkHandler = linkHandlerProvider.GetLinkHandler(linkType, amqpLink, uri, new Dictionary <string, string>()); // Assert Assert.NotNull(linkHandler); Assert.IsType(expectedLinkHandlerType, linkHandler); }
public void GetIdentityFromBoundVariablesTest(IDictionary <string, string> boundVariables, string expectedDeviceId, string expectedModuleId) { // Arrange var messageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var twinMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var methodMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var identityProvider = new IdentityProvider("foo.azure-device.net"); var metadataStore = Mock.Of <IMetadataStore>(); var linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, methodMessageConverter, identityProvider, metadataStore); // Act IIdentity identity = linkHandlerProvider.GetIdentity(boundVariables); // Assert if (string.IsNullOrEmpty(expectedModuleId)) { Assert.IsType <DeviceIdentity>(identity); Assert.Equal(expectedDeviceId, identity.Id); } else { Assert.IsType <ModuleIdentity>(identity); Assert.Equal(expectedDeviceId, ((ModuleIdentity)identity).DeviceId); Assert.Equal(expectedModuleId, ((ModuleIdentity)identity).ModuleId); } }
public void GetLinkHandlerTest(string url, bool isReceiver, Type expectedLinkHandlerType) { // Arrange var messageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var twinMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var methodMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var identityProvider = new IdentityProvider("foo.bar"); var metadataStore = Mock.Of <IMetadataStore>(); var linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, methodMessageConverter, identityProvider, metadataStore); var uri = new Uri(url); var amqpClientConnectionsHandler = Mock.Of <IClientConnectionsHandler>(c => c.GetConnectionHandler(It.IsAny <IIdentity>()) == Mock.Of <IConnectionHandler>()); var amqpConnection = Mock.Of <IAmqpConnection>(c => c.FindExtension <IClientConnectionsHandler>() == amqpClientConnectionsHandler); var amqpSession = Mock.Of <IAmqpSession>(s => s.Connection == amqpConnection); IAmqpLink amqpLink = isReceiver ? Mock.Of <IReceivingAmqpLink>(l => l.IsReceiver && l.Session == amqpSession) : Mock.Of <ISendingAmqpLink>(l => !l.IsReceiver && l.Session == amqpSession) as IAmqpLink; if (url.Contains("$cbs")) { Mock.Get(amqpConnection).Setup(c => c.FindExtension <ICbsNode>()).Returns(Mock.Of <ICbsNode>()); } // Act ILinkHandler linkHandler = linkHandlerProvider.Create(amqpLink, uri); // Assert Assert.NotNull(linkHandler); Assert.IsType(expectedLinkHandlerType, linkHandler); }
public void GetInvalidLinkTypeTest(string linkUri, bool isReceiver) { // Arrange var messageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var twinMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var methodMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, methodMessageConverter); var amqpLink = Mock.Of <IAmqpLink>(l => l.IsReceiver == isReceiver); var uri = new Uri(linkUri); // Act / Assert Assert.Throws <InvalidOperationException>(() => linkHandlerProvider.GetLinkType(amqpLink, uri)); }
public void GetInvalidLinkTypeTest(string linkUri, bool isReceiver) { // Arrange var messageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var twinMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var methodMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var identityProvider = new IdentityProvider("foo.bar"); var productInfoStore = Mock.Of <IProductInfoStore>(); var modelIdStore = Mock.Of <IModelIdStore>(); var linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, methodMessageConverter, identityProvider, productInfoStore, modelIdStore); var amqpLink = Mock.Of <IAmqpLink>(l => l.IsReceiver == isReceiver); var uri = new Uri(linkUri); // Act / Assert Assert.Throws <InvalidOperationException>(() => linkHandlerProvider.GetLinkType(amqpLink, uri)); }
public void GetLinkTypeTest(string linkUri, bool isReceiver, LinkType expectedLinkType, IDictionary <string, string> expectedBoundVariables) { // Arrange var messageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var twinMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var methodMessageConverter = Mock.Of <IMessageConverter <AmqpMessage> >(); var linkHandlerProvider = new LinkHandlerProvider(messageConverter, twinMessageConverter, methodMessageConverter); var amqpLink = Mock.Of <IAmqpLink>(l => l.IsReceiver == isReceiver); var uri = new Uri(linkUri); // Act (LinkType LinkType, IDictionary <string, string> BoundVariables)match = linkHandlerProvider.GetLinkType(amqpLink, uri); // Assert Assert.Equal(expectedLinkType, match.LinkType); Assert.Equal(expectedBoundVariables, match.BoundVariables); }
private async Task AddServicesAsync() { ISettings settings; ILogger logger; Git git; LinkHandlerProvider linkHandlerProvider; RepositoryFinder repositoryFinder; settings = new Settings(this); logger = await Logger.CreateAsync(); git = new Git(logger); linkHandlerProvider = new LinkHandlerProvider(settings, git, logger); repositoryFinder = new RepositoryFinder(git, settings, logger); AddService(typeof(LinkHandlerProvider), (_, _, _) => Task.FromResult <object>(linkHandlerProvider)); AddService(typeof(ILogger), (_, _, _) => Task.FromResult <object>(logger)); AddService(typeof(RepositoryFinder), (_, _, _) => Task.FromResult <object>(repositoryFinder)); }