NTFileStoreTests.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using SMBLibrary;
  6. using SMBLibrary.Win32;
  7. namespace SMBLibrary.Tests
  8. {
  9. [TestClass]
  10. public abstract class NTFileStoreTests
  11. {
  12. private INTFileStore m_fileStore;
  13. private readonly string TestDirName = "Dir";
  14. private NTStatus? m_notifyChangeStatus;
  15. public NTFileStoreTests(INTFileStore fileStore)
  16. {
  17. m_fileStore = fileStore;
  18. object handle;
  19. FileStatus fileStatus;
  20. 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);
  21. Assert.IsTrue(status == NTStatus.STATUS_SUCCESS);
  22. status = m_fileStore.CloseFile(handle);
  23. Assert.IsTrue(status == NTStatus.STATUS_SUCCESS);
  24. }
  25. [TestMethod]
  26. public void TestCancel()
  27. {
  28. object handle;
  29. FileStatus fileStatus;
  30. m_fileStore.CreateFile(out handle, out fileStatus, TestDirName, AccessMask.GENERIC_ALL, FileAttributes.Directory, ShareAccess.Read, CreateDisposition.FILE_OPEN, CreateOptions.FILE_DIRECTORY_FILE, null);
  31. object ioRequest = null;
  32. NTStatus status = m_fileStore.NotifyChange(out ioRequest, handle, NotifyChangeFilter.FileName | NotifyChangeFilter.LastWrite | NotifyChangeFilter.DirName, false, 8192, OnNotifyChangeCompleted, null);
  33. Assert.IsTrue(status == NTStatus.STATUS_PENDING);
  34. m_fileStore.Cancel(ioRequest);
  35. m_fileStore.CloseFile(handle);
  36. while (m_notifyChangeStatus == null)
  37. {
  38. Thread.Sleep(1);
  39. }
  40. Assert.IsTrue(m_notifyChangeStatus.Value == NTStatus.STATUS_CANCELLED);
  41. }
  42. private void OnNotifyChangeCompleted(NTStatus status, byte[] buffer, object context)
  43. {
  44. m_notifyChangeStatus = status;
  45. }
  46. public void TestAll()
  47. {
  48. TestCancel();
  49. }
  50. }
  51. }