Beispiel #1
0
        public void DatagramReader_ReadUInt()
        {
            var reader = new DnsDatagramReader(new ArraySegment <byte>(new byte[2] {
                1, 0
            }));

            var result = reader.ReadUInt16();

            Assert.Equal(1, result);
            Assert.Equal(2, reader.Index);
        }
Beispiel #2
0
        public void DatagramReader_ReadUIntReverse()
        {
            var reader = new DnsDatagramReader(new ArraySegment <byte>(new byte[2] {
                0, 1
            }));

            var result = reader.ReadUInt16NetworkOrder();

            Assert.Equal(1, result);
            Assert.Equal(2, reader.Index);
        }
Beispiel #3
0
        public void DatagramReader_DnsName_FromBytesInvalidOffset()
        {
            var reader = new DnsDatagramReader(new ArraySegment <byte>(new byte[] { 2 }));

            Action act = () => reader.ReadDnsName();
            var    ex  = Assert.ThrowsAny <DnsResponseParseException>(act);

            Assert.Equal(1, ex.Index);
            Assert.Single(ex.ResponseData);
            Assert.Equal(2, ex.ReadLength);
        }
Beispiel #4
0
        public SrvRecord ReadResourceRecord(
            ResourceRecord info,
            DnsDatagramReader reader)
        {
            var priority = reader.ReadUInt16NetworkOrder();
            var weight   = reader.ReadUInt16NetworkOrder();
            var port     = reader.ReadUInt16NetworkOrder();
            var target   = reader.ReadDnsName();

            return(new SrvRecord(info, priority, weight, port, target));
        }
Beispiel #5
0
        public void ReadUInt16NetworkOrder_should_throw_IndexOutOfRangeException_when_index_exceeds_data_count()
        {
            // Arrange.
            ArraySegment <byte> sampleData = GetSampleData(ResponseDataSampleFile.QuestionQuery);
            IDnsDatagramReader  reader     = new DnsDatagramReader(mockDnsString.Object);

            reader.Advance(100);
            // Act.

            Assert.Throws <IndexOutOfRangeException>(() => reader.ReadUInt16NetworkOrder(sampleData), "Cannot read more data.");
        }
Beispiel #6
0
        public void DatagramReader_DnsName_FromBytesInvalidLength()
        {
            var bytes = new byte[] { 3, 90, 90, 90, 6, 56, 56, 0 };

            var reader = new DnsDatagramReader(new ArraySegment <byte>(bytes));

            Action act = () => reader.ReadDnsName();
            var    ex  = Assert.ThrowsAny <DnsResponseParseException>(act);

            Assert.Equal(5, ex.Index);
            Assert.Equal(6, ex.ReadLength);
        }
Beispiel #7
0
        public void DatagramReader_LabelTest_DnsName2()
        {
            var data   = ReferenceBitData.Concat(new byte[] { 192, 23 });
            var reader = new DnsDatagramReader(new ArraySegment <byte>(data.ToArray()))
            {
                Index = 36
            };

            var name = reader.ReadDnsName();

            Assert.Equal("eeeee.dd.c.aa.com.", name.Value);
        }
Beispiel #8
0
        public void DatagramReader_ReadByte_IndexOutOfRange()
        {
            var reader = new DnsDatagramReader(new ArraySegment <byte>(new byte[10]), 9);

            reader.ReadByte();

            Action act = () => reader.ReadByte();
            var    ex  = Assert.ThrowsAny <DnsResponseParseException>(act);

            Assert.Equal(10, ex.Index);
            Assert.Equal(1, ex.ReadLength);
        }
Beispiel #9
0
        public void ReadIPAddress_should_throw_IndexOutOfRangeException_exception_when_less_than_4_bytes_are_present()
        {
            // Arrange.
            ArraySegment <byte> sampleData = GetSampleData(ResponseDataSampleFile.QuestionQuery);
            IDnsDatagramReader  reader     = new DnsDatagramReader(mockDnsString.Object);

            // advance the index to IP Address position + 1 to make it throw exception.
            reader.Advance(43);

            // Act => Assert.
            Assert.Throws <IndexOutOfRangeException>(() => reader.ReadIPAddress(sampleData),
                                                     "Error while reading IPv4 address, expected 4 bytes. Index was outside the bounds of the array.");
        }
Beispiel #10
0
        public void Advance_should_move_index_to_given_position(int length, int expectedIndexValue)
        {
            // Arrange.

            IDnsDatagramReader reader = new DnsDatagramReader(mockDnsString.Object);

            // Act.
            reader.Advance(length);
            reader.Advance(length);

            // Assert.
            Assert.AreEqual(expectedIndexValue, reader.Index);
        }
Beispiel #11
0
        public void DatagramReader_ReadUIntReverseIndexOutOfRange()
        {
            var reader = new DnsDatagramReader(new ArraySegment <byte>(new byte[2] {
                0, 1
            }));

            var result = reader.ReadUInt16NetworkOrder();

            Action act = () => reader.ReadUInt16NetworkOrder();
            var    ex  = Assert.ThrowsAny <DnsResponseParseException>(act);

            Assert.Equal(2, ex.Index);
            Assert.Equal(2, ex.ReadLength);
        }
        public SoaRecord ReadResourceRecord(
            ResourceRecord info,
            DnsDatagramReader reader)
        {
            var mName   = reader.ReadDnsName();
            var rName   = reader.ReadDnsName();
            var serial  = reader.ReadUInt32NetworkOrder();
            var refresh = reader.ReadUInt32NetworkOrder();
            var retry   = reader.ReadUInt32NetworkOrder();
            var expire  = reader.ReadUInt32NetworkOrder();
            var minimum = reader.ReadUInt32NetworkOrder();

            return(new SoaRecord(info, mName, rName, serial, refresh, retry, expire, minimum));
        }
Beispiel #13
0
        public void DatagramReader_IndexBounds()
        {
            var bytes  = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
            var reader = new DnsDatagramReader(new ArraySegment <byte>(bytes, 2, 4));

            Assert.True(reader.DataAvailable);
            reader.Advance(4);
            Assert.False(reader.DataAvailable);

            Action act = () => reader.Advance(1);
            var    ex  = Assert.Throws <DnsResponseParseException>(act);

            Assert.Equal(4, ex.Index);
            Assert.Equal(1, ex.ReadLength);
        }
Beispiel #14
0
        public void ReadUInt32NetworkOrder_should_return_TTL_value_in_int32()
        {
            // Arrange.
            ArraySegment <byte> sampleData = GetSampleData(ResponseDataSampleFile.QuestionAndAnswerQuery);
            IDnsDatagramReader  reader     = new DnsDatagramReader(mockDnsString.Object);

            // advance the index to Time To Live position.
            reader.Advance(37);

            // Act.
            uint timeToLive = reader.ReadUInt32NetworkOrder(sampleData);

            // Assert.
            Assert.AreEqual(2585, timeToLive);
        }
Beispiel #15
0
        public void ReadUInt16NetworkOrder_should_return_AnswerCount_of_6_from_data_starting_at_Index_0()
        {
            // Arrange.
            ArraySegment <byte> sampleData = GetSampleData(ResponseDataSampleFile.QuestionQuery);
            IDnsDatagramReader  reader     = new DnsDatagramReader(mockDnsString.Object);

            reader.Advance(6);
            // Act.

            ushort answerCout = reader.ReadUInt16NetworkOrder(sampleData);

            // Assert.

            Assert.AreEqual(5, answerCout);
        }
Beispiel #16
0
        public void ReadIPAddress_should_return_ipAddress()
        {
            // Arrange.
            ArraySegment <byte> sampleData = GetSampleData(ResponseDataSampleFile.QuestionAndAnswerQuery);
            IDnsDatagramReader  reader     = new DnsDatagramReader(mockDnsString.Object);

            // advance the index to IP Address position.
            reader.Advance(43);

            // Act.
            IPAddress ipAddress = reader.ReadIPAddress(sampleData);

            // Assert.

            Assert.AreEqual("40.76.4.15", ipAddress.ToString());
        }
        public TxtRecord ReadResourceRecord(
            ResourceRecord info,
            DnsDatagramReader reader)
        {
            var pos = reader.Index;

            var values     = new List <string>();
            var utf8Values = new List <string>();

            while (reader.Index - pos < info.RawDataLength)
            {
                var length  = reader.ReadByte();
                var bytes   = reader.ReadBytes(length);
                var escaped = DnsDatagramReader.ParseString(bytes);
                var utf     = DnsDatagramReader.ReadUtf8String(bytes);
                values.Add(escaped);
                utf8Values.Add(utf);
            }

            return(new TxtRecord(info, values.ToArray(), utf8Values.ToArray()));
        }
Beispiel #18
0
        public void ReadQuestionQueryString_should_return_queryString_successfully()
        {
            // Arrange.

            const string        query      = "microsoft.com";
            const string        queryDot   = query + ".";
            ArraySegment <byte> sampleData = GetSampleData(ResponseDataSampleFile.QuestionQuery);

            mockDnsString.Setup(m => m.FromResponseQueryString(queryDot)).Returns(new DnsString(query, queryDot));


            IDnsDatagramReader reader = new DnsDatagramReader(mockDnsString.Object);

            // move the index to 12th byte where the query starts in the response data.
            reader.Advance(12);

            // Act.

            IDnsString dnsString = reader.ReadQuestionQueryString(sampleData);

            // Assert.
            Assert.AreEqual(dnsString.Original, query);
            Assert.AreEqual(dnsString.Value, queryDot);
        }
Beispiel #19
0
 public HInfoRecord ReadResourceRecord(
     ResourceRecord info,
     DnsDatagramReader reader) => new HInfoRecord(info, reader.ReadString(), reader.ReadString());
 public MrRecord ReadResourceRecord(
     ResourceRecord info,
     DnsDatagramReader reader) => new MrRecord(info, reader.ReadDnsName());
 public OptRecord ReadResourceRecord(
     ResourceRecord info,
     DnsDatagramReader reader) => new OptRecord((int)info.RecordClass, info.TimeToLive, info.RawDataLength);
Beispiel #22
0
 public AaaaRecord ReadResourceRecord(
     ResourceRecord info,
     DnsDatagramReader reader) => new AaaaRecord(info, reader.ReadIPv6Address());
 private static DnsRecordFactory GetFactory(byte[] data, out DnsDatagramReader reader)
 {
     reader = new DnsDatagramReader(new ArraySegment <byte>(data));
     return(new StandardDnsRecordFactoryFactory().Create());
 }
Beispiel #24
0
 public NullRecord ReadResourceRecord(
     ResourceRecord info,
     DnsDatagramReader reader) => new NullRecord(info, reader.ReadBytes(info.RawDataLength).ToArray());
 public AfsDbRecord ReadResourceRecord(
     ResourceRecord info,
     DnsDatagramReader reader) => new AfsDbRecord(
     info,
     (AfsType)reader.ReadUInt16NetworkOrder(),
     reader.ReadDnsName());