diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4edd5ac --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.bin filter=lfs diff=lfs merge=lfs -text diff --git a/tests/Ae.Dns.Benchmarks/Ae.Dns.Benchmarks.csproj b/tests/Ae.Dns.Benchmarks/Ae.Dns.Benchmarks.csproj index f0309df..48abd0e 100644 --- a/tests/Ae.Dns.Benchmarks/Ae.Dns.Benchmarks.csproj +++ b/tests/Ae.Dns.Benchmarks/Ae.Dns.Benchmarks.csproj @@ -7,10 +7,6 @@ true - - - - diff --git a/tests/Ae.Dns.Benchmarks/FromBytes.cs b/tests/Ae.Dns.Benchmarks/FromBytes.cs deleted file mode 100644 index 9b41421..0000000 --- a/tests/Ae.Dns.Benchmarks/FromBytes.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Ae.Dns.Protocol; -using Ae.Dns.Tests; -using BenchmarkDotNet.Attributes; - -namespace Ae.Dns.Benchmarks -{ - public class FromBytes - { - [Benchmark] - public DnsMessage Query1() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query1); - - [Benchmark] - public DnsMessage Query2() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query2); - - [Benchmark] - public DnsMessage Query3() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query3); - - [Benchmark] - public DnsMessage Query4() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query4); - - [Benchmark] - public DnsMessage Query5() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query5); - - [Benchmark] - public DnsMessage Query6() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query6); - - [Benchmark] - public DnsMessage Query7() => DnsByteExtensions.FromBytes(SampleDnsPackets.Query7); - - [Benchmark] - public DnsMessage Answer1() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer1); - - [Benchmark] - public DnsMessage Answer2() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer2); - - [Benchmark] - public DnsMessage Answer3() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer3); - - [Benchmark] - public DnsMessage Answer4() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer4); - - [Benchmark] - public DnsMessage Answer5() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer5); - - [Benchmark] - public DnsMessage Answer6() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer6); - - [Benchmark] - public DnsMessage Answer7() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer7); - - [Benchmark] - public DnsMessage Answer8() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer8); - - [Benchmark] - public DnsMessage Answer9() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer9); - - [Benchmark] - public DnsMessage Answer10() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer10); - - [Benchmark] - public DnsMessage Answer11() => DnsByteExtensions.FromBytes(SampleDnsPackets.Answer11); - } -} diff --git a/tests/Ae.Dns.Benchmarks/Program.cs b/tests/Ae.Dns.Benchmarks/Program.cs index 72f85ca..6877f99 100644 --- a/tests/Ae.Dns.Benchmarks/Program.cs +++ b/tests/Ae.Dns.Benchmarks/Program.cs @@ -1,7 +1,6 @@ using Ae.Dns.Protocol; using Ae.Dns.Tests; using System; -using System.Linq; namespace Ae.Dns.Benchmarks { @@ -9,18 +8,18 @@ class Program { public static void Main(string[] args) { - //var summary = BenchmarkRunner.Run(typeof(Program).Assembly); - Span buffer = new byte[65527]; - for (var i = 0; i < 100_000; i++) + var answers = SampleDnsPackets.AnswerBatch1; + + for (var i = 0; i < 10_000; i++) { - foreach (var message in SampleDnsPackets.AllPackets.ToArray()) + foreach (var answer in answers) { var reader = new DnsMessage(); var offset = 0; - reader.ReadBytes(message, ref offset); + reader.ReadBytes(answer, ref offset); offset = 0; reader.WriteBytes(buffer, ref offset); diff --git a/tests/Ae.Dns.Tests/Ae.Dns.Tests.csproj b/tests/Ae.Dns.Tests/Ae.Dns.Tests.csproj index a24526d..825b1cd 100644 --- a/tests/Ae.Dns.Tests/Ae.Dns.Tests.csproj +++ b/tests/Ae.Dns.Tests/Ae.Dns.Tests.csproj @@ -22,4 +22,10 @@ + + + PreserveNewest + + + diff --git a/tests/Ae.Dns.Tests/Files/answers1.bin b/tests/Ae.Dns.Tests/Files/answers1.bin new file mode 100644 index 0000000..336ac11 --- /dev/null +++ b/tests/Ae.Dns.Tests/Files/answers1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f57811107bc8837f7712c9779b0f8a00059b2be9c8edb0257927f292f8edee8c +size 99951 diff --git a/tests/Ae.Dns.Tests/Protocol/DnsRoundTripTests.cs b/tests/Ae.Dns.Tests/Protocol/DnsRoundTripTests.cs index 35a0ee2..3592cc5 100644 --- a/tests/Ae.Dns.Tests/Protocol/DnsRoundTripTests.cs +++ b/tests/Ae.Dns.Tests/Protocol/DnsRoundTripTests.cs @@ -20,5 +20,15 @@ public void TestRoundTripAnswers(byte[] answerBytes) var answer = DnsByteExtensions.FromBytes(answerBytes); Assert.Equal(answer, DnsByteExtensions.FromBytes(DnsByteExtensions.AllocateAndWrite(answer).ToArray())); } + + [Fact] + public void TestRoundTripAnswerBatch1() + { + foreach (var answerBytes in SampleDnsPackets.AnswerBatch1) + { + var answer = DnsByteExtensions.FromBytes(answerBytes); + Assert.Equal(answer, DnsByteExtensions.FromBytes(DnsByteExtensions.AllocateAndWrite(answer).ToArray())); + } + } } } diff --git a/tests/Ae.Dns.Tests/SampleDnsPackets.cs b/tests/Ae.Dns.Tests/SampleDnsPackets.cs index 097da48..ef58957 100644 --- a/tests/Ae.Dns.Tests/SampleDnsPackets.cs +++ b/tests/Ae.Dns.Tests/SampleDnsPackets.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using System.IO; using System.Linq; namespace Ae.Dns.Tests @@ -20,7 +21,7 @@ public static class SampleDnsPackets { public static IEnumerable AllPackets => Queries.Concat(Answers); - public static byte[][] Queries => new[] { Query1,Query2,Query3,Query4,Query5,Query6,Query7 }; + public static byte[][] Queries => new[] { Query1, Query2, Query3, Query4, Query5, Query6, Query7 }; public static readonly byte[] Query1 = new byte[] { @@ -64,7 +65,7 @@ public static class SampleDnsPackets 118,242,1,0,0,1,0,0,0,0,0,1,3,97,112,105,9,115,110,97,112,99,114,97,102,116,2,105,111,0,0,28,0,1,0,0,41,5,192,0,0,0,0,0,0 }; - public static byte[][] Answers => new[] { Answer1,Answer2,Answer3,Answer4,Answer5,Answer6,Answer7,Answer8,Answer9,Answer10 }; + public static byte[][] Answers => new[] { Answer1, Answer2, Answer3, Answer4, Answer5, Answer6, Answer7, Answer8, Answer9, Answer10 }; public static readonly byte[] Answer1 = new byte[] { @@ -126,10 +127,35 @@ public static class SampleDnsPackets 0,4,129,128,0,1,0,1,0,0,0,0,4,95,115,112,102,7,109,97,105,108,103,117,110,3,111,114,103,0,0,16,0,1,192,12,0,16,0,1,0,0,0,21,1,78,205,118,61,115,112,102,49,32,105,112,52,58,50,48,57,46,54,49,46,49,53,49,46,48,47,50,52,32,105,112,52,58,49,54,54,46,55,56,46,54,56,46,48,47,50,50,32,105,112,52,58,49,57,56,46,54,49,46,50,53,52,46,48,47,50,51,32,105,112,52,58,49,57,50,46,50,51,55,46,49,53,56,46,48,47,50,51,32,105,112,52,58,50,51,46,50,53,51,46,49,56,50,46,48,47,50,51,32,105,112,52,58,49,48,52,46,49,51,48,46,57,54,46,48,47,50,56,32,105,112,52,58,49,52,54,46,50,48,46,49,49,51,46,48,47,50,52,32,105,112,52,58,49,52,54,46,50,48,46,49,57,49,46,48,47,50,52,32,105,112,52,58,49,53,57,46,49,51,53,46,50,50,52,46,48,47,50,48,32,105,112,52,58,54,57,46,55,50,46,51,50,46,48,47,50,48,127,32,105,112,52,58,49,48,52,46,49,51,48,46,49,50,50,46,48,47,50,51,32,105,112,52,58,49,52,54,46,50,48,46,49,49,50,46,48,47,50,54,32,105,112,52,58,49,54,49,46,51,56,46,49,57,50,46,48,47,50,48,32,105,112,52,58,49,52,51,46,53,53,46,50,50,52,46,48,47,50,49,32,105,112,52,58,49,52,51,46,53,53,46,50,51,50,46,48,47,50,50,32,105,112,52,58,49,53,57,46,49,49,50,46,50,52,48,46,48,47,50,48,32,126,97,108,108 }; - public static readonly byte[] Answer11 = new byte [] + public static readonly byte[] Answer11 = new byte[] { // google.com NS 0,16,129,128,0,1,0,4,0,0,0,0,6,103,111,111,103,108,101,3,99,111,109,0,0,2,0,1,192,12,0,2,0,1,0,0,82,250,0,6,3,110,115,52,192,12,192,12,0,2,0,1,0,0,82,250,0,6,3,110,115,51,192,12,192,12,0,2,0,1,0,0,82,250,0,6,3,110,115,49,192,12,192,12,0,2,0,1,0,0,82,250,0,6,3,110,115,50,192,12 }; + + private static IList ReadBatch(FileInfo fileInfo) + { + var answers = new List(); + + using (var fs = fileInfo.OpenRead()) + using (var br = new BinaryReader(fs)) + { + while (fs.Position < fs.Length) + { + var bufferLength = br.ReadInt32(); + answers.Add(br.ReadBytes(bufferLength)); + } + } + + return answers; + } + + private static FileInfo GetTestFile(string name) + { + var assemblyFileInfo = new FileInfo(typeof(SampleDnsPackets).Assembly.Location); + return new FileInfo(Path.Combine(assemblyFileInfo.Directory.FullName, "Files", name)); + } + + public static IList AnswerBatch1 => ReadBatch(GetTestFile("answers1.bin")); } }