Пример #1
0
        public void Should_sort_32_by_distance_from_end()
        {
            var a = new KNodeId32(uint.MaxValue);
            var l = Enumerable.Range(0, 256).Select(i => KNodeId <KNodeId32> .Create()).ToArray();

            Array.Sort(l, new KNodeIdDistanceComparer <KNodeId32>(a));
            l.Should().BeInDescendingOrder(KNodeIdComparer <KNodeId32> .Default);
        }
Пример #2
0
        public void Should_find_proper_bucket_for_int32()
        {
            var s = new KNodeId32(0);

            KTable.GetBucketIndex(s, new KNodeId32(1)).Should().Be(0);
            KTable.GetBucketIndex(s, new KNodeId32(2)).Should().Be(1);
            KTable.GetBucketIndex(s, new KNodeId32(2147483648)).Should().Be(31);
        }
        public void Should_calculate_proper_distance_offset_for_int32()
        {
            var a = new KNodeId32(0);
            var b = new KNodeId32(1);
            var o = (Span <byte>) new byte[4];
            var s = (ReadOnlySpan <byte>)o;

            KNodeId.CalculateDistance(a, b, o);
            s.CountLeadingZeros().Should().Be(31);
        }
Пример #4
0
        public async Task Can_randomly_populate_int32()
        {
            var s = new KNodeId32(0);
            var t = new KFixedRoutingTable <KNodeId32, object>(s, new FakeNetwork <KNodeId32, object>());

            var r = new Random();

            for (int i = 0; i < 262144 * 8; i++)
            {
                await t.TouchAsync(new KNodeId32((uint)r.Next(int.MinValue, int.MaxValue)), null);
            }
        }
        public void Can_encode_findvalue_response()
        {
            var node    = new KNodeId32(1);
            var buffer  = new ArrayBufferWriter <byte>();
            var encoder = new KJsonMessageEncoder <KNodeId32>();
            var body    = new KFindValueResponse <KNodeId32>(new KNodeInfo <KNodeId32>[] { new KNodeInfo <KNodeId32>(node, new[] { new Uri("http://www.google.com") }) }, new KValueInfo(new byte[0], 1, DateTime.UtcNow.AddSeconds(.9)));
            var message = new KResponse <KNodeId32, KFindValueResponse <KNodeId32> >(new KMessageHeader <KNodeId32>(node, 1), KResponseStatus.Success, body);

            encoder.Encode(new KMessageContext <KNodeId32>("application/json".Yield()), buffer, new KMessageSequence <KNodeId32>(1, new IKMessage <KNodeId32>[] { message }));
            var j = JObject.Parse(Encoding.UTF8.GetString(buffer.WrittenSpan.ToArray()));
            var z = JObject.ReadFrom(new JsonTextReader(new StreamReader(typeof(KJsonMessageEncoderTests).Assembly.GetManifestResourceStream("Alethic.Kademlia.Tests.Json.Samples.findvalue_response.json"))));

            j.Should().BeEquivalentTo(z);
        }
        public void Can_encode_findvalue_request()
        {
            var node    = new KNodeId32(1);
            var buffer  = new ArrayBufferWriter <byte>();
            var encoder = new KJsonMessageEncoder <KNodeId32>();
            var message = new KFindValueRequest <KNodeId32>(node);
            var request = new KRequest <KNodeId32, KFindValueRequest <KNodeId32> >(new KMessageHeader <KNodeId32>(node, 1), message);

            encoder.Encode(new KMessageContext <KNodeId32>("application/json".Yield()), buffer, new KMessageSequence <KNodeId32>(1, new IKMessage <KNodeId32>[] { request }));
            var j = JObject.Parse(Encoding.UTF8.GetString(buffer.WrittenSpan.ToArray()));
            var z = JObject.ReadFrom(new JsonTextReader(new StreamReader(typeof(KJsonMessageEncoderTests).Assembly.GetManifestResourceStream("Alethic.Kademlia.Tests.Json.Samples.findvalue_request.json"))));

            j.Should().BeEquivalentTo(z);
        }
Пример #7
0
        public async Task Can_randomly_populate_int32_mt()
        {
            var s = new KNodeId32(0);
            var t = new KFixedRoutingTable <KNodeId32, object>(s, new FakeSlowNetwork <KNodeId32, object>());

            var r = new Random();
            var l = new List <Task>();

            for (int i = 0; i < 1024; i++)
            {
                l.Add(t.TouchAsync(new KNodeId32((uint)r.Next(int.MinValue, int.MaxValue)), null).AsTask());
            }

            await Task.WhenAll(l);
        }
        public void Can_decode_findvalue_request()
        {
            var node     = new KNodeId32(1);
            var decoder  = new KJsonMessageDecoder <KNodeId32>();
            var json     = new StreamReader(typeof(KJsonMessageEncoderTests).Assembly.GetManifestResourceStream("Alethic.Kademlia.Tests.Json.Samples.findvalue_request.json")).ReadToEnd();
            var sequence = decoder.Decode(new KMessageContext <KNodeId32>("application/json".Yield()), new ReadOnlySequence <byte>(Encoding.UTF8.GetBytes(json)));

            sequence.Network.Should().Be(1);
            sequence.Should().HaveCount(1);
            sequence[0].Should().BeOfType <KRequest <KNodeId32, KFindValueRequest <KNodeId32> > >();

            var message = (KRequest <KNodeId32, KFindValueRequest <KNodeId32> >)sequence[0];

            message.Header.Sender.Should().Be(node);
            message.Header.ReplyId.Should().Be(1);
            message.Body.Value.Key.Should().Be(node);
        }