Skip to content

Commit

Permalink
Adding a simple mechanism to set host ID
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiocav committed Aug 9, 2018
1 parent 2eb9a8c commit c81e77a
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 57 deletions.
4 changes: 3 additions & 1 deletion sample/SampleHost/Program.cs
Expand Up @@ -6,6 +6,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.WebJobs;

namespace SampleHost
{
Expand All @@ -17,7 +18,8 @@ public static async Task Main(string[] args)
.UseEnvironment("Development")
.ConfigureWebJobs(b =>
{
b.AddWebJobsLogging() // Enables WebJobs v1 classic logging
b.UseHostId("ecad61-62cf-47f4-93b4-6efcded6")
.AddWebJobsLogging() // Enables WebJobs v1 classic logging
.AddAzureStorageCoreServices()
.AddAzureStorage()
.AddServiceBus()
Expand Down
Expand Up @@ -6,6 +6,7 @@
using Microsoft.Azure.WebJobs.Host.Bindings.Cancellation;
using Microsoft.Azure.WebJobs.Host.Bindings.Data;
using Microsoft.Azure.WebJobs.Host.Config;
using Microsoft.Azure.WebJobs.Host.Executors;
using Microsoft.Azure.WebJobs.Host.Hosting;
using Microsoft.Azure.WebJobs.Host.Loggers;
using Microsoft.Azure.WebJobs.Hosting;
Expand Down Expand Up @@ -45,6 +46,18 @@ public static IWebJobsBuilder AddExtension(this IWebJobsBuilder builder, Type ex
return builder;
}

public static IWebJobsBuilder UseHostId(this IWebJobsBuilder builder, string hostId)
{
if (!HostIdValidator.IsValid(hostId))
{
throw new InvalidOperationException(HostIdValidator.ValidationMessage);
}

builder.Services.AddSingleton<IHostIdProvider>(new FixedHostIdProvider(hostId));

return builder;
}

public static IWebJobsBuilder UseWebJobsStartup<T>(this IWebJobsBuilder builder) where T : IWebJobsStartup, new()
{
return builder.UseWebJobsStartup(typeof(T));
Expand Down
Expand Up @@ -60,7 +60,7 @@ public BlobTriggerEndToEndTests()
_testContainer.CreateAsync().Wait();
}

public IHostBuilder NewBuilder<TProgram>(TProgram program)
public IHostBuilder NewBuilder<TProgram>(TProgram program, Action<IWebJobsBuilder> configure = null)
{
var activator = new FakeActivator();
activator.Add(program);
Expand All @@ -69,6 +69,7 @@ public IHostBuilder NewBuilder<TProgram>(TProgram program)
.ConfigureDefaultTestHost<TProgram>(b =>
{
b.AddAzureStorage();
configure?.Invoke(b);
})
.ConfigureServices(services =>
{
Expand Down Expand Up @@ -206,9 +207,7 @@ public async Task BlobGetsProcessedOnlyOnce_SingleHost()
var prog = new BlobGetsProcessedOnlyOnce_SingleHost_Program();

// make sure they both have the same id
IHostIdProvider hostIdProvider = new FakeHostIdProvider();
var host = NewBuilder(prog)
.ConfigureServices(services => services.AddSingleton(hostIdProvider))
var host = NewBuilder(prog, builder => builder.UseHostId(Guid.NewGuid().ToString("N")))
.Build();

// Process the blob first
Expand Down Expand Up @@ -274,12 +273,10 @@ await _testContainer
var prog = new BlobGetsProcessedOnlyOnce_SingleHost_Program();


var idProvider = new FakeHostIdProvider();
var host1 = NewBuilder(prog)
.ConfigureServices(services => services.AddSingleton<IHostIdProvider>(idProvider))
string hostId = Guid.NewGuid().ToString("N");
var host1 = NewBuilder(prog, builder=>builder.UseHostId(hostId))
.Build();
var host2 = NewBuilder(prog)
.ConfigureServices(services => services.AddSingleton<IHostIdProvider>(idProvider))
var host2 = NewBuilder(prog, builder => builder.UseHostId(hostId))
.Build();

using (prog._completedEvent = new ManualResetEvent(initialState: false))
Expand Down
Expand Up @@ -72,14 +72,11 @@ public async Task DispatchQueueBatchTriggerTest()
{
_host = new HostBuilder()
.ConfigureDefaultTestHost<SampleTrigger>(b =>
{
b.AddAzureStorage()
.AddExtension<DispatchQueueTestConfig>();
})
.ConfigureServices(services =>
{
// each test will have a unique hostId so that consecutive test run will not be affected by clean up code
services.AddSingleton<IHostIdProvider>(new FakeHostIdProvider());
b.UseHostId(Guid.NewGuid().ToString("N"))
.AddAzureStorage()
.AddExtension<DispatchQueueTestConfig>();
})
.Build();

Expand Down Expand Up @@ -107,14 +104,11 @@ public async void PoisonQueueTest()
{
_host = new HostBuilder()
.ConfigureDefaultTestHost<SampleTriggerWithPoisonQueue>(b =>
{
b.AddAzureStorage()
.AddExtension<DispatchQueueTestConfig>();
})
.ConfigureServices(services =>
{
// each test will have a unique hostId so that consecutive test run will not be affected by clean up code
services.AddSingleton<IHostIdProvider>(new FakeHostIdProvider());
b.UseHostId(Guid.NewGuid().ToString("N"))
.AddAzureStorage()
.AddExtension<DispatchQueueTestConfig>();
})
.Build();

Expand Down
Expand Up @@ -636,7 +636,8 @@ private IHost CreateTestJobHost<TProg>(int hostId, Action<IHostBuilder> extraCon
var hostBuilder = new HostBuilder()
.ConfigureDefaultTestHost<TProg>(b =>
{
b.AddAzureStorage()
b.UseHostId(TestHostId)
.AddAzureStorage()
.AddExtension<TestTriggerAttributeBindingProvider>();
RuntimeStorageHostBuilderExtensions.AddAzureStorageCoreServices(b);
})
Expand All @@ -645,7 +646,6 @@ private IHost CreateTestJobHost<TProg>(int hostId, Action<IHostBuilder> extraCon
{
services.AddSingleton<IJobActivator>(activator);
services.AddSingleton<INameResolver>(_resolver);
services.AddSingleton<IHostIdProvider>(new FakeHostIdProvider(TestHostId));
services.Configure((JobHostQueuesOptions o) => o.MaxPollingInterval = TimeSpan.FromSeconds(2));
services.Configure((SingletonOptions o) =>
{
Expand Down
Expand Up @@ -194,13 +194,13 @@ internal static class FunctionalTest
{
StorageAccountProvider storageAccountProvider = null; // new FakeStorageAccountProvider(storageAccount); $$$

IHostIdProvider hostIdProvider = new FakeHostIdProvider();
IWebJobsExceptionHandler exceptionHandler = new TaskBackgroundExceptionHandler<TResult>(taskSource);

return new HostBuilder()
.ConfigureDefaultTestHost(b =>
{
b.AddAzureStorage();
b.UseHostId(Guid.NewGuid().ToString("N"))
.AddAzureStorage();
}, programType)
.ConfigureServices(services =>
{
Expand All @@ -214,7 +214,6 @@ internal static class FunctionalTest
services.AddSingleton<IFunctionInstanceLoggerProvider>(new NullFunctionInstanceLoggerProvider(functionInstanceLogger));
services.AddSingleton<IHostInstanceLoggerProvider>(new NullHostInstanceLoggerProvider());
services.AddSingleton<IFunctionOutputLoggerProvider>(new NullFunctionOutputLoggerProvider());
services.AddSingleton(hostIdProvider);
})
.Build();
}
Expand Down

This file was deleted.

0 comments on commit c81e77a

Please sign in to comment.