diff options
Diffstat (limited to 'src/main.test')
-rw-r--r-- | src/main.test/Mock/Clients/IISClient.cs | 17 | ||||
-rw-r--r-- | src/main.test/Mock/Services/InputService.cs | 26 | ||||
-rw-r--r-- | src/main.test/Tests/BindingTests/Bindings.cs | 51 | ||||
-rw-r--r-- | src/main.test/Tests/BindingTests/HelperPerformance.cs | 57 | ||||
-rw-r--r-- | src/main.test/wacs.test.csproj | 6 |
5 files changed, 145 insertions, 12 deletions
diff --git a/src/main.test/Mock/Clients/IISClient.cs b/src/main.test/Mock/Clients/IISClient.cs index c2a5898..f131434 100644 --- a/src/main.test/Mock/Clients/IISClient.cs +++ b/src/main.test/Mock/Clients/IISClient.cs @@ -164,7 +164,22 @@ namespace PKISharp.WACS.UnitTests.Mock.Clients public string IP { get; set; } public byte[] CertificateHash { get; set; } public string CertificateStoreName { get; set; } - public string BindingInformation => $"{IP}:{Port}:{Host}"; + public string BindingInformation + { + get + { + if (_bindingInformation != null) + { + return _bindingInformation; + } + else + { + return $"{IP}:{Port}:{Host}"; + } + } + set => _bindingInformation = value; + } + private string? _bindingInformation = null; public SSLFlags SSLFlags { get; set; } } } diff --git a/src/main.test/Mock/Services/InputService.cs b/src/main.test/Mock/Services/InputService.cs index 3771cab..58e8d2b 100644 --- a/src/main.test/Mock/Services/InputService.cs +++ b/src/main.test/Mock/Services/InputService.cs @@ -43,25 +43,31 @@ namespace PKISharp.WACS.UnitTests.Mock.Services FirstOrDefault(c => string.Equals(c.Command, input, StringComparison.CurrentCultureIgnoreCase)).Item); } - public Task<TResult> ChooseFromMenu<TResult>(string what, List<Choice<TResult>> choices) - { - var input = GetNextInput(); - return Task. - FromResult(choices. - FirstOrDefault(c => string.Equals(c.Command, input, StringComparison.CurrentCultureIgnoreCase)).Item); - } - public string FormatDate(DateTime date) => ""; public Task<bool> PromptYesNo(string message, bool defaultOption) { var input = GetNextInput(); return Task.FromResult(string.Equals(input, "y", StringComparison.CurrentCultureIgnoreCase)); } - public Task<string> ReadPassword(string what) => Task.FromResult(GetNextInput()); + public Task<string?> ReadPassword(string what) => Task.FromResult(GetNextInput()); public Task<string> RequestString(string what) => Task.FromResult(GetNextInput()); public Task<string> RequestString(string[] what) => Task.FromResult(GetNextInput()); - public void Show(string label, string value = null, bool first = false, int level = 0) { } + public void Show(string? label, string? value = null, bool first = false, int level = 0) { } public Task<bool> Wait(string message = "") => Task.FromResult(true); public Task WritePagedList(IEnumerable<Choice> listItems) => Task.CompletedTask; + public Task<TResult> ChooseFromMenu<TResult>(string what, List<Choice<TResult>> choices, Func<string, Choice<TResult>>? unexpected = null) + { + var input = GetNextInput(); + var choice = choices.FirstOrDefault(c => string.Equals(c.Command, input, StringComparison.CurrentCultureIgnoreCase)); + if (choice == null && unexpected != null) + { + choice = unexpected(input); + } + if (choice != null) + { + return Task.FromResult(choice.Item); + } + throw new Exception(); + } } } diff --git a/src/main.test/Tests/BindingTests/Bindings.cs b/src/main.test/Tests/BindingTests/Bindings.cs index 1343924..ac4a157 100644 --- a/src/main.test/Tests/BindingTests/Bindings.cs +++ b/src/main.test/Tests/BindingTests/Bindings.cs @@ -973,5 +973,56 @@ namespace PKISharp.WACS.UnitTests.Tests.BindingTests Assert.AreEqual(iis.WebSites.First().Bindings.First().CertificateHash , newCert); Assert.AreEqual(iis.WebSites.First().Bindings.Last().CertificateHash, newCert); } + + [TestMethod] + [DataRow("UPPERCASE.example.com", "UPPERCASE.example.com", "UPPERCASE.example.com")] + [DataRow("uppercase.example.com", "UPPERCASE.example.com", "UPPERCASE.example.com")] + [DataRow("UPPERCASE.example.com", "uppercase.example.com", "UPPERCASE.example.com")] + [DataRow("UPPERCASE.example.com", "UPPERCASE.example.com", "uppercase.example.com")] + [DataRow("UPPERCASE.example.com", "uppercase.example.com", "uppercase.example.com")] + [DataRow("uppercase.example.com", "UPPERCASE.example.com", "uppercase.example.com")] + [DataRow("uppercase.example.com", "uppercase.example.com", "UPPERCASE.example.com")] + [DataRow("uppercase.example.com", "uppercase.example.com", "uppercase.example.com")] + public void UppercaseBinding(string host, string bindingInfo, string newHost) + { + var mockBinding = new MockBinding() + { + IP = "*", + Port = 443, + Host = host, + Protocol = "https", + CertificateHash = oldCert1, + CertificateStoreName = DefaultStore + }; + mockBinding.BindingInformation = $"*:443:{bindingInfo}"; + + var dup1 = new MockSite() + { + Id = 1, + Bindings = new List<MockBinding> { + mockBinding, + new MockBinding() + { + IP = "*", + Port = 80, + Host = host, + Protocol = "http" + } + } + }; + + var iis = new MockIISClient(log, 10) + { + MockSites = new[] { dup1 } + }; + + var bindingOptions = new BindingOptions(). + WithSiteId(1). + WithStore(DefaultStore). + WithThumbprint(newCert); + + iis.AddOrUpdateBindings(new[] { host, newHost }, bindingOptions, null); + Assert.AreEqual(2, iis.WebSites.First().Bindings.Count()); + } } }
\ No newline at end of file diff --git a/src/main.test/Tests/BindingTests/HelperPerformance.cs b/src/main.test/Tests/BindingTests/HelperPerformance.cs new file mode 100644 index 0000000..613c942 --- /dev/null +++ b/src/main.test/Tests/BindingTests/HelperPerformance.cs @@ -0,0 +1,57 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using PKISharp.WACS.Clients.IIS; +using PKISharp.WACS.DomainObjects; +using PKISharp.WACS.Services; +using PKISharp.WACS.UnitTests.Mock.Clients; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace PKISharp.WACS.UnitTests.Tests.BindingTests +{ + [TestClass] + public class HelperPerformance + { + private readonly ILogService log; + public HelperPerformance() => log = new Mock.Services.LogService(false); + + [TestMethod] + public void Speed() + { + var iis = new MockIISClient(log, 10); + var siteList = new List<MockSite>(); + for (var i = 0; i < 5000; i++) + { + var bindingList = new List<MockBinding>(); + for (var j = 0; j < 10; j++) + { + var randomBindingOptions = new BindingOptions(); + var randomId = ShortGuid.NewGuid().ToString(); + randomBindingOptions = randomBindingOptions.WithHost(randomId.ToLower()); + bindingList.Add(new MockBinding(randomBindingOptions)); + }; + siteList.Add(new MockSite() + { + Id = i, + Bindings = bindingList + }); + } + iis.MockSites = siteList.ToArray(); + var helper = new IISHelper(log, iis); + var timer = new Stopwatch(); + timer.Start(); + helper.GetSites(false); + timer.Stop(); + Assert.IsTrue(timer.ElapsedMilliseconds < 1000); + + timer.Reset(); + timer.Start(); + helper.GetBindings(); + timer.Stop(); + Assert.IsTrue(timer.ElapsedMilliseconds < 1000); + } + + + } +} diff --git a/src/main.test/wacs.test.csproj b/src/main.test/wacs.test.csproj index f691a52..bbbb8b4 100644 --- a/src/main.test/wacs.test.csproj +++ b/src/main.test/wacs.test.csproj @@ -9,7 +9,11 @@ <RootNamespace>PKISharp.WACS.UnitTests</RootNamespace> </PropertyGroup> - + + <PropertyGroup> + <Nullable>enable</Nullable> + </PropertyGroup> + <ItemGroup> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" /> <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" /> |