mirror of https://github.com/dahall/Vanara.git
Added multiple winsock tests
parent
5e9b491b71
commit
f48cc975fe
|
@ -0,0 +1,107 @@
|
|||
using NUnit.Framework;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using Vanara.InteropServices;
|
||||
using static Vanara.PInvoke.Ws2_32;
|
||||
|
||||
namespace Vanara.PInvoke.Tests
|
||||
{
|
||||
[TestFixture()]
|
||||
public class WSATests
|
||||
{
|
||||
const string saddr4 = "192.168.0.1";
|
||||
const string saddr6 = "2001:db8:aaaa:1::100";
|
||||
|
||||
public static readonly IPAddress localIP4 = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
|
||||
public static readonly SOCKET tcpSocket = socket(ADDRESS_FAMILY.AF_INET, SOCK.SOCK_STREAM, IPPROTO.IPPROTO_TCP);
|
||||
|
||||
//[OneTimeTearDown]
|
||||
//public void _OneTimeTearDown()
|
||||
//{
|
||||
// WSACleanup();
|
||||
//}
|
||||
|
||||
[Test]
|
||||
public void WSAAddressToStringTest()
|
||||
{
|
||||
var addr = new SOCKADDR(localIP4);
|
||||
var len = 256U;
|
||||
var sb = new StringBuilder((int)len);
|
||||
Assert.That(WSAAddressToString(addr, addr.Size, default, sb, ref len), ResultIs.Not.Value(-1));
|
||||
TestContext.Write(sb);
|
||||
Assert.That(sb.ToString(), Is.EqualTo(localIP4.ToString()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WSACreateEventTest()
|
||||
{
|
||||
var evt = WSACreateEvent();
|
||||
Assert.That(evt, ResultIs.ValidHandle);
|
||||
Assert.That(WSAResetEvent(evt), ResultIs.Successful);
|
||||
Assert.That(WSASetEvent(evt), ResultIs.Successful);
|
||||
Assert.That(() => evt.Dispose(), Throws.Nothing);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WSAEnumNameSpaceProvidersTest()
|
||||
{
|
||||
var len = 0U;
|
||||
Assert.That(WSAEnumNameSpaceProviders(ref len, default), ResultIs.Value(-1));
|
||||
//Assert.That(WSAGetLastError(), Is.EqualTo((Win32Error)Win32Error.WSAEFAULT));
|
||||
Assert.That(len, Is.GreaterThan(0));
|
||||
using var mem = new SafeHGlobalHandle(len);
|
||||
var cnt = WSAEnumNameSpaceProviders(ref len, mem);
|
||||
Assert.That(cnt, ResultIs.Not.Value(-1));
|
||||
TestContext.Write(string.Join("\n", mem.ToEnumerable<WSANAMESPACE_INFOW>(cnt).Select(n => $"{n.lpszIdentifier.ToString()}: {n.NSProviderId}, {n.dwNameSpace}, {n.fActive}")));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WSAEnumNameSpaceProvidersExTest()
|
||||
{
|
||||
var len = 0U;
|
||||
Assert.That(WSAEnumNameSpaceProvidersEx(ref len, default), ResultIs.Value(-1));
|
||||
//Assert.That(WSAGetLastError(), Is.EqualTo((Win32Error)Win32Error.WSAEFAULT));
|
||||
Assert.That(len, Is.GreaterThan(0));
|
||||
using var mem = new SafeHGlobalHandle(len);
|
||||
var cnt = WSAEnumNameSpaceProvidersEx(ref len, mem);
|
||||
Assert.That(cnt, ResultIs.Not.Value(-1));
|
||||
TestContext.Write(string.Join("\n", mem.ToEnumerable<WSANAMESPACE_INFOEXW>(cnt).Select(n => $"{n.lpszIdentifier.ToString()}: {n.NSProviderId}, {n.dwNameSpace}, {n.fActive}")));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WSAEnumNetworkEventsTest()
|
||||
{
|
||||
var ListenSocket = tcpSocket;
|
||||
var InetAddr = new SOCKADDR(IN_ADDR.INADDR_ANY, htons(27015));
|
||||
Assert.That(bind(ListenSocket, InetAddr, InetAddr.Size), ResultIs.Not.Value(-1));
|
||||
using var evt = WSACreateEvent();
|
||||
Assert.That(evt, ResultIs.ValidHandle);
|
||||
Assert.That(WSAEventSelect(ListenSocket, evt, FD.FD_ACCEPT | FD.FD_CLOSE), ResultIs.Not.Value(-1));
|
||||
Assert.That(listen(ListenSocket, 10), ResultIs.Not.Value(-1));
|
||||
var EventArray = new WSAEVENT[] { evt };
|
||||
WSAWaitForMultipleEvents((uint)EventArray.Length, EventArray, true, 500, false);
|
||||
Assert.That(WSAEnumNetworkEvents(ListenSocket, evt, out var nets), ResultIs.Not.Value(-1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WSAEnumProtocolsTest()
|
||||
{
|
||||
var len = 0U;
|
||||
Assert.That(WSAEnumProtocols(null, default, ref len), ResultIs.Value(-1));
|
||||
Assert.That(len, Is.GreaterThan(0));
|
||||
using var mem = new SafeHGlobalHandle(len);
|
||||
var cnt = WSAEnumProtocols(null, mem, ref len);
|
||||
Assert.That(cnt, ResultIs.Not.Value(-1));
|
||||
TestContext.Write(string.Join("\n", mem.ToEnumerable<WSAPROTOCOL_INFO>(cnt).Select(p => $"{p.szProtocol}: {(ADDRESS_FAMILY)p.iAddressFamily}, {p.iSocketType}, {p.iProtocol}")));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void WSAHtonlTest()
|
||||
{
|
||||
Assert.That(WSAHtonl(tcpSocket, 0x01020304, out var ret), ResultIs.Not.Value(-1));
|
||||
Assert.That(ret, Is.EqualTo(0x04030201));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
using NUnit.Framework;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using Vanara.Extensions;
|
||||
using Vanara.InteropServices;
|
||||
using static Vanara.PInvoke.Ws2_32;
|
||||
|
||||
namespace Vanara.PInvoke.Tests
|
||||
{
|
||||
[TestFixture()]
|
||||
public class Winsock2Tests
|
||||
{
|
||||
const string saddr4 = "192.168.0.1";
|
||||
const string saddr6 = "2001:db8:aaaa:1::100";
|
||||
|
||||
public static readonly IPAddress localIP4 = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
|
||||
public static SafeSOCKET GetTcpSocket() => socket(ADDRESS_FAMILY.AF_INET, SOCK.SOCK_STREAM, IPPROTO.IPPROTO_TCP);
|
||||
|
||||
[Test]
|
||||
public void gethostnameTest()
|
||||
{
|
||||
var sb = new StringBuilder(256);
|
||||
Assert.That(gethostname(sb, sb.Capacity), ResultIs.Not.Value(-1));
|
||||
TestContext.WriteLine(sb);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetHostNameWTest()
|
||||
{
|
||||
var sb = new StringBuilder(256);
|
||||
Assert.That(GetHostNameW(sb, sb.Capacity), ResultIs.Not.Value(-1));
|
||||
TestContext.WriteLine(sb);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public unsafe void getprotobynameTest()
|
||||
{
|
||||
var p = getprotobyname_unsafe("TCP");
|
||||
Assert.That((IntPtr)p, Is.Not.EqualTo(IntPtr.Zero));
|
||||
TestContext.WriteLine($"{p->p_name}: {p->p_proto}, {string.Join(",", p->Aliases)}");
|
||||
|
||||
var p2 = getprotobyname("TCP");
|
||||
Assert.That(p2, Is.Not.EqualTo(IntPtr.Zero));
|
||||
Assert.That(p2.ToStructure<PROTOENT>().p_proto, Is.EqualTo(p->p_proto));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public unsafe void getprotobynumberTest()
|
||||
{
|
||||
var p = getprotobynumber_unsafe(6);
|
||||
Assert.That((IntPtr)p, Is.Not.EqualTo(IntPtr.Zero));
|
||||
TestContext.WriteLine($"{p->p_name}: {p->p_proto}, {string.Join(",", p->Aliases)}");
|
||||
|
||||
var p2 = getprotobynumber(6);
|
||||
Assert.That(p2, Is.Not.EqualTo(IntPtr.Zero));
|
||||
Assert.That(p2.ToStructure<PROTOENT>().p_proto, Is.EqualTo(p->p_proto));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public unsafe void getservbynameTest()
|
||||
{
|
||||
const string svcName = "finger";
|
||||
var ps = getservbyname(svcName);
|
||||
Assert.That(ps, Is.Not.EqualTo(IntPtr.Zero));
|
||||
var s = ps.ToStructure<SERVENT>();
|
||||
TestContext.WriteLine($"{s.s_name}: {s.s_port}, {s.s_proto}, {string.Join(",", s.s_aliases)}");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public unsafe void getservbyportTest()
|
||||
{
|
||||
const short svcPort = 20224; // finger (79 reversed)
|
||||
var ps = getservbyport(svcPort, "TCP");
|
||||
Assert.That(ps, ResultIs.Not.Value(IntPtr.Zero));
|
||||
var s = ps.ToStructure<SERVENT>();
|
||||
TestContext.WriteLine($"{s.s_name}: {s.s_port}, {s.s_proto}, {string.Join(",", s.s_aliases)}");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void getsocknameTest()
|
||||
{
|
||||
using var sckt = GetTcpSocket();
|
||||
var cname = new SOCKADDR(inet_addr("127.0.0.1"), htons(80));
|
||||
Assert.That(connect(sckt, cname, cname.Size), ResultIs.Not.Value(-1));
|
||||
var addr = SOCKADDR.Empty;
|
||||
var sz = (int)addr.Size;
|
||||
Assert.That(getsockname(sckt, addr, ref sz), ResultIs.Not.Value(-1));
|
||||
Assert.That(sz, Is.LessThanOrEqualTo((int)addr.Size));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void getsockoptTest()
|
||||
{
|
||||
var sz = 256;
|
||||
using var sckt = GetTcpSocket();
|
||||
using var mem = new SafeHGlobalHandle(sz);
|
||||
Assert.That(getsockopt(sckt, SOL_SOCKET, SO_ACCEPTCONN, mem, ref sz), ResultIs.Not.Value(-1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void htonlTest()
|
||||
{
|
||||
Assert.That(htonl(0x04030201), Is.EqualTo(0x01020304));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void htonsTest()
|
||||
{
|
||||
Assert.That(htons(0x0201), Is.EqualTo(0x0102));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void inet_addrTest()
|
||||
{
|
||||
Assert.That(inet_addr("255.255.255.0"), Is.EqualTo(0x00FFFFFFU));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void inet_ntoaTest()
|
||||
{
|
||||
Assert.That(inet_ntoa(new IN_ADDR(0x00FFFFFFU)).ToString(), Is.EqualTo("255.255.255.0"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ntohlTest()
|
||||
{
|
||||
Assert.That(ntohl(0x04030201), Is.EqualTo(0x01020304));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ntohsTest()
|
||||
{
|
||||
Assert.That(ntohs(0x0201), Is.EqualTo(0x0102));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -62,6 +62,8 @@
|
|||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Winsock2Tests.cs" />
|
||||
<Compile Include="WSATests.cs" />
|
||||
<Compile Include="Ws2tcpipTests.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
|
Loading…
Reference in New Issue