Exemple #1
0
        public void Test_One_Thread_Created()
        {
            // Arrange
            pcQueue          = new PCQueueKnownDequeued();
            progressManager  = new ProgressManager();
            constituencyList = new ConstituencyList();
            testedClass      = new TestedClass("CONSUMER", pcQueue, constituencyList, progressManager);
            var expectedThreadCount = 1;

            // Act
            // Wait a few milliseconds to allow Consumer thread to start up
            Thread.Sleep(5000);

            // During this time the Consumer should have started as a single thread and incremented the running thread
            // count by one
            var actualThreadCount = TestedClass.RunningThreads;

            // Signal Consumer thread to finish
            testedClass.Finished = true;

            // Allow a short period of time for the Consumer to finish
            Thread.Sleep(1000);

            // Assert
            Assert.AreEqual(expectedThreadCount, actualThreadCount);
        }
Exemple #2
0
 public void TestsCleanup()
 {
     testedClass      = null;
     progressManager  = null;
     constituencyList = null;
     pcQueue          = null;
 }
Exemple #3
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="Producer"/>.
        /// </summary>
        /// <param name="errorHandler">Обработчик ошибок.</param>
        /// <param name="pcQueue">Очередь Producer-Consumer.</param>
        public Producer(IErrorHandler <string> errorHandler, IPCQueue <string> pcQueue)
        {
            _errorHandler = errorHandler
                            ?? throw new ArgumentNullException(nameof(errorHandler));

            _pcQueue = pcQueue
                       ?? throw new ArgumentNullException(nameof(pcQueue));
        }
Exemple #4
0
 /// <summary>
 /// Constructor taking in four parameters
 /// </summary>
 /// <param name="id">id parameter</param>
 /// <param name="pcQueue">parameter for IPCQueue</param>
 /// <param name="constituencyList">parameter of ConstituencyList</param>
 /// <param name="progManager">parameter of ProgressManager</param>
 public Consumer(string id, IPCQueue pcQueue, ConstituencyList constituencyList, ProgressManager progManager)
 {
     this.id               = id;
     finished              = false; // Initially not finished
     this.pcQueue          = pcQueue;
     this.constituencyList = constituencyList;
     this.progManager      = progManager;
     (T = new Thread(run)).Start(); // Create a new thread for this consumer and get it started
     RunningThreads++;              // Increment the number of running consumer threads;
 }
Exemple #5
0
 /// <summary>
 /// constructor passing in four parameters
 /// </summary>
 /// <param name="id">id parameter</param>
 /// <param name="pcQueue">parameter for IPCQueue</param>
 /// <param name="configFile">parameter for ConfigData</param>
 /// <param name="IOhandler">paraemter for IConstituencyFileReader</param>
 public Producer(string id, IPCQueue pcQueue, ConfigData configFile, IConstituencyFileReader IOhandler)
 {
     this.id      = id;
     finished     = false; // Initially not finished
     this.pcQueue = pcQueue;
     //counter = 0; // Initial value for the work item counter]
     this.configFile = configFile;
     this.IOhandler  = IOhandler;
     (T = new Thread(run)).Start(); // Create a new thread for this producer and get it started
     RunningThreads++;              // Increment the number of running producer threads;
 }
Exemple #6
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="Consumer"/>.
        /// </summary>
        /// <param name="errorHandler">Обработчик ошибок.</param>
        /// <param name="fileHandler">Обработчик файлов.</param>
        /// <param name="resultHandler">Обработчик результатов.</param>
        /// <param name="pcQueue">Очередь Producer-Consumer.</param>
        public Consumer(
            IErrorHandler <string> errorHandler,
            IFileHandler <Result <ulong> > fileHandler,
            IResultHandler <ConsumerResult> resultHandler,
            IPCQueue <string> pcQueue)
        {
            _errorHandler = errorHandler
                            ?? throw new ArgumentNullException(nameof(errorHandler));

            _fileHandler = fileHandler
                           ?? throw new ArgumentNullException(nameof(fileHandler));

            _resultHandler = resultHandler
                             ?? throw new ArgumentNullException(nameof(resultHandler));

            _pcQueue = pcQueue
                       ?? throw new ArgumentNullException(nameof(pcQueue));
        }
Exemple #7
0
        public void Test_Run_Method_Null_Dequeued_Expect_No_ProgressManager_Accesses()
        {
            // Arrange
            pcQueue          = new PCQueueNullDequeued();
            progressManager  = new ProgressManager();
            constituencyList = new ConstituencyList();
            testedClass      = new TestedClass("Consumer", pcQueue, constituencyList, progressManager);

            // Act
            // Wait a few seconds to allow Consumer thread to run for a short period, during this time the Consumer will
            // have dequeued a number of nulls each of which should be ignored, we do not know how many though and it does not
            // matter (if it works for one it works for all)
            Thread.Sleep(5000);

            // Signal Consumer thread to finish
            testedClass.Finished = true;

            // Allow a short period of time for the Consumer to finish
            Thread.Sleep(1000);

            // Assert
            // There should be no accesses of the ProgressManager
            Assert.AreEqual(0, Math.Abs(progressManager.ItemsRemaining));
        }
Exemple #8
0
        public void Test_Run_Method_Constituency_Created_Equals_Progress_Mananger_Accesses()
        {
            // Arrange
            pcQueue          = new PCQueueKnownDequeued();
            progressManager  = new ProgressManager();
            constituencyList = new ConstituencyList();
            testedClass      = new TestedClass("Consumer", pcQueue, constituencyList, progressManager);

            // Act
            // Wait a few milliseconds to allow Consumer thread to run for a short period, during this time the Consumer will
            // have created as many constituency as progress manager accesses, we do not know how many though
            Thread.Sleep(5000);

            // Signal Consumer thread to finish
            testedClass.Finished = true;

            // Allow a short period of time for the Consumer to finish
            Thread.Sleep(1000);

            // Assert
            // Expected ProgressManager accesses can be determined by the abs value of the ItemsRemaining property, one of these
            // for each time a constituency is added to the constituencylist
            Assert.AreEqual(Math.Abs(progressManager.ItemsRemaining), constituencyList.constituency.Count);
        }
Exemple #9
0
        /// <summary>
        /// Инициализирует новый экземпляр класса <see cref="PCController"/>.
        /// </summary>
        /// <param name="errorHandler">Обработчик ошибок.</param>
        /// <param name="producer">Поставщик заданий на работу.</param>
        /// <param name="consumer">Исполнитель.</param>
        /// <param name="pcQueue">Очередь Producer-Consumer.</param>
        /// <param name="settings">Настройки приложения.</param>
        public PCController(
            IErrorHandler <string> errorHandler,
            IProducer <string> producer,
            IConsumer consumer,
            IPCQueue <string> pcQueue,
            Settings settings)
        {
            _errorHandler = errorHandler
                            ?? throw new ArgumentNullException(nameof(errorHandler));

            _producer = producer
                        ?? throw new ArgumentNullException(nameof(producer));

            _consumer = consumer
                        ?? throw new ArgumentNullException(nameof(consumer));

            _pcQueue = pcQueue
                       ?? throw new ArgumentNullException(nameof(pcQueue));

            _settings = settings
                        ?? throw new ArgumentNullException(nameof(settings));

            InitializeTasks(settings.MaxNumberOfParallelTasks);
        }