Skip to content

Commit 9fbfb7f

Browse files
committed
Moving to use PlatformSpecific attribute and fixing skipping on platforms that don't have libldap installed
1 parent 42a69a4 commit 9fbfb7f

15 files changed

+156
-80
lines changed

src/libraries/System.DirectoryServices.Protocols/tests/AsqRequestControlTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.Collections.Generic;
6+
using System.Runtime.InteropServices;
67
using Xunit;
78

89
namespace System.DirectoryServices.Protocols.Tests
910
{
10-
[ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.IsOpenSUSE))]
11+
[ConditionalClass(typeof(DirectoryServicesTestHelpers), nameof(DirectoryServicesTestHelpers.IsWindowsOrLibLdapIsInstalled))]
1112
public class AsqRequestControlTests
1213
{
1314
[Fact]
@@ -19,14 +20,14 @@ public void Ctor_Default()
1920
Assert.True(control.ServerSide);
2021
Assert.Equal("1.2.840.113556.1.4.1504", control.Type);
2122

22-
var expected = (Environment.OSVersion.Platform == PlatformID.Win32NT) ? new byte[] { 48, 132, 0, 0, 0, 2, 4, 0 } : new byte[] { 48, 2, 4, 0 };
23+
var expected = (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 2, 4, 0 } : new byte[] { 48, 2, 4, 0 };
2324

2425
Assert.Equal(expected, control.GetValue());
2526
}
2627

2728
public static IEnumerable<object[]> Ctor_String_Test_data()
2829
{
29-
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
30+
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
3031
{
3132
yield return new object[] { null, new byte[] { 48, 132, 0, 0, 0, 2, 4, 0 } };
3233
yield return new object[] { "", new byte[] { 48, 132, 0, 0, 0, 2, 4, 0 } };

src/libraries/System.DirectoryServices.Protocols/tests/BerConverterTests.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.Collections.Generic;
6+
using System.Runtime.InteropServices;
67
using Xunit;
78

89
namespace System.DirectoryServices.Protocols.Tests
910
{
10-
[ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.IsOpenSUSE))]
11+
[ConditionalClass(typeof(DirectoryServicesTestHelpers), nameof(DirectoryServicesTestHelpers.IsWindowsOrLibLdapIsInstalled))]
1112
public class BerConverterTests
1213
{
1314
public static IEnumerable<object[]> Encode_TestData()
@@ -16,28 +17,28 @@ public static IEnumerable<object[]> Encode_TestData()
1617
yield return new object[] { "", new object[10], new byte[0] };
1718
yield return new object[] { "b", new object[] { true, false, true, false }, new byte[] { 1, 1, 255 } };
1819

19-
if (PlatformDetection.IsWindows)
20+
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
2021
{
2122
yield return new object[] { "{", new object[] { "a" }, new byte[] { 48, 0, 0, 0, 0, 0 } }; // This format is not supported by Linux OpenLDAP
2223
}
23-
yield return new object[] { "{}", new object[] { "a" }, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 0 } : new byte[] { 48, 0 } };
24-
if (PlatformDetection.IsWindows)
24+
yield return new object[] { "{}", new object[] { "a" }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 0 } : new byte[] { 48, 0 } };
25+
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
2526
{
2627
yield return new object[] { "[", new object[] { "a" }, new byte[] { 49, 0, 0, 0, 0, 0 } }; // This format is not supported by Linux OpenLDAP
2728
}
28-
yield return new object[] { "[]", new object[] { "a" }, (PlatformDetection.IsWindows) ? new byte[] { 49, 132, 0, 0, 0, 0 } : new byte[] { 49, 0 } };
29+
yield return new object[] { "[]", new object[] { "a" }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 49, 132, 0, 0, 0, 0 } : new byte[] { 49, 0 } };
2930
yield return new object[] { "n", new object[] { "a" }, new byte[] { 5, 0 } };
3031

31-
yield return new object[] { "tetie", new object[] { -1, 0, 1, 2, 3 }, (PlatformDetection.IsWindows) ? new byte[] { 255, 1, 0, 1, 1, 2, 10, 1, 3 } : new byte[] { 10, 1, 0, 1, 1, 2, 10, 1, 3 } };
32-
yield return new object[] { "{tetie}", new object[] { -1, 0, 1, 2, 3 }, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 9, 255, 1, 0, 1, 1, 2, 10, 1, 3 } : new byte[] { 48, 9, 10, 1, 0, 1, 1, 2, 10, 1, 3 } };
32+
yield return new object[] { "tetie", new object[] { -1, 0, 1, 2, 3 }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 255, 1, 0, 1, 1, 2, 10, 1, 3 } : new byte[] { 10, 1, 0, 1, 1, 2, 10, 1, 3 } };
33+
yield return new object[] { "{tetie}", new object[] { -1, 0, 1, 2, 3 }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 9, 255, 1, 0, 1, 1, 2, 10, 1, 3 } : new byte[] { 48, 9, 10, 1, 0, 1, 1, 2, 10, 1, 3 } };
3334

3435
yield return new object[] { "bb", new object[] { true, false }, new byte[] { 1, 1, 255, 1, 1, 0 } };
35-
yield return new object[] { "{bb}", new object[] { true, false }, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 6, 1, 1, 255, 1, 1, 0 } : new byte[] { 48, 6, 1, 1, 255, 1, 1, 0 } };
36+
yield return new object[] { "{bb}", new object[] { true, false }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 6, 1, 1, 255, 1, 1, 0 } : new byte[] { 48, 6, 1, 1, 255, 1, 1, 0 } };
3637

3738
yield return new object[] { "ssss", new object[] { null, "", "abc", "\0" }, new byte[] { 4, 0, 4, 0, 4, 3, 97, 98, 99, 4, 1, 0 } };
38-
yield return new object[] { "oXo", new object[] { null, new byte[] { 0, 1, 2, 255 }, new byte[0] }, (PlatformDetection.IsWindows) ? new byte[] { 4, 0, 3, 4, 0, 1, 2, 255, 4, 0 } : new byte[] { 4, 0, 3, 2, 4, 0, 4, 0 } };
39+
yield return new object[] { "oXo", new object[] { null, new byte[] { 0, 1, 2, 255 }, new byte[0] }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 4, 0, 3, 4, 0, 1, 2, 255, 4, 0 } : new byte[] { 4, 0, 3, 2, 4, 0, 4, 0 } };
3940
yield return new object[] { "vv", new object[] { null, new string[] { "abc", "", null } }, new byte[] { 4, 3, 97, 98, 99, 4, 0, 4, 0 } };
40-
yield return new object[] { "{vv}", new object[] { null, new string[] { "abc", "", null } }, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 9, 4, 3, 97, 98, 99, 4, 0, 4, 0 } : new byte[] { 48, 9, 4, 3, 97, 98, 99, 4, 0, 4, 0 } };
41+
yield return new object[] { "{vv}", new object[] { null, new string[] { "abc", "", null } }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 9, 4, 3, 97, 98, 99, 4, 0, 4, 0 } : new byte[] { 48, 9, 4, 3, 97, 98, 99, 4, 0, 4, 0 } };
4142
yield return new object[] { "VVVV", new object[] { null, new byte[][] { new byte[] { 0, 1, 2, 3 }, null }, new byte[][] { new byte[0] }, new byte[0][] }, new byte[] { 4, 4, 0, 1, 2, 3, 4, 0, 4, 0 } };
4243
}
4344

@@ -119,7 +120,7 @@ public static IEnumerable<object[]> Decode_TestData()
119120
yield return new object[] { "{bb}", new byte[] { 48, 132, 0, 0, 0, 6, 1, 1, 255, 1, 1, 0 }, new object[] { true, false } };
120121
yield return new object[] { "{OO}", new byte[] { 48, 132, 0, 0, 0, 6, 1, 1, 255, 1, 1, 0 }, new object[] { new byte[] { 255 }, new byte[] { 0 } } };
121122
yield return new object[] { "{BB}", new byte[] { 48, 132, 0, 0, 0, 6, 1, 1, 255, 1, 1, 0 }, new object[] { new byte[] { 255 }, new byte[] { 0 } } };
122-
if (PlatformDetection.IsWindows) // vv and VV formats are not supported yet in Linux
123+
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) // vv and VV formats are not supported yet in Linux
123124
{
124125
yield return new object[] { "{vv}", new byte[] { 48, 132, 0, 0, 0, 9, 4, 3, 97, 98, 99, 4, 0, 4, 0 }, new object[] { null, null } };
125126
yield return new object[] { "{vv}", new byte[] { 48, 132, 0, 0, 0, 6, 1, 1, 255, 1, 1, 0 }, new object[] { new string[] { "\x01" }, null } };

src/libraries/System.DirectoryServices.Protocols/tests/DirSyncRequestControlTests.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.Collections.Generic;
6+
using System.Runtime.InteropServices;
67
using Xunit;
78

89
namespace System.DirectoryServices.Protocols.Tests
910
{
10-
[ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.IsOpenSUSE))]
11+
[ConditionalClass(typeof(DirectoryServicesTestHelpers), nameof(DirectoryServicesTestHelpers.IsWindowsOrLibLdapIsInstalled))]
1112
public class DirSyncRequestControlTests
1213
{
1314
[Fact]
@@ -22,15 +23,15 @@ public void Ctor_Default()
2223
Assert.True(control.ServerSide);
2324
Assert.Equal("1.2.840.113556.1.4.841", control.Type);
2425

25-
var expected = (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 };
26+
var expected = (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 };
2627
Assert.Equal(expected, control.GetValue());
2728
}
2829

2930
public static IEnumerable<object[]> Ctor_Cookie_Data()
3031
{
31-
yield return new object[] { null, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
32-
yield return new object[] { new byte[0], (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
33-
yield return new object[] { new byte[] { 97, 98, 99 }, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 13, 2, 1, 0, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } : new byte[] { 48, 13, 2, 1, 0, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } };
32+
yield return new object[] { null, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
33+
yield return new object[] { new byte[0], (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
34+
yield return new object[] { new byte[] { 97, 98, 99 }, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 13, 2, 1, 0, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } : new byte[] { 48, 13, 2, 1, 0, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } };
3435
}
3536

3637
[Theory]
@@ -51,9 +52,9 @@ public void Ctor_Cookie(byte[] cookie, byte[] expectedValue)
5152

5253
public static IEnumerable<object[]> Ctor_Cookie_Options_Data()
5354
{
54-
yield return new object[] { null, DirectorySynchronizationOptions.None, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
55-
yield return new object[] { new byte[0], DirectorySynchronizationOptions.None - 1, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 13, 2, 4, 255, 255, 255, 255, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 255, 2, 3, 16, 0, 0, 4, 0 } };
56-
yield return new object[] { new byte[] { 97, 98, 99 }, DirectorySynchronizationOptions.ObjectSecurity, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 13, 2, 1, 1, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } : new byte[] { 48, 13, 2, 1, 1, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } };
55+
yield return new object[] { null, DirectorySynchronizationOptions.None, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
56+
yield return new object[] { new byte[0], DirectorySynchronizationOptions.None - 1, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 13, 2, 4, 255, 255, 255, 255, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 255, 2, 3, 16, 0, 0, 4, 0 } };
57+
yield return new object[] { new byte[] { 97, 98, 99 }, DirectorySynchronizationOptions.ObjectSecurity, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 13, 2, 1, 1, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } : new byte[] { 48, 13, 2, 1, 1, 2, 3, 16, 0, 0, 4, 3, 97, 98, 99 } };
5758
}
5859

5960
[Theory]
@@ -74,9 +75,9 @@ public void Ctor_Cookie_Options(byte[] cookie, DirectorySynchronizationOptions o
7475

7576
public static IEnumerable<object[]> Ctor_Cookie_Options_AttributeCount_Data()
7677
{
77-
yield return new object[] { null, DirectorySynchronizationOptions.None, 1048576, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
78-
yield return new object[] { new byte[0], DirectorySynchronizationOptions.None - 1, 0, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 11, 2, 4, 255, 255, 255, 255, 2, 1, 0, 4, 0 } : new byte[] { 48, 8, 2, 1, 255, 2, 1, 0, 4, 0 } };
79-
yield return new object[] { new byte[] { 97, 98, 99 }, DirectorySynchronizationOptions.ObjectSecurity, 10, (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 11, 2, 1, 1, 2, 1, 10, 4, 3, 97, 98, 99 } : new byte[] { 48, 11, 2, 1, 1, 2, 1, 10, 4, 3, 97, 98, 99 } };
78+
yield return new object[] { null, DirectorySynchronizationOptions.None, 1048576, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } : new byte[] { 48, 10, 2, 1, 0, 2, 3, 16, 0, 0, 4, 0 } };
79+
yield return new object[] { new byte[0], DirectorySynchronizationOptions.None - 1, 0, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 11, 2, 4, 255, 255, 255, 255, 2, 1, 0, 4, 0 } : new byte[] { 48, 8, 2, 1, 255, 2, 1, 0, 4, 0 } };
80+
yield return new object[] { new byte[] { 97, 98, 99 }, DirectorySynchronizationOptions.ObjectSecurity, 10, (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 11, 2, 1, 1, 2, 1, 10, 4, 3, 97, 98, 99 } : new byte[] { 48, 11, 2, 1, 1, 2, 1, 10, 4, 3, 97, 98, 99 } };
8081
}
8182

8283
[Theory]
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
// See the LICENSE file in the project root for more information.
4+
5+
using System.Diagnostics;
6+
using System.Runtime.InteropServices;
7+
using System.Threading;
8+
9+
namespace System.DirectoryServices.Protocols.Tests
10+
{
11+
public static class DirectoryServicesTestHelpers
12+
{
13+
public static bool IsWindowsOrLibLdapIsInstalled => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || IsLibLdapInstalled;
14+
15+
// Cache the check once we have performed it once
16+
private static bool? _isLibLdapInstalled = null;
17+
18+
public static bool IsLibLdapInstalled
19+
{
20+
get
21+
{
22+
if (!_isLibLdapInstalled.HasValue)
23+
{
24+
try
25+
{
26+
// Attempt PInvoking into libldap
27+
IntPtr handle = ber_alloc(1);
28+
ber_free(handle, 1);
29+
_isLibLdapInstalled = true;
30+
}
31+
catch (Exception)
32+
{
33+
_isLibLdapInstalled = false;
34+
}
35+
}
36+
return _isLibLdapInstalled.Value;
37+
}
38+
}
39+
40+
internal const string OpenLdap = "libldap-2.4.so.2";
41+
42+
[DllImport(OpenLdap, EntryPoint = "ber_alloc_t", CharSet = CharSet.Ansi)]
43+
internal static extern IntPtr ber_alloc(int option);
44+
45+
[DllImport(OpenLdap, EntryPoint = "ber_free", CharSet = CharSet.Ansi)]
46+
public static extern IntPtr ber_free([In] IntPtr berelement, int option);
47+
}
48+
}

src/libraries/System.DirectoryServices.Protocols/tests/ExtendedDNControlTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.ComponentModel;
6+
using System.Runtime.InteropServices;
67
using Xunit;
78

89
namespace System.DirectoryServices.Protocols.Tests
910
{
10-
[ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.IsOpenSUSE))]
11+
[ConditionalClass(typeof(DirectoryServicesTestHelpers), nameof(DirectoryServicesTestHelpers.IsWindowsOrLibLdapIsInstalled))]
1112
public class ExtendedDNControlTests
1213
{
1314
[Fact]
@@ -19,7 +20,7 @@ public void Ctor_Default()
1920
Assert.True(control.ServerSide);
2021
Assert.Equal("1.2.840.113556.1.4.529", control.Type);
2122

22-
var expected = (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 3, 2, 1, 0 } : new byte[] { 48, 3, 2, 1, 0 };
23+
var expected = (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 3, 2, 1, 0 } : new byte[] { 48, 3, 2, 1, 0 };
2324
Assert.Equal(expected, control.GetValue());
2425
}
2526

@@ -32,7 +33,7 @@ public void Ctor_Flag()
3233
Assert.True(control.ServerSide);
3334
Assert.Equal("1.2.840.113556.1.4.529", control.Type);
3435

35-
var expected = (PlatformDetection.IsWindows) ? new byte[] { 48, 132, 0, 0, 0, 3, 2, 1, 1 } : new byte[] { 48, 3, 2, 1, 1 };
36+
var expected = (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? new byte[] { 48, 132, 0, 0, 0, 3, 2, 1, 1 } : new byte[] { 48, 3, 2, 1, 1 };
3637
Assert.Equal(expected, control.GetValue());
3738
}
3839

src/libraries/System.DirectoryServices.Protocols/tests/LdapConnectionTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
namespace System.DirectoryServices.Protocols.Tests
1414
{
15-
[ConditionalClass(typeof(PlatformDetection), nameof(PlatformDetection.IsOpenSUSE))]
15+
[ConditionalClass(typeof(DirectoryServicesTestHelpers), nameof(DirectoryServicesTestHelpers.IsWindowsOrLibLdapIsInstalled))]
1616
public class LdapConnectionTests
1717
{
1818
[Theory]

0 commit comments

Comments
 (0)