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);
            }
Пример #4
0
            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);
            }
Пример #5
0
            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);
            }
Пример #6
0
            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);
            }
Пример #7
0
            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);
            }
Пример #9
0
            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());
            }
Пример #10
0
            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());
            }
Пример #15
0
            public void NoHandlersRequired()
            {
                var typeLocator = new FakeTypeLocator();

                Assert.NotNull(new EventHandlerRegistry(typeLocator, serviceProvider.Object, sagaStore.Object, new Lazy <IPublishCommands>(() => commandPublisher.Object)));
            }
Пример #16
0
        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)));
            }