Skip to content

Commit 16faadc

Browse files
Native SNI Improvements (#570)
1 parent 5cb2181 commit 16faadc

31 files changed

+986
-303
lines changed

BUILDGUIDE.md

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ This document provides all the necessary details to build the driver and run tes
55
## Visual Studio Pre-Requisites
66

77
This project should be ideally built with Visual Studio 2017+ for the best compatibility. Use either of the two environments with their required set of compoenents as mentioned below:
8-
- **Visual Studio 2017** with imported components: [VS17Components](/tools/vsconfig/VS17Components.vsconfig)
98
- **Visual Studio 2019** with imported components: [VS19Components](/tools/vsconfig/VS19Components.vsconfig)
109

1110
Once the environment is setup properly, execute the desired set of commands below from the _root_ folder to perform the respective operations:
@@ -115,6 +114,7 @@ Manual Tests require the below setup to run:
115114
|SupportsLocalDb | (Optional) Whether or not a LocalDb instance of SQL Server is installed on the machine running the tests. |`true` OR `false`|
116115
|SupportsIntegratedSecurity | (Optional) Whether or not the USER running tests has integrated security access to the target SQL Server.| `true` OR `false`|
117116
|SupportsFileStream | (Optional) Whether or not FileStream is enabled on SQL Server| `true` OR `false`|
117+
|UseManagedSNIOnWindows | (Optional) Enables testing with Managed SNI on Windows| `true` OR `false`|
118118

119119
Commands to run tests:
120120

@@ -140,7 +140,53 @@ Unix (`netcoreapp`):
140140

141141
## Run A Single Test
142142
```bash
143-
> dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Debug" /p:TestTargetOS="Windowsnetcoreapp" --no-build -v n --filter "FullyQualifiedName=Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted.CspProviderExt.TestKeysFromCertificatesCreatedWithMultipleCryptoProviders"
143+
> dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Windowsnetcoreapp" --no-build -v n --filter "FullyQualifiedName=Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted.CspProviderExt.TestKeysFromCertificatesCreatedWithMultipleCryptoProviders"
144+
```
145+
146+
## Testing with Custom ReferenceType
147+
148+
Tests can be built and run with custom "Reference Type" property that enables different styles of testing:
149+
150+
- "Project" => Build and run tests with Microsoft.Data.SqlClient as Project Reference
151+
- "Package" => Build and run tests with Microsoft.Data.SqlClient as Package Reference with configured "TestMicrosoftDataSqlClientVersion" in "Versions.props" file.
152+
- "NetStandard" => Build and run tests with Microsoft.Data.SqlClient as Project Reference via .NET Standard Library
153+
- "NetStandardPackage" => Build and run tests with Microsoft.Data.SqlClient as Package Reference via .NET Standard Library
154+
155+
> ************** IMPORTANT NOTE BEFORE PROCEEDING WITH "PACKAGE" AND "NETSTANDARDPACKAGE" REFERENCE TYPES ***************
156+
> CREATE A NUGET PACKAGE WITH BELOW COMMAND AND ADD TO LOCAL FOLDER + UPDATE NUGET CONFIG FILE TO READ FROM THAT LOCATION
157+
> ```
158+
> > msbuild /p:configuration=Release
159+
> ```
160+
161+
### Building Tests:
162+
163+
For .NET Core, all 4 reference types are supported:
164+
165+
```bash
166+
> msbuild /t:BuildTestsNetCore /p:ReferenceType=Project
167+
# Default setting uses Project Reference.
168+
169+
> msbuild /t:BuildTestsNetCore /p:ReferenceType=Package
170+
171+
> msbuild /t:BuildTestsNetCore /p:ReferenceType=NetStandard
172+
173+
> msbuild /t:BuildTestsNetCore /p:ReferenceType=NetStandardPackage
174+
```
175+
176+
For .NET Framework, below reference types are supported:
177+
178+
```bash
179+
> msbuild /t:BuildTestsNetCore /p:ReferenceType=Project
180+
# Default setting uses Project Reference.
181+
182+
> msbuild /t:BuildTestsNetCore /p:ReferenceType=Package
183+
```
184+
185+
### Running Tests:
186+
187+
Provide property to `dotnet test` commands for testing desired reference type.
188+
```
189+
dotnet test /p:ReferenceType=Project ...
144190
```
145191

146192
## Testing with Custom TargetFramework
@@ -214,4 +260,3 @@ There may be times where connection cannot be made to SQL Server, we found below
214260
<TargetsWindows>false</TargetsWindows>
215261
<TargetsUnix>true</TargetsUnix>
216262
```
217-
```

RunTests.cmd

Lines changed: 195 additions & 21 deletions
Large diffs are not rendered by default.

build.proj

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
<?xml version="1.0" encoding="utf-8"?>
2-
<Project ToolsVersion="Latest" DefaultTargets="BuildAllConfigurations"
3-
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<Project ToolsVersion="Latest" DefaultTargets="BuildAllConfigurations" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
43

54
<Import Project="src/Directory.Build.props" />
65
<Import Project="$(ToolsDir)targets\GenerateNugetPackage.targets" />
@@ -22,18 +21,20 @@
2221

2322
<!-- Populate all managed projects -->
2423
<ItemGroup>
25-
<NetFxDriver Include="**/netfx/**/Microsoft.Data.SqlClient*.csproj" Condition="'$(IsEnabledWindows)' == 'true'"/>
26-
<NetCoreDriver Include="**/netcore/**/Microsoft.Data.SqlClient*.csproj"/>
27-
<AKVProvider Include="**/add-ons/**/AzureKeyVaultProvider/*.csproj"/>
24+
<NetFxDriver Include="**/netfx/**/Microsoft.Data.SqlClient*.csproj" Condition="'$(IsEnabledWindows)' == 'true'" />
25+
<NetCoreDriver Include="**/netcore/**/Microsoft.Data.SqlClient*.csproj" />
26+
<AKVProvider Include="**/add-ons/**/AzureKeyVaultProvider/*.csproj" />
2827

28+
<FunctionalTests Include="**/NSLibrary/Microsoft.Data.SqlClient.NSLibrary.csproj" />
2929
<FunctionalTests Include="**/tools/TDS/TDS/TDS.csproj" />
3030
<FunctionalTests Include="**/tools/TDS/TDS.EndPoint/TDS.EndPoint.csproj" />
3131
<FunctionalTests Include="**/tools/TDS/TDS.Servers/TDS.Servers.csproj" />
32-
<FunctionalTests Include="**/tools/Microsoft.DotNet.XUnitExtensions/Microsoft.DotNet.XUnitExtensions.csproj" />
32+
<FunctionalTests Include="**/tools/Microsoft.DotNet.XUnitExtensions/Microsoft.DotNet.XUnitExtensions.csproj" />
3333
<FunctionalTests Include="**/tools/CoreFx.Private.TestUtilities/CoreFx.Private.TestUtilities.csproj" />
3434
<FunctionalTests Include="**/ManualTests/SQL/UdtTest/UDTs/Address/Address.csproj" />
3535
<FunctionalTests Include="**/Microsoft.Data.SqlClient.Tests.csproj" />
3636

37+
<ManualTests Include="**/NSLibrary/Microsoft.Data.SqlClient.NSLibrary.csproj" />
3738
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Address/Address.csproj" />
3839
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Circle/Circle.csproj" />
3940
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Shapes/Shapes.csproj" />
@@ -47,23 +48,29 @@
4748
<Target Name="Restore" DependsOnTargets="RestoreNetCore;RestoreNetFx" />
4849
<Target Name="BuildAll" DependsOnTargets="BuildNetFx;BuildNetCore" />
4950
<Target Name="BuildAllConfigurations" DependsOnTargets="Restore;BuildNetFx;BuildNetCoreAllOS;GenerateNugetPackage" />
50-
<Target Name="BuildTestsNetCore" DependsOnTargets="BuildAKVNetCore;BuildFunctionalTestsNetCore;BuildManualTestsNetCore" />
51-
<Target Name="BuildTestsNetFx" DependsOnTargets="BuildAKVNetFx;BuildFunctionalTestsNetFx;BuildManualTestsNetFx;" />
51+
<Target Name="BuildTestsNetCore" DependsOnTargets="RestoreTestsNetCore;BuildAKVNetCore;BuildFunctionalTestsNetCore;BuildManualTestsNetCore" />
52+
<Target Name="BuildTestsNetFx" DependsOnTargets="RestoreTestsNetFx;BuildAKVNetFx;BuildFunctionalTestsNetFx;BuildManualTestsNetFx;" />
5253

5354
<Target Name="RestoreNetCore">
5455
<MSBuild Projects="@(NetCoreDriver)" Targets="restore" Properties="TestTargetOS=$(TestOS)netcoreapp" />
56+
</Target>
57+
58+
<Target Name="RestoreTestsNetCore">
5559
<MSBuild Projects="@(ManualTests)" Targets="restore" Properties="TestTargetOS=$(TestOS)netcoreapp" />
5660
<MSBuild Projects="@(FunctionalTests)" Targets="restore" Properties="TestTargetOS=$(TestOS)netcoreapp" />
5761
</Target>
5862

5963
<Target Name="RestoreNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
6064
<MSBuild Projects="@(NetFxDriver)" Targets="restore" Properties="TestTargetOS=$(TestOS)netfx" />
65+
</Target>
66+
67+
<Target Name="RestoreTestsNetFx">
6168
<MSBuild Projects="@(ManualTests)" Targets="restore" Properties="TestTargetOS=$(TestOS)netfx" />
6269
<MSBuild Projects="@(FunctionalTests)" Targets="restore" Properties="TestTargetOS=$(TestOS)netfx" />
6370
</Target>
6471

6572
<Target Name="BuildNetFx" DependsOnTargets="RestoreNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
66-
<MSBuild Projects="@(NetFxDriver)" Properties="Platform=AnyCPU;$(ProjectProperties)" />
73+
<MSBuild Projects="@(NetFxDriver)" Properties="Platform=AnyCPU;$(ProjectProperties)" />
6774
</Target>
6875

6976
<Target Name="BuildNetCore" DependsOnTargets="RestoreNetCore">
@@ -76,45 +83,51 @@
7683
<MSBuild Projects="@(NetCoreDriver)" Properties="$(ProjectProperties);Platform=AnyCPU;OSGroup=AnyOS;" RemoveProperties="TargetsWindows;TargetsUnix;" />
7784
</Target>
7885

79-
<Target Name="BuildFunctionalTestsNetCore" DependsOnTargets="RestoreNetCore">
80-
<MSBuild Projects="@(FunctionalTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=AnyCPU;" />
86+
<Target Name="BuildFunctionalTestsNetCore" DependsOnTargets="RestoreTestsNetCore">
87+
<!-- Only build platform specific builds for Package reference types -->
88+
<MSBuild Projects="@(FunctionalTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=AnyCPU;" Condition="!$(ReferenceType.Contains('Package'))" />
89+
<MSBuild Projects="@(FunctionalTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=$(Platform);" Condition="$(ReferenceType.Contains('Package'))"/>
8190
</Target>
8291

83-
<Target Name="BuildManualTestsNetCore" DependsOnTargets="RestoreNetCore">
84-
<MSBuild Projects="@(ManualTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=AnyCPU;" />
92+
<Target Name="BuildManualTestsNetCore" DependsOnTargets="RestoreTestsNetCore">
93+
<!-- Only build platform specific builds for Package reference types -->
94+
<MSBuild Projects="@(ManualTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=AnyCPU;" Condition="!$(ReferenceType.Contains('Package'))"/>
95+
<MSBuild Projects="@(ManualTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=$(Platform);" Condition="$(ReferenceType.Contains('Package'))"/>
8596
</Target>
8697

87-
<Target Name="BuildFunctionalTestsNetFx" DependsOnTargets="RestoreNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
88-
<!-- Only build platform specific tests on Windows for .NET Framework -->
98+
<Target Name="BuildFunctionalTestsNetFx" DependsOnTargets="RestoreTestsNetFx;BuildNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
8999
<MSBuild Projects="@(FunctionalTests)" Properties="TestTargetOS=$(TestOS)netfx;$(TestProjectProperties);Platform=$(Platform);" />
90100
</Target>
91101

92-
<Target Name="BuildManualTestsNetFx" DependsOnTargets="RestoreNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
102+
<Target Name="BuildManualTestsNetFx" DependsOnTargets="RestoreTestsNetFx;BuildNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
93103
<MSBuild Projects="@(ManualTests)" Properties="TestTargetOS=$(TestOS)netfx;$(TestProjectProperties);Platform=$(Platform);" />
94104
</Target>
95105

96106
<Target Name="Clean">
107+
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","artifacts", SearchOption.AllDirectories))' />
97108
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","bin", SearchOption.AllDirectories))' />
98109
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","obj", SearchOption.AllDirectories))' />
99110
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","packages", SearchOption.AllDirectories))' />
100111
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".",".nuget", SearchOption.AllDirectories))' />
101112
</Target>
102113

103-
<Target Name="BuildAKVNetFx" Condition="'$(IsEnabledWindows)' == 'true'">
114+
<Target Name="BuildAKVNetFx" Condition="'$(IsEnabledWindows)' == 'true' AND !$(ReferenceType.Contains('NetStandard'))">
104115
<MSBuild Projects="@(AKVProvider)" Targets="restore" Properties="TestTargetOS=$(TestOS)netfx" />
105116
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netfx;Platform=$(Platform);$(TestProjectProperties)" />
106117
</Target>
107118

108-
<Target Name="BuildAKVNetCore">
119+
<Target Name="BuildAKVNetCore" Condition="!$(ReferenceType.Contains('NetStandard'))">
109120
<MSBuild Projects="@(AKVProvider)" Targets="restore" Properties="TestTargetOS=$(TestOS)netcoreapp" />
110-
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=Unix;" />
121+
<!-- Only build platform specific builds for Package reference types -->
122+
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;" Condition="!$(ReferenceType.Contains('Package'))"/>
123+
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=$(Platform);" Condition="$(ReferenceType.Contains('Package'))"/>
111124
</Target>
112-
113-
<Target Name="BuildAKVNetCoreAllOS">
125+
126+
<Target Name="BuildAKVNetCoreAllOS" Condition="!$(ReferenceType.Contains('NetStandard'))">
114127
<MSBuild Projects="@(AKVProvider)" Targets="restore" Properties="TestTargetOS=$(TestOS)netcoreapp" />
115-
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=Unix;" RemoveProperties="TargetsWindows;TargetsUnix;" />
116-
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=Windows_NT;" RemoveProperties="TargetsWindows;TargetsUnix;" Condition="'$(IsEnabledWindows)' == 'true'"/>
117-
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=AnyOS;" RemoveProperties="TargetsWindows;TargetsUnix;" />
128+
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=Unix;" RemoveProperties="TargetsWindows;TargetsUnix;" />
129+
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=Windows_NT;" RemoveProperties="TargetsWindows;TargetsUnix;" Condition="'$(IsEnabledWindows)' == 'true'" />
130+
<MSBuild Projects="@(AKVProvider)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(ProjectProperties);Platform=AnyCPU;OSGroup=AnyOS;" RemoveProperties="TargetsWindows;TargetsUnix;" />
118131
</Target>
119-
132+
120133
</Project>

src/Directory.Build.props

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,44 @@
99
<TargetsUnix Condition="'$(OSGroup)' == 'Unix'">true</TargetsUnix>
1010
<TargetsAnyOS Condition="'$(OSGroup)' == 'AnyOS'">true</TargetsAnyOS>
1111
<IsSourceProject Condition="$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectDirectory), 'src%24'))">true</IsSourceProject>
12+
<!--
13+
"ReferenceType" property supports below options:
14+
15+
"Project" => Build and run tests with Microsoft.Data.SqlClient as Project Reference
16+
"Package" => Build and run tests with Microsoft.Data.SqlClient as Package Reference with configured "TestMicrosoftDataSqlClientVersion" in "Versions.props" file.
17+
"NetStandard" => Build and run tests with Microsoft.Data.SqlClient as Project Reference via .NET Standard Library
18+
"NetStandardPackage" => Build and run tests with Microsoft.Data.SqlClient as Package Reference via .NET Standard Library
19+
20+
************** IMPORTANT NOTE BEFORE PROCEEDING WITH "PACKAGE" AND "NETSTANDARDPACKAGE" REFERENCE TYPES ***************
21+
CREATE A NUGET PACKAGE WITH BELOW COMMAND AND ADD TO LOCAL FOLDER + UPDATE NUGET CONFIG FILE TO READ FROM THAT LOCATION
22+
> msbuild /p:configuration=Release
23+
-->
24+
<ReferenceType Condition="$(ReferenceType) == ''">Project</ReferenceType>
1225
</PropertyGroup>
1326
<PropertyGroup Condition="$(Configuration.Contains('Debug'))">
1427
<DefineConstants>$(DefineConstants);DEBUG</DefineConstants>
1528
</PropertyGroup>
1629
<PropertyGroup>
1730
<ProjectDir>$(MSBuildThisFileDirectory)</ProjectDir>
1831
<RepoRoot>$(ProjectDir)..\</RepoRoot>
32+
<Artifacts>$(RepoRoot)artifacts\$(ReferenceType)\</Artifacts>
1933
<ManagedSourceCode>$(ProjectDir)Microsoft.Data.SqlClient\</ManagedSourceCode>
2034
<NetCoreSource>$(ManagedSourceCode)netcore\</NetCoreSource>
2135
<NetFxSource>$(ManagedSourceCode)netfx\</NetFxSource>
2236
<NetFxResources>$(ManagedSourceCode)netfx\src\Resources\</NetFxResources>
23-
<ObjFolder>$(RepoRoot)obj\</ObjFolder>
37+
<AddOnsPath>$(ManagedSourceCode)add-ons\</AddOnsPath>
38+
<ObjFolder>$(Artifacts)obj\</ObjFolder>
2439
<CommonPath>$(NetCoreSource)src\Common\src</CommonPath>
2540
<CommonTestPath>$(NetCoreSource)src\Common\tests</CommonTestPath>
2641
<TestsPath>$(ProjectDir)Microsoft.Data.SqlClient\tests\</TestsPath>
27-
<BinFolder Condition="'$(TargetsWindows)' == 'true'">$(RepoRoot)bin\Windows_NT\</BinFolder>
28-
<BinFolder Condition="'$(TargetsAnyOS)' == 'true'">$(RepoRoot)bin\AnyOS\</BinFolder>
29-
<BinFolder Condition="'$(TargetsUnix)' == 'true'">$(RepoRoot)bin\Unix\</BinFolder>
42+
<BinFolder Condition="'$(TargetsWindows)' == 'true'">$(Artifacts)bin\Windows_NT\</BinFolder>
43+
<BinFolder Condition="'$(TargetsAnyOS)' == 'true'">$(Artifacts)bin\AnyOS\</BinFolder>
44+
<BinFolder Condition="'$(TargetsUnix)' == 'true'">$(Artifacts)bin\Unix\</BinFolder>
3045
<ToolsDir Condition="'$(ToolsDir)'==''">$(RepoRoot)tools\</ToolsDir>
3146
<PackagesDir Condition="'$(PackagesDir)'==''">$(RepoRoot)packages\</PackagesDir>
3247
<NuGetRoot Condition="'$(NuGetRoot)' == ''">$(RepoRoot).nuget\</NuGetRoot>
3348
<NuGetCmd>$(NuGetRoot)nuget.exe</NuGetCmd>
3449
<!-- Respect environment variable for the .NET install directory if set; otherwise, use the current default location -->
35-
<DotNetRoot Condition="'$(DotNetRoot)' == ''">$(DOTNET_INSTALL_DIR)</DotNetRoot>
36-
<DotNetRoot Condition="'$(DotNetRoot)' == ''">$(RepoRoot).dotnet\</DotNetRoot>
37-
<DotNetRoot Condition="!HasTrailingSlash('$(DotNetRoot)')">$(DotNetRoot)\</DotNetRoot>
38-
<DotNetCmd>$(DotNetRoot)dotnet</DotNetCmd>
39-
<DotNetCmd Condition="'$(OS)' == 'Windows_NT'">$(DotNetCmd).exe</DotNetCmd>
4050
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
4151
<BuildSimulator Condition="'$(BuildSimulator)' != 'true'">false</BuildSimulator>
4252
</PropertyGroup>

0 commit comments

Comments
 (0)