UnitTest.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using Dns.Net.Abstractions;
  2. using Dns.Net.Clients;
  3. using Microsoft.VisualStudio.TestTools.UnitTesting;
  4. using STUN.Client;
  5. using STUN.Enums;
  6. using STUN.Proxy;
  7. using System;
  8. using System.Net;
  9. using System.Threading.Tasks;
  10. namespace UnitTest
  11. {
  12. [TestClass]
  13. public class UnitTest
  14. {
  15. private readonly IDnsClient dnsClient = new DefaultDnsClient();
  16. [TestMethod]
  17. public async Task BindingTest()
  18. {
  19. var server = await dnsClient.QueryAsync(@"stun.syncthing.net");
  20. using var client = new StunClient5389UDP(server, 3478, new IPEndPoint(IPAddress.Any, 0));
  21. await client.BindingTestAsync();
  22. var result = client.Status;
  23. Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
  24. Assert.IsNotNull(result.LocalEndPoint);
  25. Assert.IsNotNull(result.PublicEndPoint);
  26. Assert.IsNotNull(result.OtherEndPoint);
  27. Assert.AreNotEqual(result.LocalEndPoint!.Address, IPAddress.Any);
  28. Assert.AreEqual(result.MappingBehavior, MappingBehavior.Unknown);
  29. Assert.AreEqual(result.FilteringBehavior, FilteringBehavior.Unknown);
  30. }
  31. [TestMethod]
  32. public async Task MappingBehaviorTest()
  33. {
  34. var server = await dnsClient.QueryAsync(@"stun.syncthing.net");
  35. using var client = new StunClient5389UDP(server, 3478, new IPEndPoint(IPAddress.Any, 0));
  36. await client.MappingBehaviorTestAsync();
  37. var result = client.Status;
  38. Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
  39. Assert.IsNotNull(result.LocalEndPoint);
  40. Assert.IsNotNull(result.PublicEndPoint);
  41. Assert.IsNotNull(result.OtherEndPoint);
  42. Assert.AreNotEqual(result.LocalEndPoint!.Address, IPAddress.Any);
  43. Assert.IsTrue(result.MappingBehavior is
  44. MappingBehavior.Direct or
  45. MappingBehavior.EndpointIndependent or
  46. MappingBehavior.AddressDependent or
  47. MappingBehavior.AddressAndPortDependent
  48. );
  49. Assert.AreEqual(result.FilteringBehavior, FilteringBehavior.Unknown);
  50. }
  51. [TestMethod]
  52. public async Task FilteringBehaviorTest()
  53. {
  54. var server = await dnsClient.QueryAsync(@"stun.syncthing.net");
  55. using var client = new StunClient5389UDP(server, 3478, new IPEndPoint(IPAddress.Any, 0));
  56. await client.FilteringBehaviorTestAsync();
  57. var result = client.Status;
  58. Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
  59. Assert.IsNotNull(result.LocalEndPoint);
  60. Assert.IsNotNull(result.PublicEndPoint);
  61. Assert.IsNotNull(result.OtherEndPoint);
  62. Assert.AreNotEqual(result.LocalEndPoint!.Address, IPAddress.Any);
  63. Assert.AreEqual(result.MappingBehavior, MappingBehavior.Unknown);
  64. Assert.IsTrue(result.FilteringBehavior is
  65. FilteringBehavior.EndpointIndependent or
  66. FilteringBehavior.AddressDependent or
  67. FilteringBehavior.AddressAndPortDependent
  68. );
  69. }
  70. [TestMethod]
  71. public async Task CombiningTest()
  72. {
  73. var server = await dnsClient.QueryAsync(@"stun.syncthing.net");
  74. using var client = new StunClient5389UDP(server, 3478, new IPEndPoint(IPAddress.Any, 0));
  75. await client.QueryAsync();
  76. var result = client.Status;
  77. Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
  78. Assert.IsNotNull(result.LocalEndPoint);
  79. Assert.IsNotNull(result.PublicEndPoint);
  80. Assert.IsNotNull(result.OtherEndPoint);
  81. Assert.AreNotEqual(result.LocalEndPoint!.Address, IPAddress.Any);
  82. Assert.IsTrue(result.MappingBehavior is
  83. MappingBehavior.Direct or
  84. MappingBehavior.EndpointIndependent or
  85. MappingBehavior.AddressDependent or
  86. MappingBehavior.AddressAndPortDependent
  87. );
  88. Assert.IsTrue(result.FilteringBehavior is
  89. FilteringBehavior.EndpointIndependent or
  90. FilteringBehavior.AddressDependent or
  91. FilteringBehavior.AddressAndPortDependent
  92. );
  93. }
  94. [TestMethod]
  95. public async Task ProxyTest()
  96. {
  97. using var proxy = ProxyFactory.CreateProxy(ProxyType.Socks5, IPEndPoint.Parse(@"0.0.0.0:0"), IPEndPoint.Parse(@"127.0.0.1:10000"));
  98. var server = await dnsClient.QueryAsync(@"stun.syncthing.net");
  99. using var client = new StunClient5389UDP(server, 3478, new IPEndPoint(IPAddress.Any, 0));
  100. await client.QueryAsync();
  101. var result = client.Status;
  102. Assert.AreEqual(result.BindingTestResult, BindingTestResult.Success);
  103. Assert.IsNotNull(result.LocalEndPoint);
  104. Assert.IsNotNull(result.PublicEndPoint);
  105. Assert.IsNotNull(result.OtherEndPoint);
  106. Assert.AreNotEqual(result.LocalEndPoint!.Address, IPAddress.Any);
  107. Assert.IsTrue(
  108. result.MappingBehavior is MappingBehavior.Direct
  109. or MappingBehavior.EndpointIndependent
  110. or MappingBehavior.AddressDependent
  111. or MappingBehavior.AddressAndPortDependent);
  112. Assert.IsTrue(
  113. result.FilteringBehavior is FilteringBehavior.EndpointIndependent
  114. or FilteringBehavior.AddressDependent
  115. or FilteringBehavior.AddressAndPortDependent);
  116. Console.WriteLine(result.BindingTestResult);
  117. Console.WriteLine(result.MappingBehavior);
  118. Console.WriteLine(result.FilteringBehavior);
  119. Console.WriteLine(result.OtherEndPoint);
  120. Console.WriteLine(result.LocalEndPoint);
  121. Console.WriteLine(result.PublicEndPoint);
  122. }
  123. }
  124. }