public void LogicalRouteTable_Flush() { MsgRouter router = new MsgRouter(); LogicalRouteTable routes = new LogicalRouteTable(router); DateTime sysNow = SysTime.Now; TimeSpan ttl = TimeSpan.FromSeconds(2); List <LogicalRoute> matches; router.PhysicalRoutes = new PhysicalRouteTable(router, TimeSpan.FromMinutes(1)); router.RouterEP = "physical://root/hub/leaf"; router.Start(IPAddress.Any, null, new IPEndPoint(IPAddress.Any, 0), new IPEndPoint(IPAddress.Any, 0), 100, TimeSpan.FromMinutes(1)); try { routes.Add(new LogicalRoute("logical://foo", new PhysicalRoute("physical://root/hub/leaf0", "", "", MsgRouterInfo.Default, Guid.Empty, new IPEndPoint(IPAddress.Loopback, 15), new IPEndPoint(IPAddress.Loopback, 10), sysNow + ttl))); routes.Add(new LogicalRoute("logical://foo", new PhysicalRoute("physical://root/hub/leaf0", "", "", MsgRouterInfo.Default, Guid.Empty, new IPEndPoint(IPAddress.Loopback, 25), new IPEndPoint(IPAddress.Loopback, 20), sysNow + ttl))); routes.Add(new LogicalRoute("logical://bar", new PhysicalRoute("physical://root/hub/leaf1", "", "", MsgRouterInfo.Default, Guid.Empty, new IPEndPoint(IPAddress.Loopback, 35), new IPEndPoint(IPAddress.Loopback, 30), sysNow + ttl))); routes.Add(new LogicalRoute("logical://bar", new PhysicalRoute("physical://root/hub/leaf1", "", "", MsgRouterInfo.Default, Guid.Empty, new IPEndPoint(IPAddress.Loopback, 45), new IPEndPoint(IPAddress.Loopback, 40), sysNow + ttl))); matches = routes.GetRoutes("logical://foo"); Assert.AreEqual(2, matches.Count); matches = routes.GetRoutes("logical://bar"); Assert.AreEqual(2, matches.Count); router.AddPhysicalRoute("physical://root/hub/leaf0", "", "", MsgRouterInfo.Default, Guid.Empty, new IPEndPoint(IPAddress.Loopback, 15), new IPEndPoint(IPAddress.Loopback, 10)); router.AddPhysicalRoute("physical://root/hub/leaf1", "", "", MsgRouterInfo.Default, Guid.Empty, new IPEndPoint(IPAddress.Loopback, 45), new IPEndPoint(IPAddress.Loopback, 40)); routes.Flush(); matches = routes.GetRoutes("logical://foo"); Assert.AreEqual(1, matches.Count); Assert.AreEqual(10, matches[0].PhysicalRoute.TcpEP.NetEP.Port); matches = routes.GetRoutes("logical://bar"); Assert.AreEqual(1, matches.Count); Assert.AreEqual(40, matches[0].PhysicalRoute.TcpEP.NetEP.Port); } finally { router.Stop(); } }
public void LogicalRouteTable_Lookup() { MsgRouter router = new MsgRouter(); LogicalRouteTable routes = new LogicalRouteTable(router); DateTime sysNow = SysTime.Now; TimeSpan ttl = TimeSpan.FromSeconds(2); List <LogicalRoute> matches; string[] s; Assert.AreEqual(0, routes.Count); Assert.AreEqual(0, routes.GetRoutes("logical://foo").Count); routes.Add(new LogicalRoute("logical://foo", new PhysicalRoute("physical://root0", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); Assert.AreEqual(1, routes.GetRoutes("logical://foo").Count); Assert.AreEqual(new MsgEP("physical://root0"), routes.GetRoutes("logical://foo")[0].PhysicalRoute.RouterEP); Assert.AreEqual(0, routes.GetRoutes("logical://bar").Count); routes.Add(new LogicalRoute("logical://foo", new PhysicalRoute("physical://root1", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); matches = routes.GetRoutes("logical://foo"); Assert.AreEqual(2, matches.Count); s = new string[2]; s[0] = matches[0].PhysicalRoute.RouterEP.ToString(); s[1] = matches[1].PhysicalRoute.RouterEP.ToString(); Array.Sort(s); Assert.AreEqual("physical://root0", s[0]); Assert.AreEqual("physical://root1", s[1]); Assert.AreEqual(0, routes.GetRoutes("logical://bar").Count); matches = routes.GetRoutes("logical://*"); Assert.AreEqual(2, matches.Count); s = new string[2]; s[0] = matches[0].PhysicalRoute.RouterEP.ToString(); s[1] = matches[1].PhysicalRoute.RouterEP.ToString(); Array.Sort(s); Assert.AreEqual("physical://root0", s[0]); Assert.AreEqual("physical://root1", s[1]); routes.Add(new LogicalRoute("logical://bar", new PhysicalRoute("physical://root2", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); routes.Add(new LogicalRoute("logical://foo/bar", new PhysicalRoute("physical://root3", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); routes.Add(new LogicalRoute("logical://foo/bar0", new PhysicalRoute("physical://root4", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); routes.Add(new LogicalRoute("logical://foo/bar1", new PhysicalRoute("physical://root5", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); Assert.AreEqual(6, routes.Count); matches = routes.GetRoutes("logical://*"); Assert.AreEqual(6, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root0", s[0]); Assert.AreEqual("physical://root1", s[1]); Assert.AreEqual("physical://root2", s[2]); Assert.AreEqual("physical://root3", s[3]); Assert.AreEqual("physical://root4", s[4]); Assert.AreEqual("physical://root5", s[5]); matches = routes.GetRoutes("logical://foo/*"); Assert.AreEqual(5, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root0", s[0]); Assert.AreEqual("physical://root1", s[1]); Assert.AreEqual("physical://root3", s[2]); Assert.AreEqual("physical://root4", s[3]); Assert.AreEqual("physical://root5", s[4]); matches = routes.GetRoutes("logical://foo/bar0"); Assert.AreEqual(1, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root4", s[0]); routes.Add(new LogicalRoute("logical://foo/bar/*", new PhysicalRoute("physical://root6", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); routes.Add(new LogicalRoute("logical://foobar/*", new PhysicalRoute("physical://root7", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); Assert.AreEqual(8, routes.Count); matches = routes.GetRoutes("logical://foo/bar/test/1"); Assert.AreEqual(1, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root6", s[0]); matches = routes.GetRoutes("logical://foobar/test/1"); Assert.AreEqual(1, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root7", s[0]); matches = routes.GetRoutes("logical://*"); Assert.AreEqual(8, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root0", s[0]); Assert.AreEqual("physical://root1", s[1]); Assert.AreEqual("physical://root2", s[2]); Assert.AreEqual("physical://root3", s[3]); Assert.AreEqual("physical://root4", s[4]); Assert.AreEqual("physical://root5", s[5]); Assert.AreEqual("physical://root6", s[6]); Assert.AreEqual("physical://root7", s[7]); routes.Clear(); Assert.AreEqual(0, routes.Count); Assert.AreEqual(0, routes.GetRoutes("logical://*").Count); routes.Clear(); routes.Add(new LogicalRoute("logical://foo/bar/*", new PhysicalRoute("physical://root8", "", "", MsgRouterInfo.Default, Guid.Empty, null, null, sysNow + ttl))); matches = routes.GetRoutes("logical://foo/bar/*"); Assert.AreEqual(1, matches.Count); s = new string[matches.Count]; for (int i = 0; i < matches.Count; i++) { s[i] = matches[i].PhysicalRoute.RouterEP.ToString(); } Array.Sort(s); Assert.AreEqual("physical://root8", s[0]); }