public void Test() { Address addr_x = new AHAddress(new RNGCryptoServiceProvider()); byte[] addrbuff = Address.ConvertToAddressBuffer(addr_x.ToBigInteger() + (Address.Full / 2)); Address.SetClass(addrbuff, AHAddress._class); Address addr_y = new AHAddress(addrbuff); List<Connection> connections = new List<Connection>(); ConnectionTable ct_x = new ConnectionTable(); ConnectionTable ct_y = new ConnectionTable(); ConnectionTable ct_empty = new ConnectionTable(); NCService ncservice = new NCService(); Connection fast_con = null; for(int i = 1; i <= 11; i++) { addrbuff = Address.ConvertToAddressBuffer(addr_x.ToBigInteger() + (i * Address.Full / 16)); Address.SetClass(addrbuff, AHAddress._class); Address addr = new AHAddress(addrbuff); Connection con = null; TransportAddress ta = TransportAddressFactory.CreateInstance("brunet.tcp://158.7.0.1:5000"); Edge fe = new FakeEdge(ta, ta, TransportAddress.TAType.Tcp); if(i <= 10) { con = new Connection(fe, addr, "structured", null, null); ct_x.Add(con); if(i % 2 == 0) { ncservice.ProcessSample(DateTime.UtcNow, String.Empty, addr, new Point(new double[] {0, 0}, 0), 0, i*10); } } else { fast_con = new Connection(fe, addr, "structured", null, null); ncservice.ProcessSample(DateTime.UtcNow, String.Empty, addr, new Point(new double[] {0, 0}, 0), 0, 5); } if(i == 10) { ct_y.Add(con); } connections.Add(con); } ITunnelOverlap sto = new SimpleTunnelOverlap(); ITunnelOverlap nto = new NCTunnelOverlap(ncservice); ConnectionType con_type = ConnectionType.Structured; List<Connection> pre_cons = new List<Connection>(); pre_cons.Add(connections[9]); IDictionary id = nto.GetSyncMessage(pre_cons, addr_x, ct_x.GetConnections(con_type)); // We do have some pre-existing overlap Assert.AreEqual(nto.EvaluateOverlap(ct_y.GetConnections(con_type), id)[0], connections[9], "NC: Have an overlap!"); Assert.AreEqual(sto.EvaluateOverlap(ct_y.GetConnections(con_type), id)[0], connections[9], "Simple: Have an overlap!"); // We have no overlap with an empty connection table Assert.AreEqual(nto.EvaluateOverlap(ct_empty.GetConnections(con_type), id).Count, 0, "No overlap!"); Assert.AreEqual(sto.EvaluateOverlap(ct_empty.GetConnections(con_type), id).Count, 0, "No overlap!"); // latency[0] == -1 Assert.AreEqual(connections[1].Address.Equals(nto.EvaluatePotentialOverlap(id)), true, "NC: EvaluatePotentialOverlap returns expected!"); Assert.AreEqual(ct_x.Contains(con_type, sto.EvaluatePotentialOverlap(id)), true, "Simple: EvaluatePotentialOverlap returns valid!"); ct_y.Add(fast_con); ct_x.Add(fast_con); id = nto.GetSyncMessage(pre_cons, addr_x, ct_x.GetConnections(con_type)); Assert.AreEqual(fast_con.Address.Equals(nto.EvaluatePotentialOverlap(id)), true, "NC: EvaluatePotentialOverlap returns expected!"); Assert.AreEqual(nto.EvaluateOverlap(ct_y.GetConnections(con_type), id)[0], fast_con, "NC: Have better overlap!"); }
public void TestService() { NCService nc_service = new NCService(); DateTime now = DateTime.UtcNow; Address addr_remote = new AHAddress(new RNGCryptoServiceProvider()); Address addr_remote1 = new AHAddress(new RNGCryptoServiceProvider()); Address addr_remote2 = new AHAddress(new RNGCryptoServiceProvider()); nc_service.ProcessSample(now + new TimeSpan(0, 0, 5), "local-test", addr_remote, new Point(new double[] {(double) 3.0, (double) 4.0}, 0), (double) 0.9, (double)10.0); NCService.VivaldiState state = nc_service.State; nc_service.ProcessSample(now + new TimeSpan(0, 0, 6), "local-test",addr_remote1, new Point(new double[] {(double) 10.0, (double) 2.0}, 0), (double) 0.9, (double)10.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 6), "local-test",addr_remote2, new Point(new double[] {(double) 5.0, (double) 6.0}, 0), (double) 0.9, (double)10.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 7), "local-test",addr_remote, new Point(new double[] {(double) 3.0, (double) 4.0}, 0), (double) 0.8, (double)12.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 8), "local-test",addr_remote1, new Point(new double[] {(double) 10.0, (double) 2.0}, 0), (double) 0.8, (double)12.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 9), "local-test",addr_remote, new Point(new double[] {(double) 3.0, (double) 4.0}, 0), (double)0.7, (double)13.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 11), "local-test",addr_remote1, new Point(new double[] {(double) 10.0, (double) 2.0}, 0), (double)0.7, (double)13.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 12), "local-test",addr_remote, new Point(new double[] {(double) 3.0, (double) 4.0}, 0), (double)0.6, (double)10.0); nc_service.ProcessSample(now + new TimeSpan(0, 0, 13), "local-test",addr_remote1, new Point(new double[] {(double) 10.0, (double) 2.0}, 0), (double)0.6, (double)10.0); state = nc_service.State; Console.Error.WriteLine("position: {0}, error: {1}", state.Position, state.WeightedError); }