Vanara/UnitTests/PInvoke/Mpr/WinNetWkTests.cs

200 lines
6.5 KiB
C#

using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Vanara.InteropServices;
using static Vanara.PInvoke.Mpr;
namespace Vanara.PInvoke.Tests
{
[TestFixture]
public class WinNetWkTests
{
const string ldev = "S:";
const string prov = "Microsoft Windows Network";
const string remSh = @"\\hallan-svr\share";
const string shDir = @"\Music";
[OneTimeSetUp]
public void FixtureSetup()
{
WNetAddConnection(remSh, null, ldev).ThrowIfFailed();
}
[OneTimeTearDown]
public void FixtureTeardown()
{
WNetCancelConnection2(ldev, 0, true);
}
[Test]
public void MultinetGetConnectionPerformanceTest()
{
var nci = NETCONNECTINFOSTRUCT.Empty;
MultinetGetConnectionPerformance(new NETRESOURCE(remSh), ref nci).ThrowIfFailed();
Assert.That((int)nci.dwFlags, Is.GreaterThan(0));
}
[Test]
public void WNetAddConnection2Test()
{
var drv = "Q:";
WNetAddConnection2(new NETRESOURCE(remSh, drv), null, null, CONNECT.CONNECT_INTERACTIVE).ThrowIfFailed();
var dds = new DISCDLGSTRUCT { cbStructure = (uint)Marshal.SizeOf<DISCDLGSTRUCT>(), lpLocalName = drv };
WNetDisconnectDialog1(ref dds).ThrowIfFailed();
}
[Test]
public void WNetAddConnection3Test()
{
var drv = "Q:";
WNetAddConnection3(new HandleRef(), new NETRESOURCE(remSh, drv), null, null, CONNECT.CONNECT_INTERACTIVE).ThrowIfFailed();
WNetCancelConnection2(drv, 0, true).ThrowIfFailed();
}
[Test]
public void WNetEnumResourceTest()
{
WNetOpenEnum(NETRESOURCEScope.RESOURCE_CONNECTED, NETRESOURCEType.RESOURCETYPE_ANY, NETRESOURCEUsage.RESOURCEUSAGE_ALL, IntPtr.Zero, out var h).ThrowIfFailed();
Assert.That(h.IsInvalid, Is.False);
int count = -1;
uint sz = 1;
var ptr = new SafeCoTaskMemHandle((int)sz);
Assert.That(WNetEnumResource(h, ref count, (IntPtr)ptr, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
count = -1;
ptr.Size = (int)sz;
WNetEnumResource(h, ref count, (IntPtr)ptr, ref sz).ThrowIfFailed();
Assert.That(count, Is.GreaterThan(0));
NETRESOURCE[] nets = null;
Assert.That(() => nets = ptr.ToArray<NETRESOURCE>(count), Throws.Nothing);
for (int i = 0; i < count; i++)
TestContext.WriteLine(nets[i].lpProvider);
}
[Test]
public void WNetGetConnectionTest()
{
uint sz = 0;
Assert.That(WNetGetConnection(ldev, null, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
var sb = new StringBuilder((int)sz);
WNetGetConnection(ldev, sb, ref sz).ThrowIfFailed();
Assert.That(sb.ToString(), Contains.Substring(@"\\"));
}
[Test]
public void WNetGetNetworkInformationTest()
{
var nis = NETINFOSTRUCT.Empty;
WNetGetNetworkInformation(prov, ref nis).ThrowIfFailed();
Assert.That(nis.dwDrives, Is.GreaterThan(0));
TestContext.WriteLine($"Ch={nis.dwCharacteristics};Dr={nis.dwDrives};Pr={nis.dwPrinters};Ver={nis.dwProviderVersion};St={nis.dwStatus};NT={nis.wNetType}");
}
[Test]
public void WNetGetProviderNameTest()
{
uint sz = 0;
var sb = new StringBuilder(1);
Assert.That(WNetGetProviderName(WNNC_NET.WNNC_NET_SMB, sb, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
sb = new StringBuilder((int)sz);
WNetGetProviderName(WNNC_NET.WNNC_NET_SMB, sb, ref sz).ThrowIfFailed();
Assert.That(sb.ToString(), Is.EqualTo(prov));
}
[Test]
public void WNetGetResourceInformationTest()
{
uint sz = 1;
var lnr = new NETRESOURCE(remSh + shDir);
var ptr = new SafeCoTaskMemHandle((int)sz);
Assert.That(WNetGetResourceInformation(lnr, (IntPtr)ptr, ref sz, out var _), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
ptr.Size = (int)sz;
WNetGetResourceInformation(lnr, (IntPtr)ptr, ref sz, out var sys).ThrowIfFailed();
var rnr = ptr.ToStructure<NETRESOURCE>();
Assert.That((int)rnr.dwUsage, Is.Not.Zero);
Assert.That(rnr.lpRemoteName, Is.EqualTo(remSh));
Assert.That(sys, Is.Not.EqualTo(IntPtr.Zero));
}
[Test]
public void WNetGetResourceParentTest()
{
uint sz = 1;
var lnr = new NETRESOURCE(remSh + shDir, null, prov);
var ptr = new SafeCoTaskMemHandle((int)sz);
Assert.That(WNetGetResourceParent(lnr, (IntPtr)ptr, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
ptr.Size = (int)sz;
WNetGetResourceParent(lnr, (IntPtr)ptr, ref sz).ThrowIfFailed();
var nrp = ptr.ToStructure<NETRESOURCE>();
Assert.That((int)nrp.dwUsage, Is.Not.Zero);
Assert.That(nrp.lpRemoteName, Is.EqualTo(remSh));
}
[Test]
public void WNetGetUniversalNameTest()
{
uint sz = 1;
var ptr = new SafeCoTaskMemHandle((int)sz);
Assert.That(WNetGetUniversalName(ldev + shDir, INFO_LEVEL.REMOTE_NAME_INFO_LEVEL, (IntPtr)ptr, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
ptr.Size = (int)sz;
WNetGetUniversalName(ldev + shDir, INFO_LEVEL.REMOTE_NAME_INFO_LEVEL, (IntPtr)ptr, ref sz).ThrowIfFailed();
var rni = ptr.ToStructure<REMOTE_NAME_INFO>();
Assert.That(rni.lpUniversalName, Is.EqualTo(remSh + shDir));
Assert.That(rni.lpRemainingPath, Is.EqualTo(shDir));
sz = 1;
Assert.That(WNetGetUniversalName(ldev + shDir, INFO_LEVEL.UNIVERSAL_NAME_INFO_LEVEL, (IntPtr)ptr, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
ptr.Size = (int)sz;
WNetGetUniversalName(ldev + shDir, INFO_LEVEL.UNIVERSAL_NAME_INFO_LEVEL, (IntPtr)ptr, ref sz).ThrowIfFailed();
var uni = ptr.ToStructure<UNIVERSAL_NAME_INFO>();
Assert.That(uni.lpUniversalName, Is.EqualTo(remSh + shDir));
}
[Test]
public void WNetGetUserTest()
{
uint sz = 0;
Assert.That(WNetGetUser(ldev, null, ref sz), Is.EqualTo(Win32Error.ERROR_MORE_DATA));
var sb = new StringBuilder((int)sz);
WNetGetUser(ldev, sb, ref sz).ThrowIfFailed();
Assert.That(sb.ToString(), Contains.Substring(@"da"));
}
[Test]
public void WNetSetLastErrorTest()
{
const string serr = "I need so much more";
Assert.That(() => WNetSetLastError(Win32Error.ERROR_MORE_DATA, serr, prov), Throws.Nothing);
var sb = new StringBuilder(256);
var sb2 = new StringBuilder(256);
WNetGetLastError(out var err, sb, 256, sb2, 256).ThrowIfFailed();
Assert.That(sb.ToString(), Is.EqualTo(serr));
}
[Test]
public void WNetUseConnectionTest()
{
var sz = 20U;
var sb = new StringBuilder((int)sz);
WNetUseConnection(new HandleRef(), new NETRESOURCE(remSh), null, null, CONNECT.CONNECT_REDIRECT, sb, ref sz, out var drv).ThrowIfFailed();
Assert.That(sb.Length, Is.GreaterThan(0));
TestContext.WriteLine($"{sb} {drv}");
WNetCancelConnection2(sb.ToString(), 0, true);
}
}
}