//--// 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))); } }
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); }
//--// 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))); }
//--// 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 ); }
//--// 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 ) ) ); } }