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); }
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); }
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); }
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)); }
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."); }
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); }
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); }
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); }
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."); }
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); }
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)); }
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); }
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); }
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); }
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())); }
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); }
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);
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()); }
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());