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); }
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); }
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)); }
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)); }
public void GetHashCode_DifferentServiceObjects_ShouldReturnSameHashCode() { var service = new Service("service"); var other = new Service("service1"); Assert.That(service.GetHashCode(), Is.Not.EqualTo(other.GetHashCode())); }
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); }
public void Equals_NotEqual_ShouldReturnFalse() { var service = new Service("service"); var other = new Service("echo"); Assert.That(service.Equals(other), Is.False); }
public void Equals_EqualButDifferentServiceObjects_ShouldReturnTrue() { var service = new Service("service"); var other = new Service("service"); Assert.That(service.Equals(other), Is.True); }
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); }
/// <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); }
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)); }
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)); }
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)); }
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)); }
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); }
public void DoWorkerExist_NoWorker_ShouldReturnFalse() { var service = new Service("tcp://*:5555"); Assert.That(service.DoWorkersExist(), Is.False); }
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")); }
public Worker(string id, NetMQFrame identity, Service service) { Id = id; Identity = identity; Service = service; }
public void Equals_EqualReference_ShouldReturnTrue() { var service = new Service("service"); var other = service; Assert.That(service.Equals(other), Is.True); }
/// <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; } }
} // when does the worker expire, if no heartbeat public Worker(string id, NetMQFrame identity, Service service) { Id = id; Identity = identity; Service = service; }