Ejemplo n.º 1
0
        public void ctor_New_ShouldReturnInstantiatedObject()
        {
            var service = new Service("echo");

            Assert.That(service, Is.Not.Null);
            Assert.That(service.Name, Is.EqualTo("echo"));
            Assert.That(service.WaitingWorkers, Is.Not.Null);
            Assert.That(service.PendingRequests, Is.Not.Null);
        }
Ejemplo n.º 2
0
        public void AddWaitingWorker_UnknownWorker_ShouldReturnAddToWaitingAndKnownWorkers()
        {
            var service = new Service("service");
            var worker = new Worker("W001", new NetMQFrame("W001"), service);

            service.AddWaitingWorker(worker);

            Assert.That(service.WaitingWorkers.Count(), Is.EqualTo(1));
            Assert.That(service.DoWorkersExist(), Is.True);
        }
Ejemplo n.º 3
0
        public void GetNextWorker_SomeWaitingWorker_ShouldReturnOldestWorkerFirst()
        {
            Worker oldestWorker = null;
            var service = new Service("service");

            for (var i = 0; i < 10; i++)
            {
                var id = $"W0{i:N3}";
                var worker = new Worker(id, new NetMQFrame(id), service);

                if (i == 0)
                    oldestWorker = worker;

                service.AddWaitingWorker(worker);
            }

            Assert.That(service.GetNextWorker(), Is.EqualTo(oldestWorker));
            Assert.That(service.WaitingWorkers.Count(), Is.EqualTo(9));
        }
Ejemplo n.º 4
0
        public void DeleteWorker_KnownWorker_ShouldReturnAddToWaitingAndKnownWorkers()
        {
            Worker workerToDelete = null;
            var service = new Service("service");

            for (var i = 0; i < 10; i++)
            {
                var id = $"W0{i:N3}";
                var worker = new Worker(id, new NetMQFrame(id), service);

                if (i == 5)
                    workerToDelete = worker;

                service.AddWaitingWorker(worker);
            }

            Assert.That(service.WaitingWorkers.Count(), Is.EqualTo(10));
            Assert.That(service.DoWorkersExist(), Is.True);

            service.DeleteWorker(workerToDelete);

            Assert.That(service.WaitingWorkers.Count(), Is.EqualTo(9));
        }
Ejemplo n.º 5
0
        public void GetHashCode_DifferentServiceObjects_ShouldReturnSameHashCode()
        {
            var service = new Service("service");
            var other = new Service("service1");

            Assert.That(service.GetHashCode(), Is.Not.EqualTo(other.GetHashCode()));
        }
Ejemplo n.º 6
0
        public void Equals_DifferentTypes_ShouldReturnFalse()
        {
            var service = new Service("service");
            var other = new Worker("id", new NetMQFrame("id"), service);

            Assert.That(service.Equals(other), Is.False);
        }
Ejemplo n.º 7
0
        public void Equals_NotEqual_ShouldReturnFalse()
        {
            var service = new Service("service");
            var other = new Service("echo");

            Assert.That(service.Equals(other), Is.False);
        }
Ejemplo n.º 8
0
        public void Equals_EqualButDifferentServiceObjects_ShouldReturnTrue()
        {
            var service = new Service("service");
            var other = new Service("service");

            Assert.That(service.Equals(other), Is.True);
        }
Ejemplo n.º 9
0
        public void GetNextWorker_GetAllWaitingWorkers_ShouldReturnEmptyWaitingAndLeaveKnownUnchanged()
        {
            var service = new Service("service");

            for (var i = 0; i < 10; i++)
            {
                var id = $"W0{i:N3}";
                var worker = new Worker(id, new NetMQFrame(id), service);
                service.AddWaitingWorker(worker);
                service.GetNextWorker();
            }

            Assert.That(service.WaitingWorkers, Is.Empty);
            Assert.That(service.DoWorkersExist(), Is.True);
        }
Ejemplo n.º 10
0
        /// <summary>
        ///     adds the worker to the service and the known worker list
        ///     if not already known
        ///     it dispatches pending requests for this service as well
        /// </summary>
        private void AddWorker (Worker worker, Service service)
        {
            worker.Expiry = DateTime.UtcNow + m_heartbeatExpiry;

            if (!m_knownWorkers.Contains (worker))
            {
                m_knownWorkers.Add (worker);

                DebugLog (string.Format ("added {0} to known worker.", worker.Id));
            }

            service.AddWaitingWorker (worker);

            DebugLog (string.Format ("added {0} to waiting worker in service {1}.",
                                     worker.Id,
                                     service.Name));

            // get pending messages out
            ServiceDispatch (service, null);
        }
Ejemplo n.º 11
0
        public void GetNextRequest_MultipleRequestExist_ShouldReturnOldesRequestAndDeleteFromPending()
        {
            var service = new Service("service");

            for (int i = 0; i < 10; i++)
            {
                var request = new NetMQMessage();
                request.Push("DATA");
                request.Push("SERVICE");
                request.Push($"HEADER_{i}");

                service.AddRequest(request);
            }

            for (int i = 0; i < 5; i++)
            {
                var req = service.GetNextRequest();

                Assert.That(req.First.ConvertToString(), Is.EqualTo($"HEADER_{i}"));
            }

            Assert.That(service.PendingRequests.Count, Is.EqualTo(5));
        }
Ejemplo n.º 12
0
        public void GetNextRequest_SingleRequestExist_ShouldReturnOldesRequestAndDeleteFromPending()
        {
            var request = new NetMQMessage();
            request.Push("DATA");
            request.Push("SERVICE");
            request.Push("HEADER");

            var service = new Service("service");

            service.AddRequest(request);

            Assert.That(service.GetNextRequest(), Is.EqualTo(request));
            Assert.That(service.PendingRequests.Count, Is.EqualTo(0));
        }
Ejemplo n.º 13
0
        public void AddRequest_MultipleRequest_ShouldChangePendingRequests()
        {
            var service = new Service("service");

            for (int i = 0; i < 10; i++)
            {
                var request = new NetMQMessage();
                request.Push("DATA");
                request.Push("SERVICE");
                request.Push("HEADER");

                service.AddRequest(request);
            }

            Assert.That(service.PendingRequests.Count, Is.EqualTo(10));
        }
Ejemplo n.º 14
0
        public void AddRequest_OneMultiFrameRequest_ShouldChangePendingRequests()
        {
            var request = new NetMQMessage();
            request.Push("DATA");
            request.Push("SERVICE");
            request.Push("HEADER");

            var service = new Service("service");

            service.AddRequest(request);

            Assert.That(service.PendingRequests.Count, Is.EqualTo(1));
        }
Ejemplo n.º 15
0
        public void DeleteWorker_AllWorker_ShouldEmptyWaitingAndKnown()
        {
            var service = new Service("service");

            for (var i = 0; i < 10; i++)
            {
                var id = $"W0{i:N3}";
                var worker = new Worker(id, new NetMQFrame(id), service);
                service.AddWaitingWorker(worker);
                service.DeleteWorker(worker);
            }

            Assert.That(service.WaitingWorkers, Is.Empty);
            Assert.That(service.DoWorkersExist(), Is.False);
        }
Ejemplo n.º 16
0
        public void DoWorkerExist_NoWorker_ShouldReturnFalse()
        {
            var service = new Service("tcp://*:5555");

            Assert.That(service.DoWorkersExist(), Is.False);
        }
Ejemplo n.º 17
0
        public void ToString_Simple_ShouldReturnFormattedInfo()
        {
            var service = new Service("service");

            var s = service.ToString();

            Assert.That(s, Is.EqualTo("Name = service / Worker 0 - Waiting 0 - Pending REQ 0"));
        }
Ejemplo n.º 18
0
 public Worker(string id, NetMQFrame identity, Service service)
 {
     Id = id;
     Identity = identity;
     Service = service;
 }
Ejemplo n.º 19
0
        public void Equals_EqualReference_ShouldReturnTrue()
        {
            var service = new Service("service");

            var other = service;

            Assert.That(service.Equals(other), Is.True);
        }
Ejemplo n.º 20
0
        /// <summary>
        ///     sends as much pending requests as there are waiting workers 
        ///     of the specified service by
        ///     a) add the request to the pending requests within this service
        ///        if there is a message
        ///     b) remove all expired workers of this service
        ///     c) while there are waiting workers 
        ///             get the next pending request
        ///             send to the worker
        /// </summary>
        private void ServiceDispatch (Service service, NetMQMessage message)
        {
            DebugLog (string.Format ("Service [{0}] dispatches -> {1}",
                                     service.Name,
                                     message == null ? "PURGING" : "message = " + message));

            // if message is 'null' just send pending requests
            if (!ReferenceEquals (message, null))
                service.AddRequest (message);

            // remove all expired workers!
            Purge ();

            // if there are requests pending and workers are waiting dispatch the requests
            // as long as there are workers and requests
            while (service.CanDispatchRequests ())
            {
                var worker = service.GetNextWorker ();

                if (service.PendingRequests.Count > 0)
                {
                    var request = service.GetNextRequest ();

                    DebugLog (string.Format ("Service Dispatch -> pending request {0} to {1}", request, worker.Id));

                    WorkerSend (worker, MDPCommand.Request, request);
                }
                else
                    // no more requests -> we're done
                    break;
            }
        }
Ejemplo n.º 21
0
        }                                                   // when does the worker expire, if no heartbeat

        public Worker(string id, NetMQFrame identity, Service service)
        {
            Id       = id;
            Identity = identity;
            Service  = service;
        }