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