// Query a directory and get output buffer information private FileBothDirectoryInformation[] Query_Directory_Information(string dirName) { MessageStatus status; uint treeId = 0; FILEID fileId; ulong sessionId = 0; byte[] outputBuffer; BaseTestSite.Log.Add(LogEntryKind.TestStep, $"Query directory with name {dirName}"); status = this.fsaAdapter.CreateFile( dirName, FileAttribute.DIRECTORY, CreateOptions.DIRECTORY_FILE, (FileAccess.GENERIC_READ | FileAccess.GENERIC_WRITE), (ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE), CreateDisposition.OPEN_IF, out fileId, out treeId, out sessionId); this.fsaAdapter.QueryDirectory(fileId, treeId, sessionId, "*", FileInfoClass.FILE_BOTH_DIR_INFORMATION, false, true, out outputBuffer); FileBothDirectoryInformation[] directoryInformation = FsaUtility.UnmarshalFileInformationArray <FileBothDirectoryInformation>(outputBuffer); BaseTestSite.Log.Add(LogEntryKind.TestStep, $"Dirctory query result returns status {status}"); Site.Assert.AreEqual(".", Encoding.Unicode.GetString(directoryInformation[0].FileName), "FileName of the first entry should be \".\"."); Site.Assert.AreEqual("..", Encoding.Unicode.GetString(directoryInformation[1].FileName), "FileName of the second entry should be \"..\"."); Site.Assert.IsTrue(IsChangeTimeValid(directoryInformation), "This value MUST be greater than or equal to 0"); Site.Assert.IsTrue(IsLastAccessTimeValid(directoryInformation), "This value MUST be greater than or equal to 0"); Site.Assert.IsTrue(IsLastWriteTimeValid(directoryInformation), "This value MUST be greater than or equal to 0"); return(directoryInformation); }
public void BVT_QueryDirectoryBySearchPattern <T>( T[] FileInformation, FileInfoClass FileInformationClass, string WildCard, int FilesInDirectoryCount, int ExpectedFilesReturnedLength ) where T : struct { byte[] outputBuffer; List <string> fileNames; int filesCount; // Count files returned from the query, that exist in the FileNames list fileNames = CreateRandomFileNames(FilesInDirectoryCount); outputBuffer = QueryByWildCardAndFileInfoClass(WildCard, FileInformationClass, fileNames); FileInformation = FsaUtility.UnmarshalFileInformationArray <T>(outputBuffer); dynamic dynamicFileInformationObject = FileInformation; filesCount = fileNames.Intersect(GetListFileInformation <T>(FileInformation)).ToList().Count(); Site.Assert.AreEqual(ExpectedFilesReturnedLength, FileInformation.Length, $"The returned Buffer should contain {ExpectedFilesReturnedLength} entries of FileInformation."); Site.Assert.AreEqual(".", Encoding.Unicode.GetString(dynamicFileInformationObject[0].FileName), "FileName of the first entry should be \".\"."); Site.Assert.AreEqual("..", Encoding.Unicode.GetString(dynamicFileInformationObject[1].FileName), "FileName of the second entry should be \"..\"."); Site.Assert.AreEqual(FilesInDirectoryCount, filesCount, $"Number of files created should be equal to the number of files returned: {FilesInDirectoryCount}."); }
public void BVT_QueryDirectory_FileBothDirectoryInformation() { byte[] outputBuffer; string fileName; FILEID dirFileId; PrepareAndQueryDirectory(FileInfoClass.FILE_BOTH_DIR_INFORMATION, out outputBuffer, out fileName, out dirFileId); Site.Log.Add(LogEntryKind.Debug, "Start to verify the Query Directory response."); FileBothDirectoryInformation[] directoryInformation = FsaUtility.UnmarshalFileInformationArray <FileBothDirectoryInformation>(outputBuffer); Site.Assert.AreEqual(3, directoryInformation.Length, "The returned Buffer should contain 3 entries of FileBothDirectoryInformation."); VerifyFileInformation(directoryInformation[0], 1, ".", FileAttribute.DIRECTORY, 0, 0, 0, ""); VerifyFileInformation(directoryInformation[1], 2, "..", FileAttribute.DIRECTORY, 0, 0, 0, "", false); VerifyFileInformation(directoryInformation[2], 3, fileName, FileAttribute.ARCHIVE, BytesToWrite, this.fsaAdapter.ClusterSizeInKB * 1024, 0, GetShortName(fileName)); }
public void BVT_QueryDirectory_FileNamesInformation() { byte[] outputBuffer; string fileName; FILEID dirFileId; PrepareAndQueryDirectory(FileInfoClass.FILE_NAMES_INFORMATION, out outputBuffer, out fileName, out dirFileId); Site.Log.Add(LogEntryKind.Debug, "Start to verify the Query Directory response."); FileNamesInformation[] namesInformation = FsaUtility.UnmarshalFileInformationArray <FileNamesInformation>(outputBuffer); Site.Assert.AreEqual(3, namesInformation.Length, "The returned Buffer should contain two entries of FileNamesInformation."); Site.Assert.AreEqual(".", Encoding.Unicode.GetString(namesInformation[0].FileName), "FileName of the first entry should be \".\"."); Site.Assert.AreEqual("..", Encoding.Unicode.GetString(namesInformation[1].FileName), "FileName of the second entry should be \"..\"."); Site.Assert.AreEqual(fileName, Encoding.Unicode.GetString(namesInformation[2].FileName), $"FileName of the third entry should be {fileName}."); }
private void QueryFileIdGlobalTxDirectoryInformationTimestamp( byte[] informationBuffer, int expectedEntryCount, out long changeTime, out long creationTime, out long lastAccessTime, out long lastWriteTime) { string fileName = "."; FileIdGlobalTxDirectoryInformation[] directoryInformation = FsaUtility.UnmarshalFileInformationArray <FileIdGlobalTxDirectoryInformation>(informationBuffer); Site.Assert.AreEqual(expectedEntryCount, directoryInformation.Length, $"The buffer should contain {expectedEntryCount} entries of FileIdGlobalTxDirectoryInformation."); Site.Assert.AreEqual(fileName, Encoding.Unicode.GetString(directoryInformation[0].FileName), $"FileName should be {fileName}."); changeTime = FileTimeToLong(directoryInformation[0].FileCommonDirectoryInformation.ChangeTime); creationTime = FileTimeToLong(directoryInformation[0].FileCommonDirectoryInformation.CreationTime); lastAccessTime = FileTimeToLong(directoryInformation[0].FileCommonDirectoryInformation.LastAccessTime); lastWriteTime = FileTimeToLong(directoryInformation[0].FileCommonDirectoryInformation.LastWriteTime); }
public void BVT_QueryDirectory_FileIdBothDirectoryInformation() { byte[] outputBuffer; string fileName; FILEID dirFileId; PrepareAndQueryDirectory(FileInfoClass.FILE_ID_BOTH_DIR_INFORMATION, out outputBuffer, out fileName, out dirFileId); Site.Log.Add(LogEntryKind.Debug, "Start to verify the Query Directory response."); FileIdBothDirectoryInformation[] directoryInformation = FsaUtility.UnmarshalFileInformationArray <FileIdBothDirectoryInformation>(outputBuffer); Site.Assert.AreEqual(3, directoryInformation.Length, "The returned Buffer should contain 3 entries of FileBothDirectoryInformation."); VerifyFileInformation(directoryInformation[0], 1, ".", FileAttribute.DIRECTORY, 0, 0, 0, ""); if (this.fsaAdapter.Is64bitFileIdSupported) { Site.Assert.AreNotEqual(0, directoryInformation[0].FileId, "FileId of the entry should not be 0."); } else { //For file systems that do not support a 64 - bit file ID, this field MUST be set to 0, and MUST be ignored. Site.Assert.AreEqual(0, directoryInformation[0].FileId, "FileId of the entry should be 0 if the file system does not support a 64-bit file ID."); } VerifyFileInformation(directoryInformation[1], 2, "..", FileAttribute.DIRECTORY, 0, 0, 0, "", false); //The NTFS, ReFS, FAT, and exFAT file systems return a FileId value of 0 for the entry named ".." in directory query operations. if (this.fsaAdapter.FileSystem == FileSystem.NTFS || this.fsaAdapter.FileSystem == FileSystem.REFS || this.fsaAdapter.FileSystem == FileSystem.FAT || this.fsaAdapter.FileSystem == FileSystem.EXFAT) { Site.Assert.AreEqual(0, directoryInformation[1].FileId, "FileId of the entry should be 0."); } VerifyFileInformation(directoryInformation[2], 3, fileName, FileAttribute.ARCHIVE, BytesToWrite, this.fsaAdapter.ClusterSizeInKB * 1024, 0, GetShortName(fileName)); if (this.fsaAdapter.Is64bitFileIdSupported) { Site.Assert.AreNotEqual(0, directoryInformation[2].FileId, "FileId of the entry should not be 0."); } else { //For file systems that do not support a 64 - bit file ID, this field MUST be set to 0, and MUST be ignored. Site.Assert.AreEqual(0, directoryInformation[2].FileId, "FileId of the entry should be 0 if the file system does not support a 64-bit file ID."); } }
public void BVT_QueryDirectoryBySearchPattern <T>( T[] FileInformation, FileInfoClass FileInformationClass, List <string> FileNames, string WildCard, int ExpectedFilesReturnedLength ) where T : struct { byte[] outputBuffer; int filesCount; // Count files returned from the query, that exist in the FileNames list outputBuffer = QueryByWildCardAndFileInfoClass(WildCard, FileInformationClass, FileNames); FileInformation = FsaUtility.UnmarshalFileInformationArray <T>(outputBuffer); dynamic dynamicFileInformationObject = FileInformation; filesCount = FileNames.Intersect(GetListFileInformation <T>(FileInformation)).ToList().Count(); Site.Assert.AreEqual(ExpectedFilesReturnedLength, FileInformation.Length, $"The returned Buffer should contain {ExpectedFilesReturnedLength} entries of FileInformation."); Site.Assert.AreEqual(ExpectedFilesReturnedLength, filesCount, $"Number of files returned should match the number of files that match the pattern: {ExpectedFilesReturnedLength}."); }
public void QuotaInfo_Set_QuotaInformation_IsQuotaInfoSupported() { BaseTestSite.Log.Add(LogEntryKind.TestStep, "Test case steps:"); MessageStatus status; //Step 1: Open Quota file BaseTestSite.Log.Add(LogEntryKind.TestStep, "1. Open Quota file " + this.fsaAdapter.QuotaFile); status = this.fsaAdapter.CreateFile( this.fsaAdapter.QuotaFile, FileAttribute.NORMAL, CreateOptions.SYNCHRONOUS_IO_NONALERT, FileAccess.FILE_READ_DATA | FileAccess.FILE_WRITE_DATA | FileAccess.FILE_READ_ATTRIBUTES | FileAccess.FILE_WRITE_ATTRIBUTES | FileAccess.SYNCHRONIZE, ShareAccess.FILE_SHARE_READ | ShareAccess.FILE_SHARE_WRITE, CreateDisposition.OPEN); if (this.fsaAdapter.IsQuotaSupported == false) { this.fsaAdapter.AssertAreEqual(this.Manager, true, (status == MessageStatus.OBJECT_PATH_NOT_FOUND || status == MessageStatus.OBJECT_NAME_NOT_FOUND), "Quota file is not supported and expected to fail."); return; } //Step 2: Query Quota Information long byteCount; byte[] outputBuffer; BaseTestSite.Log.Add(LogEntryKind.TestStep, "2. Query Quota Information."); if (this.fsaAdapter.Transport == Transport.SMB) { SMB_QUERY_QUOTA_INFO smbQueryQuotaInfo = new SMB_QUERY_QUOTA_INFO(); smbQueryQuotaInfo.ReturnSingleEntry = 0; smbQueryQuotaInfo.RestartScan = 1; smbQueryQuotaInfo.SidListLength = 0; smbQueryQuotaInfo.StartSidLength = 0; smbQueryQuotaInfo.StartSidOffset = 0; status = this.fsaAdapter.QueryFileQuotaInformation(smbQueryQuotaInfo, 2048, out byteCount, out outputBuffer); } else { SMB2_QUERY_QUOTA_INFO smb2QueryQuotaInfo = new SMB2_QUERY_QUOTA_INFO(); smb2QueryQuotaInfo.ReturnSingle = 0; smb2QueryQuotaInfo.RestartScan = 1; smb2QueryQuotaInfo.Reserved = 0; smb2QueryQuotaInfo.SidListLength = 0; smb2QueryQuotaInfo.StartSidLength = 0; smb2QueryQuotaInfo.StartSidOffset = 0; status = this.fsaAdapter.QueryFileQuotaInformation(smb2QueryQuotaInfo, 2048, out byteCount, out outputBuffer); } //Step 3: Set Quota Information FILE_QUOTA_INFORMATION[] fileQuotaInformationEntries = FsaUtility.UnmarshalFileInformationArray <FILE_QUOTA_INFORMATION>(outputBuffer); if (fileQuotaInformationEntries.Length > 0) { FILE_QUOTA_INFORMATION quotaEntry = fileQuotaInformationEntries[0]; FILE_QUOTA_INFORMATION fileQuotaInfo = new FILE_QUOTA_INFORMATION(); fileQuotaInfo.NextEntryOffset = 0; fileQuotaInfo.SidLength = (uint)quotaEntry.Sid.Length; fileQuotaInfo.ChangeTime = new _FILETIME(); fileQuotaInfo.QuotaUsed = 0; fileQuotaInfo.QuotaThreshold = 1024 * 1024; //Set warning Level 1MB fileQuotaInfo.QuotaLimit = -1; fileQuotaInfo.Sid = quotaEntry.Sid; BaseTestSite.Log.Add(LogEntryKind.TestStep, "3. Set Quota Information."); status = this.fsaAdapter.SetFileQuotaInformation(fileQuotaInfo); //Step 4: Verify test result BaseTestSite.Log.Add(LogEntryKind.TestStep, "4. Verify returned NTStatus code."); this.fsaAdapter.AssertAreEqual(this.Manager, MessageStatus.SUCCESS, status, "Quota is supported, status set to STATUS_SUCCESS."); } }