public void ThrowMappingExceptionIfSagaDoesNotHaveDefaultPublicConstructor() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(FakeSaga)); var ex = Assert.Throws<MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.SagaDefaultConstructorRequired.FormatWith(typeof(FakeSaga)), ex.Message); }
public void ThrowMappingExceptionIfSagaDoesNotHaveAtLeastOneInitiatingEvent() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(FakeSagaWithNoStartingEvent)); var ex = Assert.Throws<MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.SagaMustHaveAtLeastOneInitiatingEvent.FormatWith(typeof(FakeSagaWithNoStartingEvent)), ex.Message); }
public void ThrowMappingExceptionIfNotAllHandleMethodsConfigured() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(FakeSagaWithMissingConfiguration)); var ex = Assert.Throws<MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.EventTypeNotConfigured.FormatWith(typeof(FakeSagaWithMissingConfiguration), typeof(FakeEvent)), ex.Message); }
public void ThrowMappingExceptionIfSagaDoesNotHaveAtLeastOneInitiatingEvent() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(FakeSagaWithNoStartingEvent)); var ex = Assert.Throws <MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.SagaMustHaveAtLeastOneInitiatingEvent.FormatWith(typeof(FakeSagaWithNoStartingEvent)), ex.Message); }
public void ThrowMappingExceptionIfNotAllHandleMethodsConfigured() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(FakeSagaWithMissingConfiguration)); var ex = Assert.Throws <MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.EventTypeNotConfigured.FormatWith(typeof(FakeSagaWithMissingConfiguration), typeof(FakeEvent)), ex.Message); }
public void ThrowMappingExceptionIfSagaDoesNotHaveDefaultPublicConstructor() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(FakeSaga)); var ex = Assert.Throws <MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.SagaDefaultConstructorRequired.FormatWith(typeof(FakeSaga)), ex.Message); }
public void ThrowMappingExceptionIfMoreThanOneMappingStrategyDefined() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(MultipleStrategiesHandler)); var ex = Assert.Throws <MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.EventHandlerHandleByStrategyAmbiguous.FormatWith(typeof(MultipleStrategiesHandler)), ex.Message); }
public void ThrowMappingExceptionIfMoreThanOneMappingStrategyDefined() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(MultipleStrategiesHandler)); var ex = Assert.Throws<MappingException>(() => new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object))); Assert.Equal(Exceptions.EventHandlerHandleByStrategyAmbiguous.FormatWith(typeof(MultipleStrategiesHandler)), ex.Message); }
public void CustomMappingStrategyUsedWhenExplicitStrategyDefined() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(ExplicitStrategyAggregate)); var registry = new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object)); var handler = registry.GetHandlersFor(new FakeEvent()); Assert.Equal(1, handler.Count()); }
public void ReturnEventHandlersBeforeSagaEventHandlers() { var typeLocator = new FakeTypeLocator(typeof(PrimaryHandler), typeof(PrimarySaga), typeof(FakeEvent)); var registry = new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object)); var handlers = registry.GetHandlersFor(new FakeEvent()).ToArray(); Assert.Equal(typeof(PrimaryHandler), handlers[0].HandlerType); Assert.Equal(typeof(PrimarySaga), handlers[1].HandlerType); }
public void DefaultTypeForTrigger() { var ext = new JArrayTriggerExtension(); var prog = new FakeTypeLocator(); JobHostConfiguration config = TestHelpers.NewConfig(prog, ext); var host = new JobHost(config); IJobHostMetadataProvider metadataProvider = host.CreateMetadataProvider(); var attr = new Test9Attribute(null); var type = metadataProvider.GetDefaultType(attr, FileAccess.Read, null); Assert.Equal(typeof(JArray), type); }
public void DefaultTypeForJObjectCollector() { var ext = new TestExtension3(); var prog = new FakeTypeLocator(); JobHostConfiguration config = TestHelpers.NewConfig(prog, ext); var host = new JobHost(config); IJobHostMetadataProvider metadataProvider = host.CreateMetadataProvider(); var attr = new Test9Attribute(null); var type = metadataProvider.GetDefaultType(attr, FileAccess.Write, null); // Explicitly should be Jobject since that's all the collector is registered as. Assert.Equal(typeof(IAsyncCollector <JObject>), type); }
public void DefaultTypeForOpenTypeTrigger() { var ext = new OpenTypeTriggerExtension(); var prog = new FakeTypeLocator(); JobHostConfiguration config = TestHelpers.NewConfig(prog, ext); var host = new JobHost(config); IJobHostMetadataProvider metadataProvider = host.CreateMetadataProvider(); var attr = new Test9Attribute(null); var type = metadataProvider.GetDefaultType(attr, FileAccess.Write, null); // The trigger handles Open type, which means it will first pull byte[]. Assert.Equal(typeof(byte[]), type); }
public void CustomMappingStrategyUsedWhenExplicitStrategyDefined() { var typeLocator = new FakeTypeLocator(typeof(FakeEvent), typeof(ExplicitStrategyAggregate)); var registry = new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object)); var handler = registry.GetHandlersFor(new FakeEvent()); Assert.Equal(1, handler.Count()); }
public void NoHandlersRequired() { var typeLocator = new FakeTypeLocator(); Assert.NotNull(new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object))); }
private static IServiceProvider CreateServiceProvider <TResult>(IStorageAccount storageAccount, Type programType, IExtensionTypeLocator extensionTypeLocator, IJobActivator activator, TaskCompletionSource <TResult> taskSource, IFunctionInstanceLogger functionInstanceLogger, IExtensionRegistry extensions = null) { IStorageAccountProvider storageAccountProvider = new FakeStorageAccountProvider { StorageAccount = storageAccount }; IHostIdProvider hostIdProvider = new FakeHostIdProvider(); INameResolver nameResolver = null; IQueueConfiguration queueConfiguration = new FakeQueueConfiguration(storageAccountProvider); IBackgroundExceptionDispatcher backgroundExceptionDispatcher = new TaskBackgroundExceptionDispatcher <TResult>(taskSource); ContextAccessor <IMessageEnqueuedWatcher> messageEnqueuedWatcherAccessor = new ContextAccessor <IMessageEnqueuedWatcher>(); ContextAccessor <IBlobWrittenWatcher> blobWrittenWatcherAccessor = new ContextAccessor <IBlobWrittenWatcher>(); ISharedContextProvider sharedContextProvider = new SharedContextProvider(); if (extensions == null) { extensions = new DefaultExtensionRegistry(); } ITriggerBindingProvider triggerBindingProvider = DefaultTriggerBindingProvider.Create(nameResolver, storageAccountProvider, extensionTypeLocator, hostIdProvider, queueConfiguration, backgroundExceptionDispatcher, messageEnqueuedWatcherAccessor, blobWrittenWatcherAccessor, sharedContextProvider, extensions, TextWriter.Null); IBindingProvider bindingProvider = DefaultBindingProvider.Create(nameResolver, storageAccountProvider, extensionTypeLocator, messageEnqueuedWatcherAccessor, blobWrittenWatcherAccessor, extensions); IFunctionInstanceLoggerProvider functionInstanceLoggerProvider = new NullFunctionInstanceLoggerProvider(); IFunctionOutputLoggerProvider functionOutputLoggerProvider = new NullFunctionOutputLoggerProvider(); Task <IFunctionOutputLogger> task = functionOutputLoggerProvider.GetAsync(CancellationToken.None); task.Wait(); IFunctionOutputLogger functionOutputLogger = task.Result; FunctionExecutor executor = new FunctionExecutor(functionInstanceLogger, functionOutputLogger, backgroundExceptionDispatcher); ITypeLocator typeLocator = new FakeTypeLocator(programType); FunctionIndexProvider functionIndexProvider = new FunctionIndexProvider( typeLocator, triggerBindingProvider, bindingProvider, activator, executor, extensions); IJobHostContextFactory contextFactory = new FakeJobHostContextFactory { TypeLocator = typeLocator, FunctionIndexProvider = functionIndexProvider, StorageAccountProvider = storageAccountProvider, BackgroundExceptionDispatcher = backgroundExceptionDispatcher, BindingProvider = bindingProvider, ConsoleProvider = new NullConsoleProvider(), HostInstanceLoggerProvider = new NullHostInstanceLoggerProvider(), FunctionExecutor = executor, FunctionInstanceLoggerProvider = functionInstanceLoggerProvider, FunctionOutputLoggerProvider = functionOutputLoggerProvider, HostIdProvider = hostIdProvider, QueueConfiguration = queueConfiguration }; return(new FakeServiceProvider { ContextFactory = contextFactory }); }
public void ReturnBaseTypesBeforeDerivedTypes() { var typeLocator = new FakeTypeLocator(typeof(PrimaryHandler), typeof(FakeEvent), typeof(DerivedFakeEvent)); var registry = new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object)); var handlers = registry.GetHandlersFor(new DerivedFakeEvent()).ToArray(); Assert.Equal(typeof(FakeEvent), handlers[0].EventType); Assert.Equal(typeof(DerivedFakeEvent), handlers[1].EventType); }
public void ReturnHandlersOfSameEventTypeSortedByHandlerFullName() { var typeLocator = new FakeTypeLocator(typeof(PrimaryHandler), typeof(SecondaryHandler), typeof(PrimarySaga), typeof(SecondarySaga), typeof(FakeEvent)); var registry = new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object)); var handlers = registry.GetHandlersFor(new FakeEvent()).ToArray(); Assert.Equal(typeof(PrimaryHandler), handlers[0].HandlerType); Assert.Equal(typeof(SecondaryHandler), handlers[1].HandlerType); Assert.Equal(typeof(PrimarySaga), handlers[2].HandlerType); Assert.Equal(typeof(SecondarySaga), handlers[3].HandlerType); }
public void NoHandlersRequired() { var typeLocator = new FakeTypeLocator(); Assert.NotNull(new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy<IPublishCommands>(() => commandPublisher.Object))); }