<< All versions

Skill v1.0.0

currentTrusted Publisher100/100
microsoft/windowsprotocoltestsuites/file-server
──Details
PublishedOctober 1, 2026 at 04:29 PM
Content Hashsha256:d14c2301dd0ba48a...
Git SHA
──Files
Files (1 file, 16.1 KB)
SKILL.md16.1 KBactive
SKILL.md · 354 lines · 16.1 KB

version: "1.0.0" name: file-server description: ALWAYS LOAD THIS SKILL when working with FileServer, SMB, SMB2, SMB3, CIFS, file sharing, MS-SMB2, MS-FSCC, MS-FSA, MS-DFSC, MS-FSRVP, MS-RSVD, MS-SQOS, or any file server protocol test implementation. This skill assists with writing FileServer protocol test cases, implementing new test scenarios, discovering reusable libraries, adapters, and transport implementations (TCP, QUIC, NetBIOS, RDMA). CRITICAL--Before implementing any test, first classify the domain by analyzing concepts (File, Fs, FileSystemAttributes = FSA; NEGOTIATE, SESSION_SETUP, SMB commands = SMB2). Test scenarios from MS-SMB2 that involve File/Fs concepts belong to the FSA test suite. Provides test case patterns, storage locations, ProtoSDK usage, and test execution guidance. Protocols under FileServer/src include Auth, Common, DFSC, FSA, FSAModel, FSRVP, RSVD, ServerFailover, SMB2, SMB2Model, and SQOS. license: MIT metadata: author: Microsoft version: "1.2"


File Server Test Suite Skill

MANDATORY WORKFLOW (Follow In Order)

You MUST complete these steps IN ORDER. Do not skip ahead.

  1. ☐ CLASSIFY DOMAIN FIRST - Analyze concepts in the scenario (see Test Scenario Domain Classification)
  2. ☐ LOAD THE CORRECT REFERENCE - Based on domain classification
  3. ☐ THEN search for existing tests - Only in the correct domain folder
  4. ☐ Implement or modify - Using the domain-specific patterns
CRITICAL STOP: Do NOT use grep_search or file_search until Step 1 is complete.
MS-SMB2 Document ≠ SMB2 Domain: If the user mentions "MS-SMB2 section X.X.X", DO NOT assume SMB2 domain.
First extract the CONCEPTS from the scenario text. If you see File*, Fs*, FileSystemAttributes,
FileFsAttributeInformation, or any MS-FSCC structure names → it's FSA domain, regardless of the
MS-SMB2 section number.

Common Mistakes to Avoid

MistakeWhy It's WrongCorrect Approach
Searching for tests before classifying domaingrep may find tests in wrong domain (e.g., SMB2 duplicates)Always classify domain FIRST based on concepts
Assuming MS-SMB2 section = SMB2 domainMS-SMB2 often references MS-FSCC structures which are FSA domainCheck the CONCEPTS, not the document source
Finding a test and assuming it's correct locationDuplicate tests may exist in wrong domainsVerify test location matches domain classification

This skill helps you write FileServer protocol test cases by:

  1. Classifying the domain - Determine FSA vs SMB2 vs other based on concepts
  2. Discovering reusable components - Libraries, adapters, and transports you MUST reuse
  3. Providing test patterns - How to structure and where to store test cases
  4. Guiding test execution - Environment configuration and execution methods

Protocol-Specific References

For detailed guidance on specific protocols, load the appropriate reference based on domain classification (see Section 4):

ProtocolReferenceUse When (Domain Indicators)
FSAreferences/fsa.mdConcepts: File*, Fs*, FileSystemAttributes, FileFsAttributeInformation, FileBasicInformation, file system queries, MS-FSCC structures
SMB2/SMB3references/smb2.mdConcepts: NEGOTIATE, SESSION_SETUP, TREE_CONNECT, CREATE, CLOSE, SMB commands, dialects, signing, encryption, compounding
FSA Modelreferences/fsamodel.mdWriting FSA model-based/state-machine tests
DFSCreferences/dfsc.mdDFS, referral, namespace concepts
FSRVPreferences/fsrvp.mdVSS, shadow copy, snapshot, backup concepts
RSVDreferences/rsvd.mdVirtual disk, VHD, VHDX, shared virtual disk concepts
SQOSreferences/sqos.mdStorage QoS, policy, bandwidth, IOPS concepts
Authreferences/auth.mdAuthentication, Kerberos, NTLM, credentials concepts
Failoverreferences/serverfailover.mdFailover, cluster, witness, persistent handle concepts
Commonreferences/common.mdUnderstanding shared infrastructure

Test Scenario Domain Classification (CRITICAL - READ FIRST)

Before implementing any test scenario, you MUST determine its domain based on the CONCEPTS involved, NOT the document section it came from.

CRITICAL STOP: Do NOT use grep_search or file_search until Step 1 is complete.
Finding tests via grep does not validate their correct location.

Step 1: Identify the Domain by Concepts

Analyze the test scenario for these keyword patterns:

If scenario mentions...DomainReference to Load
File*, Fs*, FileSystemAttributes, FileFsAttributeInformation, FileBasicInformation, FileStandardInformation, FileInformation*, FsInfo*, FsControl*, file system queries, file attributes, directory informationFSAreferences/fsa.md
NEGOTIATE, SESSION_SETUP, TREE_CONNECT, CREATE, CLOSE, READ, WRITE, IOCTL, LOCK, CANCEL, SMB commands, dialects, signing, encryption, compounding, multichannel, durable handles, leasing, oplocksSMB2references/smb2.md
DFS, referral, namespace, domain-based DFS, standalone DFSDFSCreferences/dfsc.md
VSS, shadow copy, snapshot, backupFSRVPreferences/fsrvp.md
Virtual disk, VHD, VHDX, shared virtual diskRSVDreferences/rsvd.md
Storage QoS, policy, bandwidth, IOPSSQOSreferences/sqos.md
Authentication, Kerberos, NTLM, credentialsAuthreferences/auth.md
Failover, cluster, witness, persistent handlesFailoverreferences/serverfailover.md

Step 2: Understand the Protocol Document vs Test Domain Relationship

IMPORTANT: The MS-SMB2 document describes SMB2 server behavior, but many sections reference MS-FSCC (File System Control Codes) structures. When the test scenario involves:

  • File system information classes (e.g., FileFsAttributeInformation, FileFsVolumeInformation) → FSA domain
  • File information classes (e.g., FileBasicInformation, FileStandardInformation) → FSA domain
  • FSCTL operations (e.g., FSCTL_GET_INTEGRITY_INFORMATION) → FSA domain
  • SMB2 command behavior (e.g., NEGOTIATE, SESSION_SETUP, compound requests) → SMB2 domain

Example: MS-SMB2 section 3.3.5.20.2 describes clearing bits in FileFsAttributeInformation. Even though it's in the SMB2 spec, the concepts (FileSystemAttributes, FileFsAttributeInformation) are FSA domain because they test file system behavior exposed through SMB2.

Step 3: Check Test Location Based on Domain

DomainTest LocationBase Class
FSATestSuites/FileServer/src/FSA/TestSuite/PtfTestClassBase
SMB2TestSuites/FileServer/src/SMB2/TestSuite/[Feature]/SMB2TestBase
DFSCTestSuites/FileServer/src/DFSC/TestSuite/DFSCTestBase
FSRVPTestSuites/FileServer/src/FSRVP/TestSuite/SMB2TestBase
RSVDTestSuites/FileServer/src/RSVD/TestSuite/RSVDTestBase
SQOSTestSuites/FileServer/src/SQOS/TestSuite/SqosTestBase
AuthTestSuites/FileServer/src/Auth/TestSuite/AuthenticationTestBase / AuthorizationTestBase
FailoverTestSuites/FileServer/src/ServerFailover/TestSuite/ServerFailoverTestBase

Quick Domain Classification Examples

Scenario DescriptionKey ConceptsDomain
"Clear FILE_SUPPORTS_USN_JOURNAL bit in FileFsAttributeInformation"File*, Fs*, attributesFSA
"Server SHOULD clear FileSystemAttributes bits"FileSystemAttributes, File*FSA
"Query FileBasicInformation and verify timestamps"FileBasicInformation, File*FSA
"NEGOTIATE request with signing capability"NEGOTIATE, SMB commandSMB2
"Durable handle reconnect after disconnect"Durable handle, SMB featureSMB2
"Compound CREATE and CLOSE request"Compounding, SMB commandsSMB2

Pre-Implementation Checklist

Before writing or modifying any test, verify:

  • [ ] I identified the domain based on concepts (File, Fs = FSA; NEGOTIATE, SESSION_SETUP = SMB2)
  • [ ] I did NOT assume the domain from the MS-SMB2 document section number
  • [ ] I searched for existing tests only in the classified domain folder
  • [ ] The test location matches the domain classification table above

1. Reusable Components (MUST REUSE)

ProtoSDK Libraries

Location: ProtoSDK/ - Protocol implementations you MUST reuse.

LibraryPathPurpose
MS-SMB2ProtoSDK/MS-SMB2/SMB2/SMB3 client/server
MS-DFSCProtoSDK/MS-DFSC/DFS referral protocol
MS-FSCCProtoSDK/MS-FSCC/File system control codes
MS-FSRVPProtoSDK/MS-FSRVP/File Server VSS Protocol
MS-RSVDProtoSDK/MS-RSVD/Remote Shared Virtual Disk
MS-SQOSProtoSDK/MS-SQOS/Storage QoS Protocol
TransportStackProtoSDK/TransportStack/TCP, NetBIOS transport
SspiLibProtoSDK/SspiLib/Kerberos, NTLM security

Transport Types

Defined in: ProtoSDK/MS-SMB2/CustomTypes.cs

csharp
public enum Smb2TransportType
{
Tcp, // TCP transport (port 445)
NetBios, // NetBIOS transport (port 139)
Rdma, // RDMA transport (MS-SMBD)
Quic, // QUIC transport (port 443)
}

Test Adapters

Location: TestSuites/FileServer/src/Common/Adapter/

AdapterPurpose
Smb2FunctionalClientPrimary SMB2 client - USE THIS for all SMB2 operations
TestConfigBaseConfiguration access (server, credentials, features)
ISutProtocolControlAdapterSUT file/directory operations

Test Base Classes

DomainBase ClassNotes
FSAPtfTestClassBaseAll FSA test classes use public partial class XxxTestCases : PtfTestClassBase
SMB2/SMB3SMB2TestBasepublic class Xxx : SMB2TestBase
DFSCDFSCTestBasepublic class Xxx : DFSCTestBase
FSRVPSMB2TestBaseFSRVP tests inherit from SMB2TestBase (e.g., VSSOperateShadowCopySet : SMB2TestBase)
RSVDRSVDTestBasepublic class Xxx : RSVDTestBase
SQOSSqosTestBaseSqosTestBase : CommonTestBase
AuthAuthenticationTestBase or AuthorizationTestBaseBoth inherit from CommonTestBase
FailoverServerFailoverTestBaseServerFailoverTestBase : SMB2TestBase

2. Test Case Patterns

Where to Store Test Cases

ProtocolDirectory
SMB2TestSuites/FileServer/src/SMB2/TestSuite/[Feature]/
FSATestSuites/FileServer/src/FSA/TestSuite/
DFSCTestSuites/FileServer/src/DFSC/TestSuite/
FSRVPTestSuites/FileServer/src/FSRVP/TestSuite/
RSVDTestSuites/FileServer/src/RSVD/TestSuite/
SQOSTestSuites/FileServer/src/SQOS/TestSuite/
AuthTestSuites/FileServer/src/Auth/TestSuite/

Minimal Test Template

csharp
using System;
using Microsoft.Protocols.TestSuites.FileSharing.Common.Adapter;
using Microsoft.Protocols.TestSuites.FileSharing.Common.TestSuite;
using Microsoft.Protocols.TestSuites.FileSharing.SMB2.Adapter;
using Microsoft.Protocols.TestTools;
using Microsoft.Protocols.TestTools.StackSdk.FileAccessService.Smb2;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.Protocols.TestSuites.FileSharing.SMB2.TestSuite
{
[TestClass]
public class YourFeatureTests : SMB2TestBase
{
private Smb2FunctionalClient client;
[ClassInitialize()]
public static void ClassInitialize(TestContext testContext)
{
TestClassBase.Initialize(testContext);
}
[ClassCleanup()]
public static void ClassCleanup()
{
TestClassBase.Cleanup();
}
protected override void TestInitialize()
{
base.TestInitialize();
}
protected override void TestCleanup()
{
if (client != null)
{
try { client.Disconnect(); }
catch (Exception ex)
{
BaseTestSite.Log.Add(LogEntryKind.Debug,
"Disconnect exception: {0}", ex.ToString());
}
}
base.TestCleanup();
}
[TestMethod]
[TestCategory(TestCategories.Bvt)]
[TestCategory(TestCategories.Smb311)]
[Description("Test description.")]
public void BVT_Feature_Scenario()
{
// Use Smb2FunctionalClient for all SMB2 operations
client = new Smb2FunctionalClient(TestConfig.Timeout, TestConfig, BaseTestSite);
client.ConnectToServer(TestConfig.UnderlyingTransport,
TestConfig.SutComputerName, TestConfig.SutIPAddress);
// See protocol-specific reference for detailed patterns
}
}
}

Test Method Naming

Format: [Category]_[Feature]_[Scenario]

Examples: BVT_Negotiate_SigningEnabled, BVT_Encryption_EncryptedShare

Required Test Categories

csharp
using Microsoft.Protocols.TestSuites.FileSharing.Common.Adapter;
// Test type (pick one)
[TestCategory(TestCategories.Bvt)] // Build verification
[TestCategory(TestCategories.Model)] // Model-based
// SMB dialect (for SMB2 tests)
[TestCategory(TestCategories.Smb2002)]
[TestCategory(TestCategories.Smb311)]
// Feature category
[TestCategory(TestCategories.Negotiate)]
[TestCategory(TestCategories.Encryption)]
// Environment (if required)
[TestCategory(TestCategories.DomainRequired)]

3. Test Execution

Configuration Files

FilePurpose
CommonTestSuite.deployment.ptfconfigEnvironment settings (server, credentials)
[Protocol]_ServerTestSuite.ptfconfigProtocol-specific settings

Key Settings in deployment.ptfconfig

xml
<Property name="UnderlyingTransport" value="Tcp"/> <!-- Tcp, NetBios, Quic -->
<Property name="SutComputerName" value="server.contoso.com"/>
<Property name="SutIPAddress" value="192.168.1.11"/>
<Property name="BasicFileShare" value="SMBBasic"/>
<Property name="MaxSmbVersionSupported" value="Smb311"/>

Running Tests

powershell
# From TestSuites/FileServer/src/Batch/
.\RunTestCasesByFilter.ps1 -Filter "TestCategory=BVT"
.\RunTestCasesByFilter.ps1 -Filter "TestCategory=BVT&TestCategory=Smb311"
# Dry run (list tests without running)
.\RunTestCasesByFilter.ps1 -Filter "TestCategory=BVT" -DryRun

Checking Prerequisites

csharp
using Microsoft.Protocols.TestTools.StackSdk.FileAccessService.Smb2;
// Check dialect
TestConfig.CheckDialect(DialectRevision.Smb311);
// Check feature (skips if unsupported)
BaseTestSite.Assume.IsTrue(TestConfig.IsEncryptionSupported,
"Test requires encryption support");

4. Decision Tree

Which reference should I load?

First, classify the domain using Step 1 above, then:

  1. FSA domain (File*, Fs*, file system concepts)? → Load references/fsa.md
  2. SMB2 domain (SMB commands, protocol features)? → Load references/smb2.md
  3. DFS referral tests? → Load references/dfsc.md
  4. VSS/shadow copy tests? → Load references/fsrvp.md
  5. Virtual disk tests? → Load references/rsvd.md
  6. Storage QoS tests? → Load references/sqos.md
  7. Authentication tests? → Load references/auth.md
  8. Failover tests? → Load references/serverfailover.md
  9. Understanding shared infrastructure? → Load references/common.md
All versions