public void OnMsg(PropertyMsg queryMsg) { PropertyMsg replyMsg; switch (queryMsg._Get("cmd")) { case "reply": replyMsg = new PropertyMsg(); replyMsg["value"] = queryMsg["value"]; router.ReplyTo(queryMsg, replyMsg); break; case "delay-reply": Thread.Sleep(500); replyMsg = new PropertyMsg(); replyMsg["value"] = queryMsg["value"]; router.ReplyTo(queryMsg, replyMsg); break; case "error": throw new Exception("Error: " + queryMsg["value"]); } }
public void PropertyMsg_Clone() { PropertyMsg msg1, msg2; msg1 = new PropertyMsg(); msg1._Version = 66; msg1._ToEP = "logical://to"; msg1._FromEP = "logical://from"; msg1._TTL = 77; msg1._ReceiptEP = "logical://receipt"; msg1._SessionID = Helper.NewGuid(); msg1._Flags |= MsgFlag.Broadcast; msg1._MsgID = Guid.Empty; msg1["foo"] = "bar"; msg2 = (PropertyMsg)msg1.Clone(); Assert.AreEqual(msg1._Version, msg2._Version); Assert.AreEqual(msg1._ToEP, msg2._ToEP); Assert.AreEqual(msg1._FromEP, msg2._FromEP); Assert.AreEqual(msg1._TTL, msg2._TTL); Assert.AreEqual(msg1._ReceiptEP, msg2._ReceiptEP); Assert.AreEqual(msg1._SessionID, msg2._SessionID); Assert.AreEqual(msg1._Flags, msg2._Flags); Assert.AreEqual(msg1._MsgID, msg2._MsgID); Assert.AreEqual("bar", msg2["foo"]); msg1._MsgID = Helper.NewGuid(); msg2 = (PropertyMsg)msg1.Clone(); Assert.AreNotEqual(msg2._MsgID, msg1._MsgID); }
public void ParallelQuerySession_WaitAll_SingleError() { // Test a single error query just to make sure it actually works. try { router = new LeafRouter(); router.Start(); router.Dispatcher.AddTarget(this); Thread.Sleep(1000); var parallelQuery = new ParallelQuery(); var queryMsg1 = new PropertyMsg(); queryMsg1["cmd"] = "error"; queryMsg1["value"] = "1"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg1)); router.ParallelQuery(parallelQuery); Assert.IsNotNull(parallelQuery.Operations[0].Error); } finally { if (router != null) { router.Stop(); router = null; } Config.SetConfig(null); } }
private void TestBaseCloning(PropertyMsg msg1) { PropertyMsg msg2; msg1._Version = 66; msg1._ToEP = "logical://to"; msg1._FromEP = "logical://from"; msg1._TTL = 77; msg1._ReceiptEP = "logical://receipt"; msg1._SessionID = Helper.NewGuid(); msg1._Flags |= MsgFlag.Broadcast; msg1._MsgID = Guid.Empty; msg2 = (PropertyMsg)msg1.Clone(); Assert.AreEqual(msg1._Version, msg2._Version); Assert.AreEqual(msg1._ToEP, msg2._ToEP); Assert.AreEqual(msg1._FromEP, msg2._FromEP); Assert.AreEqual(msg1._TTL, msg2._TTL); Assert.AreEqual(msg1._ReceiptEP, msg2._ReceiptEP); Assert.AreEqual(msg1._SessionID, msg2._SessionID); Assert.AreEqual(msg1._Flags, msg2._Flags); Assert.AreEqual(msg1._MsgID, msg2._MsgID); msg1._MsgID = Helper.NewGuid(); msg2 = (PropertyMsg)msg1.Clone(); Assert.AreNotEqual(msg2._MsgID, msg1._MsgID); }
public void PropertyMsg_Serialize() { PropertyMsg msgOut, msgIn; EnhancedMemoryStream ms = new EnhancedMemoryStream(); Msg.ClearTypes(); Msg.LoadTypes(Assembly.GetExecutingAssembly()); msgOut = new PropertyMsg(); msgOut._Set("string", "hello"); msgOut._Set("bool", true); msgOut._Set("int", 10); msgOut._Set("timespan", new TimeSpan(0, 0, 0, 0, 55)); msgOut._Set("endpoint", new IPEndPoint(IPAddress.Parse("127.0.0.1"), 56)); msgOut._Set("bytes", new byte[] { 5, 6, 7, 8 }); msgOut._Set("address", IPAddress.Parse("10.20.30.40")); Msg.Save(ms, msgOut); ms.Seek(0, SeekOrigin.Begin); msgIn = (PropertyMsg)Msg.Load(ms); Assert.AreEqual(msgOut["string"], msgIn["string"]); Assert.AreEqual(msgOut["bool"], msgIn["bool"]); Assert.AreEqual(msgOut["int"], msgIn["int"]); Assert.AreEqual(msgOut["timespan"], msgIn["timespan"]); Assert.AreEqual(msgOut["endpoint"], msgIn["endpoint"]); Assert.AreEqual(msgOut["bytes"], msgIn["bytes"]); Assert.AreEqual(msgOut["address"], msgIn["address"]); }
public void ReliableMessengerMsgs_DeliveryMsg_Serialize() { DeliveryMsg msgIn, msgOut; EnhancedStream es = new EnhancedMemoryStream(); DateTime now = Helper.UtcNowRounded; Guid id = Helper.NewGuid(); PropertyMsg query; PropertyMsg response; Msg.ClearTypes(); Msg.LoadTypes(Assembly.GetExecutingAssembly()); query = new PropertyMsg(); query["hello"] = "world"; response = new PropertyMsg(); response["foo"] = "bar"; msgOut = new DeliveryMsg(DeliveryOperation.Attempt, now, "logical://foo", "logical://bar", query, id, "clusterInfo", "clusterParam", new TimeoutException("Timeout"), response); Msg.Save(es, msgOut); es.Seek(0, SeekOrigin.Begin); msgIn = (DeliveryMsg)Msg.Load(es); Assert.IsNotNull(msgIn); Assert.AreEqual(DeliveryOperation.Attempt, msgIn.Operation); Assert.AreEqual(now, msgIn.Timestamp); Assert.AreEqual(MsgEP.Parse("logical://foo"), msgIn.TargetEP); Assert.AreEqual(MsgEP.Parse("logical://bar"), msgIn.ConfirmEP); Assert.IsInstanceOfType(msgIn.Query, typeof(PropertyMsg)); Assert.AreEqual("world", ((PropertyMsg)msgIn.Query)["hello"]); Assert.AreEqual(id, msgIn.TopologyID); Assert.AreEqual("clusterInfo", msgIn.TopologyInfo); Assert.AreEqual("clusterParam", msgIn.TopologyParam); Assert.IsInstanceOfType(msgIn.Exception, typeof(TimeoutException)); Assert.AreEqual("Timeout", msgIn.Exception.Message); Assert.IsInstanceOfType(msgIn.Response, typeof(PropertyMsg)); Assert.AreEqual("bar", ((PropertyMsg)msgIn.Response)["foo"]); msgOut = new DeliveryMsg(DeliveryOperation.Confirmation, now, "logical://foo", null, query, id, null, null, new ArgumentException("Test"), null); es.SetLength(0); Msg.Save(es, msgOut); es.Seek(0, SeekOrigin.Begin); msgIn = (DeliveryMsg)Msg.Load(es); Assert.IsNotNull(msgIn); Assert.AreEqual(DeliveryOperation.Confirmation, msgIn.Operation); Assert.AreEqual(now, msgIn.Timestamp); Assert.AreEqual(MsgEP.Parse("logical://foo"), msgIn.TargetEP); Assert.IsNull(msgIn.ConfirmEP); Assert.IsInstanceOfType(msgIn.Query, typeof(PropertyMsg)); Assert.AreEqual("world", ((PropertyMsg)msgIn.Query)["hello"]); Assert.AreEqual(id, msgIn.TopologyID); Assert.IsNull(msgIn.TopologyInfo); Assert.IsNull(msgIn.TopologyParam); Assert.IsInstanceOfType(msgIn.Exception, typeof(SessionException)); Assert.AreEqual("Test", msgIn.Exception.Message); Assert.IsNull(msgIn.Response); }
public void LazyMessenger_DeliverTo_Cluster_Exception() { MsgRouter router = null; BasicTopology cluster = null; LazyMessenger messenger = null; DateTime start = DateTime.UtcNow; PropertyMsg query; try { router = CreateLeaf("detached", "hub", group); router.Dispatcher.AddTarget(this); cluster = new BasicTopology(); cluster.OpenClient(router, "logical://foo", null); messenger = new LazyMessenger(); messenger.OpenClient(router, "logical://confirm", null, new DeliveryConfirmCallback(OnDeliveryConfirmation)); Thread.Sleep(wait); query = new PropertyMsg(); query["operation"] = "exception"; query["data"] = "Hello World!"; query["query"] = "yes"; confirmation = null; try { messenger.Deliver(cluster, null, query, true); Assert.Fail("Exception expected"); } catch (Exception e) { Assert.AreEqual("Test Exception", e.Message); } } finally { if (messenger != null) { messenger.Close(); } if (cluster != null) { cluster.Close(); } if (router != null) { router.Stop(); } Config.SetConfig(null); } }
public void OnMsg(BlobPropertyMsg msg) { PropertyMsg reply = new PropertyMsg(); lock (counts) counts[index]++; reply["value"] = "B"; ReplyTo(msg, reply); }
public void ParallelQuerySession_WaitAll_PartialFail() { // Test 4 parallel queries where 2 succeed and two fail. try { router = new LeafRouter(); router.Start(); router.Dispatcher.AddTarget(this); Thread.Sleep(1000); var parallelQuery = new ParallelQuery(); var queryMsg1 = new PropertyMsg(); var queryMsg2 = new PropertyMsg(); var queryMsg3 = new PropertyMsg(); var queryMsg4 = new PropertyMsg(); queryMsg1["cmd"] = "reply"; queryMsg1["value"] = "1"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg1)); queryMsg2["cmd"] = "error"; queryMsg2["value"] = "2"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg2)); queryMsg3["cmd"] = "reply"; queryMsg3["value"] = "3"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg3)); queryMsg4["cmd"] = "error"; queryMsg4["value"] = "4"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg4)); router.ParallelQuery(parallelQuery); Assert.AreEqual("1", ((PropertyMsg)parallelQuery.Operations[0].ReplyMsg)["value"]); Assert.AreEqual("3", ((PropertyMsg)parallelQuery.Operations[2].ReplyMsg)["value"]); Assert.AreEqual("Error: 2", parallelQuery.Operations[1].Error.Message); Assert.AreEqual("Error: 4", parallelQuery.Operations[3].Error.Message); } finally { if (router != null) { router.Stop(); router = null; } Config.SetConfig(null); } }
public void LazyMessenger_DeliverTo_Cluster_NoConfirm2() { MsgRouter router = null; BasicTopology cluster = null; LazyMessenger messenger = null; DateTime start = DateTime.UtcNow; PropertyMsg query; try { router = CreateLeaf("detached", "hub", group); router.Dispatcher.AddTarget(this); cluster = new BasicTopology(); cluster.OpenClient(router, "logical://foo", null); messenger = new LazyMessenger(); messenger.OpenClient(router, "logical://confirm", null, null); Thread.Sleep(wait); query = new PropertyMsg(); query["data"] = "Hello World!"; query["query"] = "yes"; confirmation = null; messenger.Deliver(cluster, null, query, true); Thread.Sleep(wait); Assert.IsNull(confirmation); } finally { if (messenger != null) { messenger.Close(); } if (cluster != null) { cluster.Close(); } if (router != null) { router.Stop(); } Config.SetConfig(null); } }
public void LazyMessenger_DeliverTo_Endpoint_Timeout() { MsgRouter router = null; LazyMessenger messenger = null; DateTime start = DateTime.UtcNow; PropertyMsg query; try { router = CreateLeaf("detached", "hub", group); messenger = new LazyMessenger(); messenger.OpenClient(router, "logical://confirm", null, new DeliveryConfirmCallback(OnDeliveryConfirmation)); router.Dispatcher.AddTarget(this); Thread.Sleep(wait); query = new PropertyMsg(); query["operation"] = "timeout"; query["data"] = "Hello World!"; query["query"] = "yes"; confirmation = null; try { messenger.Deliver("logical://foo", query, true); Assert.Fail("TimeoutException expected."); } catch (Exception e) { Assert.IsInstanceOfType(e, typeof(TimeoutException)); } } finally { if (messenger != null) { messenger.Close(); } if (router != null) { router.Stop(); } Config.SetConfig(null); } }
public void LazyMessenger_DeliverTo_Endpoint() { MsgRouter router = null; LazyMessenger messenger = null; DateTime start = DateTime.UtcNow; PropertyMsg query; try { router = CreateLeaf("detached", "hub", group); messenger = new LazyMessenger(); messenger.OpenClient(router, "logical://confirm", null, new DeliveryConfirmCallback(OnDeliveryConfirmation)); router.Dispatcher.AddTarget(this); Thread.Sleep(wait); query = new PropertyMsg(); query["data"] = "Hello World!"; query["query"] = "yes"; confirmation = null; messenger.Deliver("logical://foo", query, true); Thread.Sleep(wait); Assert.IsNotNull(confirmation); Assert.IsTrue(confirmation.Timestamp >= start); Assert.IsTrue(confirmation.Timestamp <= DateTime.UtcNow); Assert.AreEqual(MsgEP.Parse("logical://foo"), confirmation.TargetEP); Assert.IsInstanceOfType(confirmation.Query, typeof(PropertyMsg)); Assert.AreEqual("yes", ((PropertyMsg)confirmation.Query)["query"]); Assert.IsInstanceOfType(confirmation.Response, typeof(PropertyMsg)); Assert.AreEqual(query["data"], ((PropertyMsg)confirmation.Response)["data"]); Assert.IsNull(confirmation.Exception); } finally { if (messenger != null) { messenger.Close(); } router.Stop(); Config.SetConfig(null); } }
public void OnQuery(PropertyMsg query) { string operation = query["operation"]; if (operation != null) { switch (operation) { case "timeout": return; case "exception": throw new Exception("Test Exception"); } } PropertyMsg response; response = new PropertyMsg(); response["data"] = query["data"]; query._Session.Router.ReplyTo(query, response); }
public void ParallelQuerySession_WaitAny_SingleSuccess() { // Test a single successful query just to make sure it actually works. try { router = new LeafRouter(); router.Start(); router.Dispatcher.AddTarget(this); Thread.Sleep(1000); var parallelQuery = new ParallelQuery() { WaitMode = ParallelWait.ForAny }; var queryMsg1 = new PropertyMsg(); queryMsg1["cmd"] = "reply"; queryMsg1["value"] = "1"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg1)); router.ParallelQuery(parallelQuery); Assert.AreEqual("1", ((PropertyMsg)parallelQuery.Operations[0].ReplyMsg)["value"]); } finally { if (router != null) { router.Stop(); router = null; } Config.SetConfig(null); } }
public void PropertyMsg_Access() { PropertyMsg msg = new PropertyMsg(); msg._Set("string", "hello"); msg._Set("bool", true); msg._Set("int", 10); msg._Set("timespan", new TimeSpan(0, 0, 0, 0, 55)); msg._Set("endpoint", new IPEndPoint(IPAddress.Parse("127.0.0.1"), 56)); msg._Set("bytes", new byte[] { 5, 6, 7, 0x1F }); msg._Set("address", IPAddress.Parse("1.2.3.4")); Assert.AreEqual("hello", msg._Get("string")); Assert.AreEqual("hello", msg["string"]); Assert.AreEqual("hello", msg["STRING"]); Assert.IsNull(msg["foobar"]); Assert.AreEqual("foobar", msg._Get("foobar", "foobar")); Assert.AreEqual(IPAddress.Parse("1.2.3.4"), msg._Get("address", IPAddress.Any)); msg["test"] = "test"; Assert.AreEqual("test", msg["test"]); msg["test"] = "test #2"; Assert.AreEqual("test #2", msg["test"]); Assert.IsTrue(msg._Get("bool", false)); Assert.IsFalse(msg._Get("foobar", false)); Assert.AreEqual("1", msg["bool"]); msg._Set("bool", false); Assert.IsFalse(msg._Get("bool", true)); Assert.AreEqual("0", msg["bool"]); Assert.IsTrue(msg._Get("test", true)); Assert.AreEqual(10, msg._Get("int", 0)); Assert.AreEqual(20, msg._Get("foobar", 20)); msg._Set("int", -566); Assert.AreEqual(-566, msg._Get("int", 0)); Assert.AreEqual("-566", msg["int"]); Assert.AreEqual(666, msg._Get("test", 666)); Assert.AreEqual(new TimeSpan(0, 0, 0, 0, 55), msg._Get("timespan", TimeSpan.FromSeconds(60))); Assert.AreEqual(new TimeSpan(0, 0, 0, 60), msg._Get("foobar", TimeSpan.FromSeconds(60))); msg._Set("timespan", TimeSpan.FromSeconds(77)); Assert.AreEqual(TimeSpan.FromSeconds(77), LillTek.Common.Serialize.Parse(msg["timespan"], TimeSpan.Zero)); Assert.AreEqual(TimeSpan.FromSeconds(1), msg._Get("test", TimeSpan.FromSeconds(1))); msg._Set("bad-ip", "10."); Assert.AreEqual(IPAddress.Parse("10.20.30.40"), msg._Get("bad_ip", IPAddress.Parse("10.20.30.40"))); Assert.AreEqual(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 56), msg._Get("endpoint", (IPEndPoint)null)); Assert.AreEqual("127.0.0.1:56", msg["endpoint"]); Assert.AreEqual(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 57), msg._Get("foobar", new IPEndPoint(IPAddress.Parse("127.0.0.1"), 57))); msg._Set("endpoint", new IPEndPoint(IPAddress.Parse("127.0.0.1"), 58)); Assert.AreEqual(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 58), msg._Get("endpoint", (IPEndPoint)null)); Assert.AreEqual(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 58), msg._Get("test", new IPEndPoint(IPAddress.Parse("127.0.0.1"), 58))); CollectionAssert.AreEqual(new byte[] { 5, 6, 7, 0x1F }, msg._Get("bytes", (byte[])null)); CollectionAssert.AreEqual(new byte[] { 10, 11 }, msg._Get("foobar", new byte[] { 10, 11 })); Assert.AreEqual("0506071f", msg["bytes"]); msg._Set("bytes", new byte[] { 0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f }); CollectionAssert.AreEqual(new byte[] { 0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f }, msg._Get("bytes", (byte[])null)); CollectionAssert.AreEqual(new byte[] { 10 }, msg._Get("test", new byte[] { 10 })); var id = Helper.NewGuid(); msg._Set("id", id); Assert.AreEqual(id, msg._Get("id", Guid.Empty)); Assert.AreEqual(Guid.Empty, msg._Get("_id", Guid.Empty)); msg._Set("_id", "sss s s s"); Assert.AreEqual(Guid.Empty, msg._Get("_id", Guid.Empty)); var now = Helper.UtcNowRounded; msg._Set("date", now); Assert.AreEqual(now, msg._Get("date", DateTime.MaxValue)); }
public void ParallelQuerySession_WaitAny_MultipleFail() { // Test 4 parallel queries where all fail and verify that we got // all of the error responses. try { router = new LeafRouter(); router.Start(); router.Dispatcher.AddTarget(this); Thread.Sleep(1000); var parallelQuery = new ParallelQuery() { WaitMode = ParallelWait.ForAny }; var queryMsg1 = new PropertyMsg(); var queryMsg2 = new PropertyMsg(); var queryMsg3 = new PropertyMsg(); var queryMsg4 = new PropertyMsg(); queryMsg1["cmd"] = "error"; queryMsg1["value"] = "1"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg1)); queryMsg2["cmd"] = "error"; queryMsg2["value"] = "2"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg2)); queryMsg3["cmd"] = "error"; queryMsg3["value"] = "3"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg3)); queryMsg4["cmd"] = "error"; queryMsg4["value"] = "4"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg4)); router.ParallelQuery(parallelQuery); int cCompleted = 0; for (int i = 0; i < 4; i++) { var operation = parallelQuery.Operations[i]; if (operation.IsComplete) { cCompleted++; Assert.AreEqual("Error: " + (i + 1).ToString(), parallelQuery.Operations[i].Error.Message); } } Assert.AreEqual(4, cCompleted); } finally { if (router != null) { router.Stop(); router = null; } Config.SetConfig(null); } }
public void ParallelQuerySession_WaitAny_PartialSuccess() { // Test 4 parallel queries where two succeed (after a bit of a delay) and // two fail immediately and verify that the two failures were recorded and // we have a single successful response. try { router = new LeafRouter(); router.Start(); router.Dispatcher.AddTarget(this); Thread.Sleep(1000); var parallelQuery = new ParallelQuery() { WaitMode = ParallelWait.ForAny }; var queryMsg1 = new PropertyMsg(); var queryMsg2 = new PropertyMsg(); var queryMsg3 = new PropertyMsg(); var queryMsg4 = new PropertyMsg(); queryMsg1["cmd"] = "delay-reply"; queryMsg1["value"] = "1"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg1)); queryMsg2["cmd"] = "delay-reply"; queryMsg2["value"] = "2"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg2)); queryMsg3["cmd"] = "error"; queryMsg3["value"] = "3"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg3)); queryMsg4["cmd"] = "error"; queryMsg4["value"] = "4"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg4)); router.ParallelQuery(parallelQuery); int cCompleted = 0; for (int i = 0; i < 2; i++) { var operation = parallelQuery.Operations[i]; if (operation.IsComplete) { cCompleted++; Assert.AreEqual((i + 1).ToString(), ((PropertyMsg)parallelQuery.Operations[i].ReplyMsg)["value"]); } } Assert.AreEqual(1, cCompleted); Assert.AreEqual("Error: 3", parallelQuery.Operations[2].Error.Message); Assert.AreEqual("Error: 4", parallelQuery.Operations[3].Error.Message); } finally { if (router != null) { router.Stop(); router = null; } Config.SetConfig(null); } }
public void ParallelQuerySession_WaitAny_MultipleSuccess() { // Test 4 parallel queries that all succeed and verify that // only one result is actually returned. try { router = new LeafRouter(); router.Start(); router.Dispatcher.AddTarget(this); Thread.Sleep(1000); var parallelQuery = new ParallelQuery() { WaitMode = ParallelWait.ForAny }; var queryMsg1 = new PropertyMsg(); var queryMsg2 = new PropertyMsg(); var queryMsg3 = new PropertyMsg(); var queryMsg4 = new PropertyMsg(); queryMsg1["cmd"] = "reply"; queryMsg1["value"] = "1"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg1)); queryMsg2["cmd"] = "reply"; queryMsg2["value"] = "2"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg2)); queryMsg3["cmd"] = "reply"; queryMsg3["value"] = "3"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg3)); queryMsg4["cmd"] = "reply"; queryMsg4["value"] = "4"; parallelQuery.Operations.Add(new ParallelOperation("logical://parallel/test", queryMsg4)); router.ParallelQuery(parallelQuery); int cCompleted = 0; for (int i = 0; i < 4; i++) { var operation = parallelQuery.Operations[i]; if (operation.IsComplete) { cCompleted++; Assert.AreEqual((i + 1).ToString(), ((PropertyMsg)parallelQuery.Operations[i].ReplyMsg)["value"]); } } Assert.AreEqual(1, cCompleted); } finally { if (router != null) { router.Stop(); router = null; } Config.SetConfig(null); } }
public void OnMsg(PropertyMsg msg) { lock (counts) counts[index]++; }