UnitTest.cs 4.7 KB

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