Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/instructions/testing.instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ src/Microsoft.Data.SqlClient/tests/
├── UnitTests/ # Unit tests with minimal dependencies
└── tools/
└── Microsoft.Data.SqlClient.TestUtilities/
├── config.default.json # Template configuration
└── config.json # Local test configuration (git-ignored)
├── config.default.jsonc # Template configuration
└── config.jsonc # Local test configuration (git-ignored)
```

## Test Categories
Expand All @@ -34,14 +34,14 @@ src/Microsoft.Data.SqlClient/tests/

### Manual Tests (`ManualTests/`)
- Full integration tests with SQL Server
- Require `config.json` setup
- Require `config.jsonc` setup
- Test real database operations
- Include Always Encrypted, Entra ID tests

## Test Configuration

### Setting Up `config.json`
Copy `config.default.json` to `config.json` and configure:
### Setting Up `config.jsonc`
Copy `config.default.jsonc` to `config.jsonc` and configure:

```json
Comment thread
benrr101 marked this conversation as resolved.
{
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,7 @@ MigrationBackup/

# Config Json file
**/config.json
**/config.jsonc

# Generated Milestone PR metadata files
.milestone-prs/
Expand Down
18 changes: 9 additions & 9 deletions TESTGUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,22 +195,22 @@ conditional tests are skipped.
## Manual Test Configuration

Edit the source configuration file at `src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/
config.json`. The test utilities project copies that file to the test output directory, where the manual tests load it
config.jsonc`. The test utilities project copies that file to the test output directory, where the manual tests load it
by default.
Comment thread
benrr101 marked this conversation as resolved.
Comment thread
benrr101 marked this conversation as resolved.

The template file is:

[src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json](src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json)
[src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.jsonc](src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.jsonc)

`config.json` is git-ignored. If it does not exist, the test utilities project copies `config.default.json` to
`config.json` before compile. You can also create it manually:
`config.jsonc` is git-ignored. If it does not exist, the test utilities project copies `config.default.jsonc` to
`config.jsonc` before compile. You can also create it manually:

```bash
cp src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json \
src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.json
cp src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.jsonc \
src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.jsonc
```

Update `config.json` for your environment before running manual tests. The most important values for a basic run are `TCPConnectionString` and `NPConnectionString`.
Update `config.jsonc` for your environment before running manual tests. The most important values for a basic run are `TCPConnectionString` and `NPConnectionString`.

```jsonc
{
Expand All @@ -233,13 +233,13 @@ For SQL Server in a Linux container, WSL, or another host where SQL authenticati
You can override the config file path with the `MDS_TEST_CONFIG` environment variable:

```bash
MDS_TEST_CONFIG=/path/to/config.json dotnet build -t:TestSqlClientManual -p:TestSet=2
MDS_TEST_CONFIG=/path/to/config.jsonc dotnet build -t:TestSqlClientManual -p:TestSet=2
```
Comment thread
benrr101 marked this conversation as resolved.
Comment thread
benrr101 marked this conversation as resolved.

On PowerShell:

```powershell
$env:MDS_TEST_CONFIG = "C:\path\to\config.json"
$env:MDS_TEST_CONFIG = "C:\path\to\config.jsonc"
dotnet build -t:TestSqlClientManual -p:TestSet=2
Comment thread
benrr101 marked this conversation as resolved.
```
Comment thread
benrr101 marked this conversation as resolved.

Expand Down
5 changes: 1 addition & 4 deletions eng/pipelines/common/templates/jobs/ci-run-tests-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ parameters:
# template expansion.
#
# EnclaveEnabled
# IsAzureSynapse
# IsDNSCachingSupportedCR
# IsDNSCachingSupportedTR
# ManagedIdentitySupported
Expand Down Expand Up @@ -236,7 +235,7 @@ jobs:
referenceType: Project

- ${{ if ne(parameters.configProperties, '{}') }}:
- template: /eng/pipelines/common/templates/steps/update-config-file-step.yml@self # update config.json file
- template: /eng/pipelines/common/templates/steps/update-config-file-step.yml@self # update config.jsonc file
parameters:
debug: ${{ parameters.debug }}
saPassword: ${{ parameters.saPassword }}
Expand Down Expand Up @@ -293,8 +292,6 @@ jobs:
IsDNSCachingSupportedCR: ${{ eq(parameters.configProperties.IsDNSCachingSupportedCR, 'true') }}
${{ if parameters.configProperties.IsDNSCachingSupportedTR }}:
IsDNSCachingSupportedTR: ${{ eq(parameters.configProperties.IsDNSCachingSupportedTR, 'true') }}
${{ if parameters.configProperties.IsAzureSynapse }}:
IsAzureSynapse: ${{ eq(parameters.configProperties.IsAzureSynapse, 'true') }}
${{ if parameters.configProperties.ManagedIdentitySupported }}:
ManagedIdentitySupported: ${{ eq(parameters.configProperties.ManagedIdentitySupported, 'true') }}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,6 @@ parameters:
type: boolean
default: false

- name: IsAzureSynapse
type: boolean
default: false

- name: ManagedIdentitySupported
type: boolean
default: true
Expand All @@ -151,9 +147,9 @@ steps:
Write-Host "##vso[task.setvariable variable=Password;isSecret=true]$password"
displayName: Set Connection String Password

# All properties should be added here, and this template should be used for any manipulation of the config.json file.
# All properties should be added here, and this template should be used for any manipulation of the config.jsonc file.
- pwsh: |
$jdata = Get-Content -Raw "config.default.json" | ConvertFrom-Json
$jdata = Get-Content -Raw "config.default.jsonc" | ConvertFrom-Json
Comment thread
benrr101 marked this conversation as resolved.
Comment thread
benrr101 marked this conversation as resolved.
foreach ($p in $jdata)
{
$p.TCPConnectionString="${{parameters.TCPConnectionString }}"
Expand Down Expand Up @@ -188,8 +184,6 @@ steps:

$p.DNSCachingConnString="${{parameters.DNSCachingConnString }}"

$p.SupportsFileStream="${{parameters.SupportsFileStream }}"

$p.LocalDbAppName="${{parameters.LocalDbAppName }}"

$p.TCPConnectionStringAASSGX="${{parameters.TCPConnectionStringAASSGX }}"
Expand All @@ -201,20 +195,19 @@ steps:
$p.UseManagedSNIOnWindows=[System.Convert]::ToBoolean("${{parameters.UseManagedSNIOnWindows }}")
$p.SupportsIntegratedSecurity=[System.Convert]::ToBoolean("${{parameters.SupportsIntegratedSecurity }}")
$p.ManagedIdentitySupported=[System.Convert]::ToBoolean("${{parameters.ManagedIdentitySupported }}")
$p.IsAzureSynapse=[System.Convert]::ToBoolean("${{parameters.IsAzureSynapse }}")
$p.IsDNSCachingSupportedTR=[System.Convert]::ToBoolean("${{parameters.IsDNSCachingSupportedTR }}")
$p.IsDNSCachingSupportedCR=[System.Convert]::ToBoolean("${{parameters.IsDNSCachingSupportedCR }}")
$p.TracingEnabled=[System.Convert]::ToBoolean("${{parameters.TracingEnabled }}")
$p.EnclaveEnabled=[System.Convert]::ToBoolean("${{parameters.EnclaveEnabled }}")
$p.WorkloadIdentityFederationServiceConnectionId="${{parameters.WorkloadIdentityFederationServiceConnectionId }}"
}
$jdata | ConvertTo-Json | Set-Content "config.json"
$jdata | ConvertTo-Json | Set-Content "config.jsonc"
workingDirectory: src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities
displayName: 'Update config.json'
displayName: 'Update config.jsonc'

- ${{ if eq(parameters.debug, true) }}:
- pwsh: |
$jdata = Get-Content -Raw "config.json" | ConvertFrom-Json
$jdata = Get-Content -Raw "config.jsonc" | ConvertFrom-Json
foreach ($p in $jdata)
{
foreach ($prop in $p.PSObject.Properties)
Expand All @@ -223,4 +216,4 @@ steps:
}
}
workingDirectory: src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities
displayName: '[Debug] Emit config.json'
displayName: '[Debug] Emit config.jsonc'
2 changes: 1 addition & 1 deletion eng/pipelines/dotnet-sqlclient-ci-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ stages:
useManagedSNI: ${{parameters.useManagedSNI }}
configSqlFor: local
operatingSystem: Windows
# config.json properties
# config.jsonc properties
configProperties:
TCPConnectionString: $(SQL_TCP_CONN_STRING)
NPConnectionString: $(SQL_NP_CONN_STRING)
Expand Down
2 changes: 1 addition & 1 deletion eng/pipelines/jobs/test-azure-package-ci-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ jobs:
debug: ${{ parameters.debug }}
saPassword: ${{ parameters.saPassword }}

# The config.json file has many options, but only some of them are
# The config.jsonc file has many options, but only some of them are
# used by the Azure package tests. We only specify the ones that are
# necessary here.

Expand Down
12 changes: 6 additions & 6 deletions eng/pipelines/kerberos/sqlclient-kerberos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,16 +137,16 @@ stages:
# requires compile-time parameters.
- pwsh: |
$managedSni = [System.Convert]::ToBoolean($env:MANAGED_SNI)
$jdata = Get-Content -Raw "config.default.json" | ConvertFrom-Json
$jdata = Get-Content -Raw "config.default.jsonc" | ConvertFrom-Json
foreach ($p in $jdata) {
$p.TCPConnectionString = $env:REMOTE_TCP_CONN_STRING
$p.NPConnectionString = $env:REMOTE_NP_CONN_STRING
$p.SupportsIntegratedSecurity = $true
$p.UseManagedSNIOnWindows = $managedSni
}
$jdata | ConvertTo-Json | Set-Content "config.json"
$jdata | ConvertTo-Json | Set-Content "config.jsonc"
Comment thread
benrr101 marked this conversation as resolved.
Comment thread
benrr101 marked this conversation as resolved.
workingDirectory: src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities
displayName: Update test config.json
displayName: Update test config.jsonc
env:
REMOTE_TCP_CONN_STRING: $(REMOTE_TCP_CONN_STRING)
REMOTE_NP_CONN_STRING: $(REMOTE_NP_CONN_STRING)
Expand Down Expand Up @@ -226,17 +226,17 @@ stages:

# --- Update test configuration (with Kerberos credentials) ---
- pwsh: |
$jdata = Get-Content -Raw "config.default.json" | ConvertFrom-Json
$jdata = Get-Content -Raw "config.default.jsonc" | ConvertFrom-Json
foreach ($p in $jdata) {
$p.TCPConnectionString = $env:REMOTE_TCP_CONN_STRING
$p.NPConnectionString = $env:REMOTE_NP_CONN_STRING
$p.SupportsIntegratedSecurity = $true
}
$jdata | Add-Member -NotePropertyName "KerberosDomainUser" -NotePropertyValue $env:KERBEROS_DOMAIN_USER -Force
$jdata | Add-Member -NotePropertyName "KerberosDomainPassword" -NotePropertyValue $env:KERBEROS_DOMAIN_PASSWORD -Force
$jdata | ConvertTo-Json | Set-Content "config.json"
$jdata | ConvertTo-Json | Set-Content "config.jsonc"
workingDirectory: src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities
displayName: Update test config.json (Kerberos)
displayName: Update test config.jsonc (Kerberos)
env:
REMOTE_TCP_CONN_STRING: $(REMOTE_TCP_CONN_STRING)
REMOTE_NP_CONN_STRING: $(REMOTE_NP_CONN_STRING)
Expand Down
6 changes: 3 additions & 3 deletions eng/pipelines/stress/stress-tests-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ jobs:
"@

# Write the JSON content to the config file.
$content | Out-File -FilePath "config.json"
$content | Out-File -FilePath "config.jsonc"

# Authenticate with NuGet feeds so that upstream packages (e.g. runtime host packs) can be
# fetched through the ADO Artifacts feed. This is required on hosted pool agents (macOS)
Expand Down Expand Up @@ -208,7 +208,7 @@ jobs:
inputs:
command: run
projects: $(project)
arguments: $(runArguments) --no-build -f ${{ runtime }} -e STRESS_CONFIG_FILE=config.json -- $(testArguments)
arguments: $(runArguments) --no-build -f ${{ runtime }} -e STRESS_CONFIG_FILE=config.jsonc -- $(testArguments)

# Run the stress tests for each .NET Framework runtime.
- ${{ each runtime in parameters.netFrameworkTestRuntimes }}:
Expand All @@ -219,4 +219,4 @@ jobs:
inputs:
command: run
projects: $(project)
arguments: $(runArguments) --no-build -f ${{ runtime }} -e STRESS_CONFIG_FILE=config.json -- $(testArguments)
arguments: $(runArguments) --no-build -f ${{ runtime }} -e STRESS_CONFIG_FILE=config.jsonc -- $(testArguments)
16 changes: 8 additions & 8 deletions src/Microsoft.Data.SqlClient.Extensions/Azure/test/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ namespace Microsoft.Data.SqlClient.Extensions.Azure.Test;

/// <summary>
/// This class reads configuration information from environment variables and
/// the config.json file for use by our tests.
/// the config.jsonc file for use by our tests.
///
/// Environment variables take precedence over config.json settings. Note that
/// Environment variables take precedence over config.jsonc settings. Note that
/// variable names are case-sensitive on non-Windows platforms.
///
/// The following variables are supported:
Expand All @@ -30,7 +30,7 @@ namespace Microsoft.Data.SqlClient.Extensions.Azure.Test;
/// TEST_MDS_CONFIG:
/// The path to the config file to use instead of the default. If not
/// supplied, the config file is assumed to be located next to the test
/// assembly and is named config.json.
/// assembly and is named config.jsonc.
/// </summary>
internal static class Config
{
Expand Down Expand Up @@ -86,13 +86,13 @@ internal static bool IsAzureSqlServer() =>
/// </summary>
static Config()
{
// Read from the config.json file. If the TEST_MDS_CONFIG environment
// Read from the config.jsonc file. If the TEST_MDS_CONFIG environment
// variable is set, use it. Otherwise, assume the config file is in the
// working directory and named config.json.
// working directory and named config.jsonc.
string configPath = GetEnvVar("TEST_MDS_CONFIG");
if (configPath.IsEmpty())
{
configPath = "config.json";
configPath = "config.jsonc";
}

try
Expand All @@ -109,10 +109,10 @@ static Config()
JsonElement root = doc.RootElement;
// See the sample config file for information about these settings:
//
// src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json
// src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.jsonc
//
// The sample file is copied to the build output directory as
// config.json by the TestUtilities project file.
// config.jsonc by the TestUtilities project file.
//
IntegratedSecuritySupported = GetBool(root, "SupportsIntegratedSecurity");
ManagedIdentitySupported = GetBool(root, "ManagedIdentitySupported");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@
<PackageReference Include="Microsoft.DotNet.XUnitExtensions" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.SqlServer.Types" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="System.Configuration.ConfigurationManager" />
<PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" />
<PackageReference Include="System.Security.Cryptography.Pkcs" />
Expand Down Expand Up @@ -389,6 +390,7 @@
<PackageReference Include="Microsoft.DotNet.XUnitExtensions" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.SqlServer.Types" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="System.Configuration.ConfigurationManager" />
<PackageReference Include="System.Security.Cryptography.Pkcs" />
<PackageReference Include="System.ServiceProcess.ServiceController" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public static class SqlDbManager
private const string DB_Northwind = "Northwind";
private const string DB_Master = "master";
private const string NorthWindScriptPath = @"../../../../../tools/testsql/createNorthwindDb.sql";
private const string ConfigPath = @"../Microsoft.Data.SqlClient.TestUtilities/config.json";
private const string ConfigPath = @"../Microsoft.Data.SqlClient.TestUtilities/config.jsonc";

private const string TCPConnectionString = "TCPConnectionString";
private const string NPConnectionString = "NPConnectionString";
Expand Down Expand Up @@ -68,7 +68,7 @@ public static void Run(string[] args)
CreateDatabase(dbName, context);
Console.WriteLine($"Database [{dbName}] created successfully in {builder.DataSource}");
}
// Update Config.json accordingly
// Update config.jsonc accordingly
builder.InitialCatalog = dbName;
UpdateConfig(activeConnString.Key, builder);
}
Expand Down Expand Up @@ -96,7 +96,7 @@ public static void Run(string[] args)
}
if (args[0] == "CreateDatabase")
{
// Update config.json with Initial Catalog = <dbName> for "Active Connection Strings"
// Update config.jsonc with Initial Catalog = <dbName> for "Active Connection Strings"
Config.UpdateConfig(s_configJson, ConfigPath);
}
}
Expand Down
Loading
Loading