SMBLibrary.Tests: Added NTFileStoreTests, NTDirectoryFileSystemTests

This commit is contained in:
Tal Aloni 2019-06-10 16:37:26 +03:00
parent ea3e2c1974
commit 187135c412
4 changed files with 91 additions and 0 deletions

View file

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SMBLibrary;
using SMBLibrary.Win32;
namespace SMBLibrary.Tests
{
[TestClass]
public class NTDirectoryFileSystemTests : NTFileStoreTests
{
private static readonly string TestDirectoryPath = @"C:\Tests";
static NTDirectoryFileSystemTests()
{
if (!Directory.Exists(TestDirectoryPath))
{
Directory.CreateDirectory(TestDirectoryPath);
}
}
public NTDirectoryFileSystemTests() : base(new NTDirectoryFileSystem(TestDirectoryPath))
{
}
}
}

View file

@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Threading;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SMBLibrary;
using SMBLibrary.Win32;
namespace SMBLibrary.Tests
{
[TestClass]
public abstract class NTFileStoreTests
{
private INTFileStore m_fileStore;
private readonly string TestDirName = "Dir";
private NTStatus? m_notifyChangeStatus;
public NTFileStoreTests(INTFileStore fileStore)
{
m_fileStore = fileStore;
object handle;
FileStatus fileStatus;
NTStatus status = m_fileStore.CreateFile(out handle, out fileStatus, TestDirName, AccessMask.GENERIC_ALL, FileAttributes.Directory, ShareAccess.Read, CreateDisposition.FILE_OPEN_IF, CreateOptions.FILE_DIRECTORY_FILE, null);
Assert.IsTrue(status == NTStatus.STATUS_SUCCESS);
status = m_fileStore.CloseFile(handle);
Assert.IsTrue(status == NTStatus.STATUS_SUCCESS);
}
[TestMethod]
public void TestCancel()
{
object handle;
FileStatus fileStatus;
m_fileStore.CreateFile(out handle, out fileStatus, TestDirName, AccessMask.GENERIC_ALL, FileAttributes.Directory, ShareAccess.Read, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, null);
object ioRequest = null;
NTStatus status = m_fileStore.NotifyChange(out ioRequest, handle, NotifyChangeFilter.FileName | NotifyChangeFilter.LastWrite | NotifyChangeFilter.DirName, false, 8192, OnNotifyChangeCompleted, null);
Assert.IsTrue(status == NTStatus.STATUS_PENDING);
m_fileStore.Cancel(ioRequest);
m_fileStore.CloseFile(handle);
while (m_notifyChangeStatus == null)
{
Thread.Sleep(1);
}
Assert.IsTrue(m_notifyChangeStatus.Value == NTStatus.STATUS_CANCELLED);
}
private void OnNotifyChangeCompleted(NTStatus status, byte[] buffer, object context)
{
m_notifyChangeStatus = status;
}
public void TestAll()
{
TestCancel();
}
}
}

View file

@ -15,6 +15,8 @@ namespace SMBLibrary.Tests
new NetBiosTests().TestAll(); new NetBiosTests().TestAll();
new RPCTests().TestAll(); new RPCTests().TestAll();
new SMB2SigningTests().TestAll(); new SMB2SigningTests().TestAll();
new NTDirectoryFileSystemTests().TestAll();
} }
} }
} }

View file

@ -36,6 +36,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="NetBiosTests.cs" /> <Compile Include="NetBiosTests.cs" />
<Compile Include="NTFileStore\NTDirectoryFileSystemTests.cs" />
<Compile Include="NTFileStore\NTFileStoreTests.cs" />
<Compile Include="NTLM\NTLMAuthenticationTests.cs" /> <Compile Include="NTLM\NTLMAuthenticationTests.cs" />
<Compile Include="NTLM\NTLMSigningTests.cs" /> <Compile Include="NTLM\NTLMSigningTests.cs" />
<Compile Include="NTLM\RC4Tests.cs" /> <Compile Include="NTLM\RC4Tests.cs" />