using Autofac; using Microsoft.VisualStudio.TestTools.UnitTesting; using PKISharp.WACS.Clients.IIS; using PKISharp.WACS.Configuration; using PKISharp.WACS.Plugins.Base.Factories.Null; using PKISharp.WACS.Plugins.InstallationPlugins; using PKISharp.WACS.Plugins.Interfaces; using PKISharp.WACS.Plugins.Resolvers; using PKISharp.WACS.Plugins.StorePlugins; using PKISharp.WACS.Services; using mock = PKISharp.WACS.UnitTests.Mock.Services; using System; using System.Collections.Generic; using System.Threading.Tasks; using PKISharp.WACS.Clients.DNS; using PKISharp.WACS.UnitTests.Mock; namespace PKISharp.WACS.UnitTests.Tests.InstallationPluginTests { [TestClass] public class MultipleInstallerTests { private readonly ILogService log; private readonly mock.MockPluginService plugins; private readonly mock.MockSettingsService settings; public MultipleInstallerTests() { log = new mock.LogService(false); plugins = new mock.MockPluginService(log); settings = new mock.MockSettingsService(); } /// /// This tests only works when running as admin /// /// [TestMethod] public async Task Regular() { var commandLine = "--installation iis"; var types = new List() { typeof(CertificateStore) }; var chosen = new List(); var builder = new ContainerBuilder(); _ = builder.RegisterType(); _ = builder.RegisterType(); _ = builder.RegisterType(); _ = builder.RegisterType(); _ = builder.RegisterType(); _ = builder.RegisterInstance(plugins). As(). SingleInstance(); _ = builder.RegisterInstance(settings). As(). SingleInstance(); _ = builder.RegisterInstance(log). As(). SingleInstance(); _ = builder.RegisterType(). As(). SingleInstance(); _ = builder.RegisterType(). SingleInstance(). WithParameter(new TypedParameter(typeof(string[]), commandLine.Split(' '))); _ = builder.RegisterType(). As(). SingleInstance(); _ = builder.RegisterType().As().SingleInstance(); _ = builder.RegisterType().As(); plugins.Configure(builder); var scope = builder.Build(); var resolver = scope.Resolve(); var first = await resolver.GetInstallationPlugin(scope, types, chosen); Assert.IsNotNull(first); if (first != null) { Assert.IsInstanceOfType(first, typeof(IISWebOptionsFactory)); chosen.Add(first); var second = await resolver.GetInstallationPlugin(scope, types, chosen); Assert.IsNotNull(second); Assert.IsInstanceOfType(second, typeof(NullInstallationOptionsFactory)); } } } }