public void DispatchToKafkaServerTest()
        {
            //ARRANGE
            var documentId = Guid.NewGuid();
            var document   = new ParentTestClass {
                Email = "*****@*****.**", IntField = 10, DateFiled = DateTimeOffset.Now, Child = new ChildClass {
                    Name = "Child1", ChildEmail = "*****@*****.**", ChildIntField = 100, ChildDateFiled = DateTimeOffset.Now
                }
            };

            document.Child.Parent = document;

            var dependencyResolver = new DependencyResolverMock();

            //var client = SearchClientFactory.GetClient();
            //var clientFactory = SearchClientFactory.GetClientFactory();
            //SearchClientFactory.RegisterDependencies(dependencyResolver);

            ////create an unique index
            var indexId               = Guid.NewGuid();
            var indexName             = String.Format("{0}_{1}", typeof(ParentTestClass).Name, indexId);
            var indexContext          = new IndexContext(typeof(ParentTestClass), indexName);
            var producerConfigManager = new ProducerConfigManager(dependencyResolver);

            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new ClientIdProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new EndPoindProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new ProducerTopicConfigProvider(), Lifetime.Transient);
            ////set up document CRUD controller and create a mock document
            //var responseHandler = new ResponseHandler();
            //var indexManager = new IndexManager(dependencyResolver, clientFactory, responseHandler);
            //var documentDispatcher = new DocumentDispatcher(clientFactory, indexManager, responseHandler);
            //var documentclient = new DocumentController(documentDispatcher, indexManager, responseHandler);
            try
            {
                var context = new UpsertDocumentContext <ParentTestClass>(documentId)
                {
                    Document = document, IndexContext = indexContext
                };
                var dispatcher = new KafkaDispatcherConfuence(producerConfigManager);
                //ACT
                dispatcher.UpsertDocument(context);
                //.Wait();

                //ASSERT
            }
            finally
            {
            }
        }
        public void DispatchToKafkaServerTest1()
        {
            //ARRANGE
            var documentId = Guid.NewGuid();
            var document   = PersonAggregateFactory.BuildPersonSearchModel(documentId, "Daniel1", "Georgiev1");

            var dependencyResolver = new DependencyResolverMock();

            ////create an unique index
            var indexId               = Guid.NewGuid();
            var indexName             = String.Format("{0}_{1}", typeof(EsPersonSearch).Name, indexId);
            var indexContext          = new IndexContext(typeof(EsPersonSearch), indexName);
            var producerConfigManager = new ProducerConfigManager(dependencyResolver);

            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new ClientIdProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new EndPoindProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new ProducerTopicConfigProvider(), Lifetime.Transient);


            try
            {
                var context = new UpsertDocumentContext <EsPersonSearch>(documentId)
                {
                    Document = document, IndexContext = indexContext
                };
                var dispatcher         = new KafkaDispatcherConfuence(producerConfigManager);
                var documentController = new DocumentControllerMock(dispatcher);
                //ACT
                documentController.UpsertDocument(context);
                //.Wait();

                //ASSERT
            }
            finally
            {
            }
        }
        //private readonly IIndexManager _indexManager;
        //private readonly IResponseHandler _responseHandler;

        public KafkaDispatcherConfuence(ProducerConfigManager producerConfigManager)
        {
            this._producerConfigManager = producerConfigManager;
        }
        public void RecieveMessageFromKafkaTest()
        {
            //ARRANGE
            var recieved   = false;
            var documentId = Guid.NewGuid();
            var document   = new ParentTestClass();

            var dependencyResolver = new DependencyResolverMock();

            //var client = SearchClientFactory.GetClient();
            //var clientFactory = SearchClientFactory.GetClientFactory();
            //SearchClientFactory.RegisterDependencies(dependencyResolver);

            ////create an unique index
            var indexId               = Guid.NewGuid();
            var indexName             = String.Format("{0}_{1}", typeof(ParentTestClass).Name, indexId);
            var indexContext          = new IndexContext(typeof(ParentTestClass), indexName);
            var producerConfigManager = new ProducerConfigManager(dependencyResolver);

            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new ClientIdProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new EndPoindProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new ProducerTopicConfigProvider(), Lifetime.Transient);
            dependencyResolver.RegisterFactory <IConfigurationProvider>((t) => new GroupIdProvider(), Lifetime.Transient);
            ////set up document CRUD controller and create a mock document
            //var responseHandler = new ResponseHandler();
            //var indexManager = new IndexManager(dependencyResolver, clientFactory, responseHandler);
            //var documentDispatcher = new DocumentDispatcher(clientFactory, indexManager, responseHandler);
            //var documentclient = new DocumentController(documentDispatcher, indexManager, responseHandler);
            try
            {
                //var context = new UpsertDocumentContext<ParentTestClass>(documentId) { Document = document, IndexContext = indexContext };
                //var dispatcher = new KafkaDispatcher(producerConfigManager);
                //ACT
                var topic     = typeof(ParentTestClass).Name;
                var cancelled = false;
                //var time = new Timer(new TimerCallback((_) => cancelled = true), null, 5000, 5000);
                var valueSerializer = new BinarySerializer <ParentTestClass>();
                var keySerializer   = new BinarySerializer <Guid>();
                var config          = producerConfigManager.GetConfiguration(x => (x.ConfigurationScope & ConfigurationScope.Consumer) == ConfigurationScope.Consumer);
                using (var consumer = new Consumer <Guid, ParentTestClass>(config, keySerializer, valueSerializer))
                {
                    var metaData = consumer.GetMetadata(true);

                    consumer.OnMessage += (_, msg)
                                          =>
                    {
                        consumer.CommitAsync(msg).Wait();
                        recieved  = true;
                        cancelled = true;
                    };

                    consumer.OnPartitionEOF += (_, end)
                                               => Console.WriteLine($"Reached end of topic {end.Topic} partition {end.Partition}.");

                    consumer.OnError += (_, error) =>
                    {
                        Console.WriteLine($"Error: {error}");
                        cancelled = true;
                    };

                    consumer.Subscribe(topic);
                    var tp = new TopicPartition(topic, 0);
                    consumer.CommitAsync(new[] { new TopicPartitionOffset(tp, new Offset(15)) });
                    var possition = consumer.Position(new[] { tp });
                    var committed = consumer.Committed(new[] { new TopicPartition(topic, 0) }, TimeSpan.FromMilliseconds(5000));
                    while (!cancelled)
                    {
                        consumer.Poll(TimeSpan.FromMilliseconds(100));
                    }
                    Assert.True(recieved);
                }
            }
            finally
            {
            }
        }