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 Xunit;
6 
7 namespace System.DirectoryServices.Protocols.Tests
8 {
9     public class LdapDirectoryIdentifierTests
10     {
11         [Theory]
12         [InlineData(null, new string[0])]
13         [InlineData("", new string[] { "" })]
14         [InlineData("server", new string[] { "server" })]
Ctor_Server(string server, string[] expectedServers)15         public void Ctor_Server(string server, string[] expectedServers)
16         {
17             var identifier = new LdapDirectoryIdentifier(server);
18             Assert.False(identifier.Connectionless);
19             Assert.False(identifier.FullyQualifiedDnsHostName);
20             Assert.Equal(389, identifier.PortNumber);
21             Assert.Equal(expectedServers, identifier.Servers);
22         }
23 
24         [Theory]
25         [InlineData(null, 389, new string[0])]
26         [InlineData("", -1, new string[] { "" })]
27         [InlineData("server", int.MaxValue, new string[] { "server" })]
Ctor_Server_PortNumber(string server, int portNumber, string[] expectedServers)28         public void Ctor_Server_PortNumber(string server, int portNumber, string[] expectedServers)
29         {
30             var identifier = new LdapDirectoryIdentifier(server, portNumber);
31             Assert.False(identifier.Connectionless);
32             Assert.False(identifier.FullyQualifiedDnsHostName);
33             Assert.Equal(portNumber, identifier.PortNumber);
34             Assert.Equal(expectedServers, identifier.Servers);
35         }
36 
37         [Theory]
38         [InlineData(null, true, false, new string[0])]
39         [InlineData("", false, true, new string[] { "" })]
40         [InlineData("server", true, true, new string[] { "server" })]
Ctor_Server_FullQualifiedDnsHostName_Conectionless(string server, bool fullyQualifiedDnsHostName, bool connectionless, string[] expectedServers)41         public void Ctor_Server_FullQualifiedDnsHostName_Conectionless(string server, bool fullyQualifiedDnsHostName, bool connectionless, string[] expectedServers)
42         {
43             var identifier = new LdapDirectoryIdentifier(server, fullyQualifiedDnsHostName, connectionless);
44             Assert.Equal(connectionless, identifier.Connectionless);
45             Assert.Equal(fullyQualifiedDnsHostName, identifier.FullyQualifiedDnsHostName);
46             Assert.Equal(389, identifier.PortNumber);
47             Assert.Equal(expectedServers, identifier.Servers);
48         }
49 
50         [Theory]
51         [InlineData(null, -1, true, false, new string[0])]
52         [InlineData("", 389, false, true, new string[] { "" })]
53         [InlineData("server", int.MaxValue, true, true, new string[] { "server" })]
Ctor_PortNumber_Server_FullQualifiedDnsHostName_Conectionless(string server, int portNumber, bool fullyQualifiedDnsHostName, bool connectionless, string[] expectedServers)54         public void Ctor_PortNumber_Server_FullQualifiedDnsHostName_Conectionless(string server, int portNumber, bool fullyQualifiedDnsHostName, bool connectionless, string[] expectedServers)
55         {
56             var identifier = new LdapDirectoryIdentifier(server, portNumber, fullyQualifiedDnsHostName, connectionless);
57             Assert.Equal(connectionless, identifier.Connectionless);
58             Assert.Equal(fullyQualifiedDnsHostName, identifier.FullyQualifiedDnsHostName);
59             Assert.Equal(portNumber, identifier.PortNumber);
60             Assert.Equal(expectedServers, identifier.Servers);
61         }
62 
63         [Theory]
64         [InlineData(null, false, true)]
65         [InlineData(new string[0], true, false)]
66         [InlineData(new string[] { "server" }, true, true)]
67         [InlineData(new string[] { "server", null }, false, false)]
Ctor_Servers_FullQualifiedDnsHostName_Conectionless(string[] servers, bool fullyQualifiedDnsHostName, bool connectionless)68         public void Ctor_Servers_FullQualifiedDnsHostName_Conectionless(string[] servers, bool fullyQualifiedDnsHostName, bool connectionless)
69         {
70             var identifier = new LdapDirectoryIdentifier(servers, fullyQualifiedDnsHostName, connectionless);
71             Assert.Equal(connectionless, identifier.Connectionless);
72             Assert.Equal(fullyQualifiedDnsHostName, identifier.FullyQualifiedDnsHostName);
73             Assert.Equal(389, identifier.PortNumber);
74             Assert.NotSame(servers, identifier.Servers);
75             Assert.Equal(servers ?? Array.Empty<string>(), identifier.Servers);
76         }
77 
78         [Fact]
Ctor_ServerHasSpaceInName_ThrowsArgumentException()79         public void Ctor_ServerHasSpaceInName_ThrowsArgumentException()
80         {
81             AssertExtensions.Throws<ArgumentException>(null, () => new LdapDirectoryIdentifier("se rver"));
82             AssertExtensions.Throws<ArgumentException>(null, () => new LdapDirectoryIdentifier("se rver", 0));
83             AssertExtensions.Throws<ArgumentException>(null, () => new LdapDirectoryIdentifier("se rver", false, false));
84             AssertExtensions.Throws<ArgumentException>(null, () => new LdapDirectoryIdentifier("se rver", 0, false, false));
85             AssertExtensions.Throws<ArgumentException>(null, () => new LdapDirectoryIdentifier(new string[] { "se rver" }, false, false));
86             AssertExtensions.Throws<ArgumentException>(null, () => new LdapDirectoryIdentifier(new string[] { "se rver" }, 0, false, false));
87         }
88     }
89 }
90