mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-05-05 13:17:48 +02:00
61 lines
2.2 KiB
C#
61 lines
2.2 KiB
C#
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);
|
|
|
|
Thread.Sleep(1);
|
|
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();
|
|
}
|
|
}
|
|
}
|