public void BVT_FileLevelTrim()
        {
            uint   treeId;
            FILEID fileId;

            PrepareFileForTrimming(out treeId, out fileId);

            FSCTL_FILE_LEVEL_TRIM_RANGE fileLevelTrimRange;
            Random random = new Random();
            uint   offset = (uint)random.Next(0, TestConfig.WriteBufferLengthInKb * 1024);
            uint   length = (uint)random.Next(0, (int)(TestConfig.WriteBufferLengthInKb * 1024 - offset));

            fileLevelTrimRange.Offset = offset;
            fileLevelTrimRange.Length = length;

            FSCTL_FILE_LEVEL_TRIM_INPUT fileLevelTrimInput;

            fileLevelTrimInput.Key       = 0;
            fileLevelTrimInput.NumRanges = 1;
            fileLevelTrimInput.Ranges    = new FSCTL_FILE_LEVEL_TRIM_RANGE[] { fileLevelTrimRange };

            byte[] buffer = TypeMarshal.ToBytes <FSCTL_FILE_LEVEL_TRIM_INPUT>(fileLevelTrimInput);
            byte[] respOutput;
            status = client.FileLevelTrim(
                treeId,
                fileId,
                buffer,
                out respOutput,
                (header, response) => BaseTestSite.Assert.AreEqual(
                    true,
                    header.Status == Smb2Status.STATUS_SUCCESS || header.Status == Smb2Status.STATUS_NO_RANGES_PROCESSED,
                    // The operation was successful, but no range was processed.
                    "{0} should complete with STATUS_SUCCESS or STATUS_NO_RANGES_PROCESSED, actually server returns {1}.", header.Command, Smb2Status.GetStatusCode(header.Status)));

            if (status != Smb2Status.STATUS_NO_RANGES_PROCESSED && // Skip parsing the response when server returns STATUS_NO_RANGES_PROCESSED
                respOutput != null)    // Skip parsing the response if no output buffer is returned
            {
                FSCTL_FILE_LEVEL_TRIM_OUTPUT fileLevelTrimOutput = TypeMarshal.ToStruct <FSCTL_FILE_LEVEL_TRIM_OUTPUT>(respOutput);
                BaseTestSite.Log.Add(
                    LogEntryKind.Debug,
                    "Number of ranges that were processed: {0}", fileLevelTrimOutput.NumRangesProcessed);
            }
            else
            {
                BaseTestSite.Log.Add(LogEntryKind.Debug, "No range was processed during this operation.");
            }

            status = client.Close(treeId, fileId);

            status = client.TreeDisconnect(treeId);

            status = client.LogOff();
        }