Skip to content

Commit

Permalink
Added tests for TopShelf hosting (#71)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kralizek committed Feb 14, 2019
1 parent 5eb3ddc commit 21cbc06
Show file tree
Hide file tree
Showing 6 changed files with 185 additions and 15 deletions.
15 changes: 15 additions & 0 deletions Nybus.sln
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Nybus.Extensions.Host
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtils", "tests\TestUtils\TestUtils.csproj", "{78F69BA5-F7F0-45AB-A268-CDFCCAF93FA1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Nybus.Extensions.Hosting.TopShelf", "tests\Tests.Nybus.Extensions.Hosting.TopShelf\Tests.Nybus.Extensions.Hosting.TopShelf.csproj", "{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -342,6 +344,18 @@ Global
{78F69BA5-F7F0-45AB-A268-CDFCCAF93FA1}.Release|x64.Build.0 = Release|Any CPU
{78F69BA5-F7F0-45AB-A268-CDFCCAF93FA1}.Release|x86.ActiveCfg = Release|Any CPU
{78F69BA5-F7F0-45AB-A268-CDFCCAF93FA1}.Release|x86.Build.0 = Release|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Debug|x64.ActiveCfg = Debug|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Debug|x64.Build.0 = Debug|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Debug|x86.ActiveCfg = Debug|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Debug|x86.Build.0 = Debug|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Release|Any CPU.Build.0 = Release|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Release|x64.ActiveCfg = Release|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Release|x64.Build.0 = Release|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Release|x86.ActiveCfg = Release|Any CPU
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{48BAF0EF-F200-4809-9ED7-E2B67CE8DD8A} = {BFE4A74D-7641-4C6B-8D39-14173BB82320}
Expand Down Expand Up @@ -372,5 +386,6 @@ Global
{C4D15947-D688-411F-9257-BC8273DC237E} = {AF1E016D-895D-48F1-8690-C49AB8F926B2}
{25F804E9-63D1-48F2-AFB6-B9DD065A2786} = {AF1E016D-895D-48F1-8690-C49AB8F926B2}
{78F69BA5-F7F0-45AB-A268-CDFCCAF93FA1} = {AF1E016D-895D-48F1-8690-C49AB8F926B2}
{0ADB6705-0DC9-4C01-ACB5-2DCB5C153789} = {AF1E016D-895D-48F1-8690-C49AB8F926B2}
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using Topshelf;
using Topshelf.HostConfigurators;
using Topshelf.Runtime;
using Topshelf.ServiceConfigurators;

namespace Nybus
Expand All @@ -19,31 +20,33 @@ private static void UseStartup<TStartup>(ServiceConfigurator<IBusHost> configura
{
var startup = new TStartup();

configurator.ConstructUsing(settings =>
{
var configurationBuilder = new ConfigurationBuilder();
configurator.ConstructUsing(settings => startup.BuildHost(settings));

startup.ConfigureAppConfiguration(configurationBuilder);
configurator.WhenStarted(startup.OnStart);

var configuration = configurationBuilder.Build();
configurator.WhenStopped(startup.OnStop);
}

var context = new StartupContext(settings, configuration);
public static IBusHost BuildHost<TStartup>(this TStartup startup, HostSettings settings) where TStartup : Startup
{
var configurationBuilder = new ConfigurationBuilder();

var services = new ServiceCollection();
services.AddSingleton(configuration);
startup.ConfigureAppConfiguration(configurationBuilder);

startup.ConfigureServices(context, services);
var configuration = configurationBuilder.Build();

services.AddLogging(builder => startup.ConfigureLogging(context, builder));
var context = new StartupContext(settings, configuration);

var serviceProvider = services.BuildServiceProvider();
var services = new ServiceCollection();
services.AddSingleton(configuration);

return startup.ConstructService(context, serviceProvider);
});
startup.ConfigureServices(context, services);

configurator.WhenStarted(startup.OnStart);
services.AddLogging(builder => startup.ConfigureLogging(context, builder));

configurator.WhenStopped(startup.OnStop);
var serviceProvider = services.BuildServiceProvider();

return startup.ConstructService(context, serviceProvider);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Moq;
using NUnit.Framework;
using Nybus;
using Topshelf.HostConfigurators;
using Topshelf.Runtime;
// ReSharper disable InvokeAsExtensionMethod

namespace Tests
{
[TestFixture]
public class HostConfiguratorExtensionsTests
{
[Test, AutoMoqData]
public void UseStartup_sets_up_service_builder(HostConfigurator configurator)
{
HostConfiguratorExtensions.UseStartup<TestStartup>(configurator);

Mock.Get(configurator).Verify(p => p.UseServiceBuilder(It.IsAny<ServiceBuilderFactory>()));
}

[Test, AutoMoqData]
public void UseStartup_sets_up_service_start(HostConfigurator configurator)
{
HostConfiguratorExtensions.UseStartup<TestStartup>(configurator);

Assert.Inconclusive("The test is not able to assert whether the desired action happened");
}

[Test, AutoMoqData]
public void UseStartup_sets_up_service_stop(HostConfigurator configurator)
{
HostConfiguratorExtensions.UseStartup<TestStartup>(configurator);

Assert.Inconclusive("The test is not able to assert whether the desired action happened");
}

[Test, AutoMoqData]
public void BuildHost_uses_ConfigureAppConfiguration(Mock<Startup> mockStartup, HostSettings settings)
{
HostConfiguratorExtensions.BuildHost(mockStartup.Object, settings);

mockStartup.Verify(p => p.ConfigureAppConfiguration(It.IsAny<IConfigurationBuilder>()));
}

[Test, AutoMoqData]
public void BuildHost_uses_ConstructService(Mock<Startup> mockStartup, HostSettings settings)
{
HostConfiguratorExtensions.BuildHost(mockStartup.Object, settings);

mockStartup.Verify(p => p.ConstructService(It.IsAny<StartupContext>(), It.IsAny<IServiceProvider>()));
}

[Test, AutoMoqData]
public void BuildHost_uses_ConfigureServices(Mock<Startup> mockStartup, HostSettings settings)
{
HostConfiguratorExtensions.BuildHost(mockStartup.Object, settings);

mockStartup.Verify(p => p.ConfigureServices(It.IsAny<StartupContext>(), It.IsAny<IServiceCollection>()));
}

[Test, AutoMoqData]
public void BuildHost_uses_ConfigureLogging(Mock<Startup> mockStartup, HostSettings settings)
{
HostConfiguratorExtensions.BuildHost(mockStartup.Object, settings);

mockStartup.Verify(p => p.ConfigureLogging(It.IsAny<StartupContext>(), It.IsAny<ILoggingBuilder>()));
}
}

public class TestStartup : Startup
{
public override IBusHost ConstructService(StartupContext context, IServiceProvider serviceProvider)
{
return Mock.Of<IBusHost>();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using AutoFixture.NUnit3;
using Microsoft.Extensions.Configuration;
using NUnit.Framework;
using Nybus;
using Topshelf.Runtime;

namespace Tests
{
[TestFixture]
public class StartupContextTests
{
[Test, AutoMoqData]
public void Context_returns_given_configuration([Frozen] IConfigurationRoot configuration, StartupContext sut)
{
Assert.That(sut.Configuration, Is.SameAs(configuration));
}

[Test, AutoMoqData]
public void Context_returns_given_settings([Frozen] HostSettings settings, StartupContext sut)
{
Assert.That(sut.Settings, Is.SameAs(settings));
}
}
}
27 changes: 27 additions & 0 deletions tests/Tests.Nybus.Extensions.Hosting.TopShelf/StartupTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using Moq;
using NUnit.Framework;
using Nybus;
using Topshelf;

namespace Tests
{
[TestFixture]
public class StartupTests
{
[Test, AutoMoqData]
public void OnStart_starts_the_host(TestStartup sut, IBusHost busHost, HostControl control)
{
sut.OnStart(busHost, control);

Mock.Get(busHost).Verify(p => p.StartAsync(), Times.Once);
}

[Test, AutoMoqData]
public void OnStop_stops_the_host(TestStartup sut, IBusHost busHost, HostControl control)
{
sut.OnStop(busHost, control);

Mock.Get(busHost).Verify(p => p.StopAsync(), Times.Once);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.11.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\TestUtils\TestUtils.csproj" />
<ProjectReference Include="..\..\src\extensions\hosting\Nybus.Extensions.TopShelf\Nybus.Extensions.Hosting.TopShelf.csproj" />
</ItemGroup>

</Project>

0 comments on commit 21cbc06

Please sign in to comment.