Exemple #1
0
        //--//

        public CoreTest(ILogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentException("Cannot run tests without logging");
            }

            _completed = new AutoResetEvent(false);

            _logger = logger;

            _rand = new Random( );
            _totalMessagesSent   = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue        = new GatewayQueue <QueuedItem>( );

#if MOCK_SENDER
            _sender = new MockSender <SensorDataContract>(this);
#else
            IotHubConfig iotHubConfig = Loader.GetIotHubConfig( );

            _sender = new MessageSender <SensorDataContract>(iotHubConfig.IotHubConnectionString, _logger);
#endif

            _batchSenderThread = new BatchSenderThread <QueuedItem, SensorDataContract>(
                _gatewayQueue,
                _sender,
                dataTransform: null,
                serializedData: m => (m == null) ? null : m.JsonData,
                logger: _logger
                );

            string gatewayIPAddressString = string.Empty;
            IPAddressHelper.GetIPAddressString(ref gatewayIPAddressString);

            DataTransformsConfig dataTransformsConfig = Loader.GetDataTransformsConfig( );
            if (dataTransformsConfig.AttachIP || dataTransformsConfig.AttachTime)
            {
                Func <string, SensorDataContract> transform = (m => DataTransforms.SensorDataContractFromString(m, _logger));

                if (dataTransformsConfig.AttachTime)
                {
                    var transformPrev = transform;
                    transform = (m => DataTransforms.AddTimeCreated(transformPrev(m)));
                }

                if (dataTransformsConfig.AttachTime)
                {
                    var transformPrev = transform;
                    transform = (m => DataTransforms.AddIPToLocation(transformPrev(m), gatewayIPAddressString));
                }

                _gatewayTransform = (m => DataTransforms.QueuedItemFromSensorDataContract(transform(m)));
            }
        }
Exemple #2
0
        public CloudAdapter(IotHubSenderSettings settings)
        {
            _gatewayQueue = new GatewayQueue <QueuedItem>();
            _sender       = new IotHubSender <QueuedItem>(settings, _logger);

            _batchSenderThread = new BatchSenderThread <QueuedItem>(
                _gatewayQueue,
                _sender,
                serializedData: m => (m == null) ? null : m.JsonData,
                logger: _logger);

            _gatewayTransform = ((deviceId, json) => new QueuedItem(deviceId, json));

            service = PrepareGatewayService();
        }
        private static GatewayService CreateGateway(AMQPConfig amqpConfig)
        {
            try
            {
                var _gatewayQueue = new GatewayQueue <QueuedItem>();

                var _AMPQSender = new AMQPSender <string>(
                    amqpConfig.AMQPSAddress,
                    amqpConfig.EventHubName,
                    amqpConfig.EventHubMessageSubject,
                    amqpConfig.EventHubDeviceId,
                    amqpConfig.EventHubDeviceDisplayName,
                    _Logger
                    );

                var _batchSenderThread = new BatchSenderThread <QueuedItem, string>(
                    _gatewayQueue,
                    _AMPQSender,
                    null,
                    m => m.JsonData,
                    _Logger);

                _batchSenderThread.Start();

                GatewayService service = new GatewayService(
                    _gatewayQueue,
                    _batchSenderThread
                    )
                {
                    Logger = _Logger
                };

                service.OnDataInQueue += (data) => _batchSenderThread.Process();
                _Logger.Flush();

                return(service);
            }
            catch (Exception ex)
            {
                _Logger.LogError("Exception on creating Gateway: " + ex.Message);
            }

            return(null);
        }
        private static GatewayService CreateGateway(AMQPConfig amqpConfig)
        {
            try
            {
                var _gatewayQueue = new GatewayQueue<QueuedItem>();

                var _AMPQSender = new AMQPSender<string>(
                                                    amqpConfig.AMQPSAddress,
                                                    amqpConfig.EventHubName,
                                                    amqpConfig.EventHubMessageSubject,
                                                    amqpConfig.EventHubDeviceId,
                                                    amqpConfig.EventHubDeviceDisplayName,
                                                    _Logger
                                                    );

                var _batchSenderThread = new BatchSenderThread<QueuedItem, string>(
                                                    _gatewayQueue,
                                                    _AMPQSender,
                                                    null,
                                                    m => m.JsonData,
                                                    _Logger);

                _batchSenderThread.Start();

                GatewayService service = new GatewayService(
                    _gatewayQueue,
                    _batchSenderThread
                )
                {
                    Logger = _Logger
                };

                service.OnDataInQueue += (data) => _batchSenderThread.Process();
                _Logger.Flush();

                return service;
            }
            catch (Exception ex)
            {
                _Logger.LogError("Exception on creating Gateway: " + ex.Message);
            }

            return null;
        }
        //--//

        public RealDataTest(ILogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentException("Cannot run tests without logging");
            }

            _completed = new AutoResetEvent(false);

            _logger = logger;

            _totalMessagesSent   = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue        = new GatewayQueue <QueuedItem>( );

            _sender = new MockSender <QueuedItem>(this);

            _batchSenderThread = new BatchSenderThread <QueuedItem, QueuedItem>(_gatewayQueue, _sender, m => m, null, _logger);
        }
        //--//

        public RealDataTest(ILogger logger)
        {
            if( logger == null )
            {
                throw new ArgumentException( "Cannot run tests without logging" );
            }

             _completed = new AutoResetEvent( false );

            _logger = logger;

            _totalMessagesSent = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue = new GatewayQueue<QueuedItem>( );            

            _sender = new MockSender<QueuedItem>( this );

            _batchSenderThread = new BatchSenderThread<QueuedItem, QueuedItem>( _gatewayQueue, _sender, m => m, null, _logger );
        }
        private void TestMessagesGoFromSourceToTarget( )
        {
            MockSenderMap<int> targetMap = new MockSenderMap<int>( );
            
            MockSenderMap<int> sourceMap = new MockSenderMap<int>( );

            GatewayQueue<int> queue = new GatewayQueue<int>( );
            
            EventProcessor batchSenderThread = new BatchSenderThread<int, int>( queue, targetMap, m => m, null, _logger );
            
            batchSenderThread.Start( );

            const int batchesIterations = 100;
            const int maxQueuedItemCount = 20;
            const int waitForBatchThreadTimeMs = 22;

            for( int iteration = 0; iteration < batchesIterations; ++iteration )
            {
                int queuedItemCount = _random.Next( 1, maxQueuedItemCount );
                for( int count = 0; count < queuedItemCount; ++count )
                {
                    int itemToQueue = _random.Next( );

                    queue.Push( itemToQueue );

                    sourceMap.SendMessage( itemToQueue ).Wait( );
                }
                batchSenderThread.Process( );

                Thread.Sleep( waitForBatchThreadTimeMs );

                if( !targetMap.ContainsOthersItems( sourceMap )
                    || !sourceMap.ContainsOthersItems( targetMap ) )
                {
                    _logger.LogError( "Not processed message found" );
                    break;
                }
            }

            batchSenderThread.Stop( waitForBatchThreadTimeMs );
        }
        private void TestMessagesGoFromSourceToTarget( )
        {
            MockSenderMap <int> targetMap = new MockSenderMap <int>( );

            MockSenderMap <int> sourceMap = new MockSenderMap <int>( );

            GatewayQueue <int> queue = new GatewayQueue <int>( );

            EventProcessor batchSenderThread = new BatchSenderThread <int, int>(queue, targetMap, m => m, null, _logger);

            batchSenderThread.Start( );

            const int batchesIterations        = 100;
            const int maxQueuedItemCount       = 20;
            const int waitForBatchThreadTimeMs = 22;

            for (int iteration = 0; iteration < batchesIterations; ++iteration)
            {
                int queuedItemCount = _random.Next(1, maxQueuedItemCount);
                for (int count = 0; count < queuedItemCount; ++count)
                {
                    int itemToQueue = _random.Next( );

                    queue.Push(itemToQueue);

                    sourceMap.SendMessage(itemToQueue).Wait( );
                }
                batchSenderThread.Process( );

                Thread.Sleep(waitForBatchThreadTimeMs);

                if (!targetMap.ContainsOthersItems(sourceMap) ||
                    !sourceMap.ContainsOthersItems(targetMap))
                {
                    _logger.LogError("Not processed message found");
                    break;
                }
            }

            batchSenderThread.Stop(waitForBatchThreadTimeMs);
        }
Exemple #9
0
        //--//

        public CoreTest(ILogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentException("Cannot run tests without logging");
            }

            _completed = new AutoResetEvent(false);

            _logger = logger;

            _rand = new Random();
            _totalMessagesSent   = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue        = new GatewayQueue <QueuedItem>();

#if MOCK_SENDER
            _sender = new IotHubSender <SensorDataContract>("HostName=technobee-infrastructure-testbed-01-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=0JgLhqkHopPQVQhvm07R20T/6JZ9JTzt5T8rSRkLvBg=", _logger); // new RabbitMQSender<SensorDataContract>(_logger/*, "address"*/); // MockSender

            //"HostName=technobee-infrastructure-testbed-01-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=0JgLhqkHopPQVQhvm07R20T/6JZ9JTzt5T8rSRkLvBg="
#else
            string IotHubConnectionString = "";

            _sender = new MessageSender <SensorDataContract>(IotHubConnectionString, _logger);
#endif

            _batchSenderThread = new BatchSenderThread <QueuedItem, SensorDataContract>(
                _gatewayQueue,
                _sender,
                dataTransform: null,
                serializedData: m => (m == null) ? null : m.JsonData,
                logger: _logger
                );

            string gatewayIPAddressString = string.Empty;

            Func <string, SensorDataContract> transform = (m => DataTransforms.SensorDataContractFromString(m, _logger));


            _gatewayTransform = (m => DataTransforms.QueuedItemFromSensorDataContract(transform(m)));
        }
Exemple #10
0
        //--//

        public CoreTest(ILogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentException("Cannot run tests without logging");
            }

            _completed = new AutoResetEvent(false);

            _logger = logger;

            _rand = new Random( );
            _totalMessagesSent   = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue        = new GatewayQueue <QueuedItem>( );

#if MOCK_SENDER
            _sender = new MockSender <SensorDataContract>(this);
#else
            AMQPConfig amqpConfig = Loader.GetAMQPConfig( );

            _sender = new AMQPSender <SensorDataContract>(
                amqpConfig.AMQPSAddress,
                amqpConfig.EventHubName,
                amqpConfig.EventHubMessageSubject,
                amqpConfig.EventHubDeviceId,
                amqpConfig.EventHubDeviceDisplayName,
                _logger
                );
#endif

            _batchSenderThread = new BatchSenderThread <QueuedItem, SensorDataContract>(
                _gatewayQueue,
                _sender,
                dataTransform: null,
                serializedData: m => (m == null) ? null : m.JsonData,
                logger: _logger
                );
        }
        private void TestMessagesGoFromSourceToTargetWithTwoBatchSenderThreads( )
        {
            MockSenderAsyncQueue <int> targetQueue = new MockSenderAsyncQueue <int>( );
            MockSenderMap <int>        sourceMap   = new MockSenderMap <int>( );

            GatewayQueue <int> queue = new GatewayQueue <int>( );
            EventProcessor     batchSenderThreadA = new BatchSenderThread <int, int>(queue, targetQueue, m => m, null, _logger);
            EventProcessor     batchSenderThreadB = new BatchSenderThread <int, int>(queue, targetQueue, m => m, null, _logger);

            batchSenderThreadA.Start( );
            batchSenderThreadB.Start( );

            const int waitForBatchThreadTimeMs = 800;
            const int queuedItemCount          = 400;

            for (int count = 0; count < queuedItemCount; ++count)
            {
                int itemToQueue = _random.Next( );

                queue.Push(itemToQueue);

                sourceMap.SendMessage(itemToQueue).Wait( );
            }
            batchSenderThreadA.Process( );
            batchSenderThreadB.Process( );

            Thread.Sleep(waitForBatchThreadTimeMs);

            MockSenderMap <int> targetMap = targetQueue.ToMockSenderMap( );

            if (!targetMap.ContainsOthersItems(sourceMap) ||
                !sourceMap.ContainsOthersItems(targetMap))
            {
                _logger.LogError("Not processed message found");
            }

            batchSenderThreadA.Stop(waitForBatchThreadTimeMs);
            batchSenderThreadB.Stop(waitForBatchThreadTimeMs);
        }
        //--//

        public SocketTest(ILogger logger)
        {
            if (logger == null)
            {
                throw new ArgumentException("Cannot run tests without logging");
            }

            _completed = new AutoResetEvent(false);

            _logger = logger;

            _totalMessagesSent   = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue        = new GatewayQueue <QueuedItem>( );

            _sender = new MockSender <QueuedItem>(this);
            //
            // To test with actual event hub, use the code below
            //  _sender = new AMQPSender<SensorDataContract>(Constants.AMQPSAddress, Constants.EventHubName, Constants.EventHubMessageSubject, Constants.EventHubDeviceId, Constants.EventHubDeviceDisplayName);
            //  ((AMQPSender<QueuedItem>)_Sender).Logger = new TestLogger();
            //

            _batchSenderThread = new BatchSenderThread <QueuedItem, QueuedItem>(_gatewayQueue, _sender, m => m, null, _logger);
        }
        //--//
        public SocketTest( ILogger logger )
        {
            if( logger == null )
            {
                throw new ArgumentException( "Cannot run tests without logging" );
            }

             _completed = new AutoResetEvent( false );

            _logger = logger;

            _totalMessagesSent = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue = new GatewayQueue<QueuedItem>( );

            _sender = new MockSender<QueuedItem>( this );
            //
            // To test with actual event hub, use the code below
            //  _sender = new AMQPSender<SensorDataContract>(Constants.AMQPSAddress, Constants.EventHubName, Constants.EventHubMessageSubject, Constants.EventHubDeviceId, Constants.EventHubDeviceDisplayName);
            //  ((AMQPSender<QueuedItem>)_Sender).Logger = new TestLogger();
            //

            _batchSenderThread = new BatchSenderThread<QueuedItem, QueuedItem>( _gatewayQueue, _sender, m => m, null, _logger );
        }
        private void TestMessagesGoFromSourceToTargetWithTwoBatchSenderThreads( )
        {
            MockSenderAsyncQueue<int> targetQueue = new MockSenderAsyncQueue<int>( );
            MockSenderMap<int> sourceMap = new MockSenderMap<int>( );

            GatewayQueue<int> queue = new GatewayQueue<int>( );
            EventProcessor batchSenderThreadA = new BatchSenderThread<int, int>( queue, targetQueue, m => m, null, _logger );
            EventProcessor batchSenderThreadB = new BatchSenderThread<int, int>( queue, targetQueue, m => m, null, _logger );

            batchSenderThreadA.Start( );
            batchSenderThreadB.Start( );

            const int waitForBatchThreadTimeMs = 800;
            const int queuedItemCount = 400;

            for( int count = 0; count < queuedItemCount; ++count )
            {
                int itemToQueue = _random.Next( );

                queue.Push( itemToQueue );

                sourceMap.SendMessage( itemToQueue ).Wait( );
            }
            batchSenderThreadA.Process( );
            batchSenderThreadB.Process( );

            Thread.Sleep( waitForBatchThreadTimeMs );

            MockSenderMap<int> targetMap = targetQueue.ToMockSenderMap( );
            if( !targetMap.ContainsOthersItems( sourceMap )
                || !sourceMap.ContainsOthersItems( targetMap ) )
            {
                _logger.LogError( "Not processed message found" );
            }

            batchSenderThreadA.Stop( waitForBatchThreadTimeMs );
            batchSenderThreadB.Stop( waitForBatchThreadTimeMs );
        }        
Exemple #15
0
        //--//

        public CoreTest( ILogger logger )
        {
            if( logger == null )
            {
                throw new ArgumentException( "Cannot run tests without logging" );
            }

            _completed = new AutoResetEvent( false );

            _logger = logger;

            _rand = new Random( );
            _totalMessagesSent = 0;
            _totalMessagesToSend = 0;
            _gatewayQueue = new GatewayQueue<QueuedItem>( );

#if MOCK_SENDER
            _sender = new MockSender<SensorDataContract>(this);
#else

            AMQPConfig amqpConfig = Loader.GetAMQPConfig( );

            _sender = new AMQPSender<SensorDataContract>(
                                                amqpConfig.AMQPSAddress,
                                                amqpConfig.EventHubName,
                                                amqpConfig.EventHubMessageSubject,
                                                amqpConfig.EventHubDeviceId,
                                                amqpConfig.EventHubDeviceDisplayName,
                                                _logger
                                                );
#endif

            _batchSenderThread = new BatchSenderThread<QueuedItem, SensorDataContract>(
                _gatewayQueue,
                _sender,
                dataTransform : null, 
                serializedData: m => ( m == null ) ? null : m.JsonData,
                logger        : _logger 
                );

            string gatewayIPAddressString = string.Empty;
            IPAddressHelper.GetIPAddressString( ref gatewayIPAddressString );

            DataTransformsConfig dataTransformsConfig = Loader.GetDataTransformsConfig( );
            if( dataTransformsConfig.AttachIP || dataTransformsConfig.AttachTime )
            {
                Func<string, SensorDataContract> transform = ( m => DataTransforms.SensorDataContractFromString( m, _logger ) );

                if( dataTransformsConfig.AttachTime )
                {
                    var transformPrev = transform;
                    transform = ( m => DataTransforms.AddTimeCreated( transformPrev( m ) ) );
                }

                if( dataTransformsConfig.AttachTime )
                {
                    var transformPrev = transform;
                    transform = ( m => DataTransforms.AddIPToLocation( transformPrev( m ), gatewayIPAddressString ) );
                }

                _gatewayTransform = ( m => DataTransforms.QueuedItemFromSensorDataContract( transform( m ) ) );
            }
        }