Beispiel #1
0
        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);
        }
Beispiel #8
0
    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));
    }