public void DefaultWorkerId_IsMachineName()
        {
            var connectionStringResolver = new TestConnectionStringResolver();
            var mockOptions  = new OptionsWrapper <DurableTaskOptions>(new DurableTaskOptions());
            var nameResolver = new Mock <INameResolver>().Object;
            var factory      = new AzureStorageDurabilityProviderFactory(
                mockOptions,
                connectionStringResolver,
                nameResolver,
                NullLoggerFactory.Instance,
                TestHelpers.GetMockPlatformInformationService());

            var settings = factory.GetAzureStorageOrchestrationServiceSettings();

            Assert.Equal(Environment.MachineName, settings.WorkerId);
        }
Example #2
0
        public void EnvironmentIsVMSS_WorkerIdFromEnvironmentVariables()
        {
            var connectionStringResolver = new TestConnectionStringResolver();
            var mockOptions  = new OptionsWrapper <DurableTaskOptions>(new DurableTaskOptions());
            var nameResolver = new SimpleNameResolver(new Dictionary <string, string>()
            {
                { "WEBSITE_CURRENT_STAMPNAME", "waws-prod-euapbn1-003" },
                { "RoleInstanceId", "dw0SmallDedicatedWebWorkerRole_hr0HostRole-3-VM-13" },
            });

            var factory = new AzureStorageDurabilityProviderFactory(mockOptions, connectionStringResolver, nameResolver);

            var settings = factory.GetAzureStorageOrchestrationServiceSettings();

            Assert.Equal("waws-prod-euapbn1-003:dw0SmallDedicatedWebWorkerRole_hr0HostRole-3-VM-13", settings.WorkerId);
        }
        private static DurableTaskExtension GetDurableTaskConfig()
        {
            var options = new DurableTaskOptions();

            options.HubName         = "DurableTaskHub";
            options.NotificationUrl = new Uri("https://sampleurl.net");
            var wrappedOptions           = new OptionsWrapper <DurableTaskOptions>(options);
            var connectionStringResolver = new TestConnectionStringResolver();
            var serviceFactory           = new AzureStorageDurabilityProviderFactory(wrappedOptions, connectionStringResolver);

            return(new DurableTaskExtension(
                       wrappedOptions,
                       new LoggerFactory(),
                       TestHelpers.GetTestNameResolver(),
                       serviceFactory,
                       new DurableHttpMessageHandlerFactory()));
        }
        public static JobHost CreateJobHost(
            IOptions <DurableTaskOptions> options,
            string storageProvider,
            ILoggerProvider loggerProvider,
            INameResolver nameResolver,
            IDurableHttpMessageHandlerFactory durableHttpMessageHandler,
            ILifeCycleNotificationHelper lifeCycleNotificationHelper,
            IMessageSerializerSettingsFactory serializerSettings)
        {
            var config = new JobHostConfiguration {
                HostId = "durable-task-host"
            };

            config.TypeLocator = TestHelpers.GetTypeLocator();

            var connectionResolver = new WebJobsConnectionStringProvider();

            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(loggerProvider);

            IDurabilityProviderFactory orchestrationServiceFactory = new AzureStorageDurabilityProviderFactory(options, connectionResolver);

            var extension = new DurableTaskExtension(options, loggerFactory, nameResolver, orchestrationServiceFactory, durableHttpMessageHandler, lifeCycleNotificationHelper, serializerSettings);

            config.UseDurableTask(extension);

            // Mock INameResolver for not setting EnvironmentVariables.
            if (nameResolver != null)
            {
                config.AddService(nameResolver);
            }

            // Performance is *significantly* worse when dashboard logging is enabled, at least
            // when running in the storage emulator. Disabling to keep tests running quickly.
            config.DashboardConnectionString = null;

            // Add test logger
            config.LoggerFactory = loggerFactory;

            var host = new JobHost(config);

            return(host);
        }
        public void ConsumptionDefaultsForPythonAreApplied()
        {
            var connectionStringResolver = new TestConnectionStringResolver();
            var mockOptions  = new OptionsWrapper <DurableTaskOptions>(new DurableTaskOptions());
            var nameResolver = new Mock <INameResolver>().Object;
            var factory      = new AzureStorageDurabilityProviderFactory(
                mockOptions,
                connectionStringResolver,
                nameResolver,
                NullLoggerFactory.Instance,
                TestHelpers.GetMockPlatformInformationService(inConsumption: true, isPython: true));

            var settings = factory.GetAzureStorageOrchestrationServiceSettings();

            Assert.Equal(32, settings.ControlQueueBufferThreshold);
            Assert.Equal(5, settings.MaxConcurrentTaskOrchestrationWorkItems);
            Assert.Equal(10, settings.MaxConcurrentTaskActivityWorkItems);
            Assert.Equal(25, settings.MaxStorageOperationConcurrency);
        }
        public void ConsumptionDefaultsAreNotAlwaysApplied()
        {
            var connectionStringResolver = new TestConnectionStringResolver();
            var mockOptions  = new OptionsWrapper <DurableTaskOptions>(new DurableTaskOptions());
            var nameResolver = new Mock <INameResolver>().Object;
            var factory      = new AzureStorageDurabilityProviderFactory(
                mockOptions,
                connectionStringResolver,
                nameResolver,
                NullLoggerFactory.Instance,
                TestHelpers.GetMockPlatformInformationService(inConsumption: false));

            var settings = factory.GetAzureStorageOrchestrationServiceSettings();

            // We want to make sure that the consumption defaults (listed below)
            // aren't applied on non-consumption plans.
            Assert.NotEqual(32, settings.ControlQueueBufferThreshold);
            Assert.NotEqual(5, settings.MaxConcurrentTaskOrchestrationWorkItems);
            Assert.NotEqual(10, settings.MaxConcurrentTaskActivityWorkItems);
            Assert.NotEqual(25, settings.MaxStorageOperationConcurrency);
        }
        public static ITestHost CreateJobHost(
            IOptions <DurableTaskOptions> options,
            string storageProvider,
            ILoggerProvider loggerProvider,
            INameResolver nameResolver,
            IDurableHttpMessageHandlerFactory durableHttpMessageHandler,
            ILifeCycleNotificationHelper lifeCycleNotificationHelper,
            IMessageSerializerSettingsFactory serializerSettingsFactory,
            IApplicationLifetimeWrapper shutdownNotificationService = null,
            Action <ITelemetry> onSend = null,
#pragma warning disable CS0612 // Type or member is obsolete
            IPlatformInformationService platformInformationService = null)
#pragma warning restore CS0612 // Type or member is obsolete
        {
            var config = new JobHostConfiguration {
                HostId = "durable-task-host"
            };

            config.TypeLocator = TestHelpers.GetTypeLocator();

            var connectionResolver = new WebJobsConnectionStringProvider();

            var loggerFactory = new LoggerFactory();

            loggerFactory.AddProvider(loggerProvider);

            // Unless otherwise specified, use legacy partition management for tests as it makes the task hubs start up faster.
            // These tests run on a single task hub workers, so they don't test partition management anyways, and that is tested
            // in the DTFx repo.
            if (!options.Value.StorageProvider.ContainsKey(nameof(AzureStorageOptions.UseLegacyPartitionManagement)))
            {
                options.Value.StorageProvider.Add(nameof(AzureStorageOptions.UseLegacyPartitionManagement), true);
            }

            platformInformationService = platformInformationService ?? TestHelpers.GetMockPlatformInformationService();

            IDurabilityProviderFactory orchestrationServiceFactory = new AzureStorageDurabilityProviderFactory(
                options,
                connectionResolver,
                nameResolver,
                loggerFactory,
                platformInformationService);

            var extension = new DurableTaskExtension(
                options,
                loggerFactory,
                nameResolver,
                new[] { orchestrationServiceFactory },
                shutdownNotificationService ?? new TestHostShutdownNotificationService(),
                durableHttpMessageHandler,
                lifeCycleNotificationHelper,
                serializerSettingsFactory,
                platformInformationService);

            config.UseDurableTask(extension);

            // Mock INameResolver for not setting EnvironmentVariables.
            if (nameResolver != null)
            {
                config.AddService(nameResolver);
            }

            // Performance is *significantly* worse when dashboard logging is enabled, at least
            // when running in the storage emulator. Disabling to keep tests running quickly.
            config.DashboardConnectionString = null;

            // Add test logger
            config.LoggerFactory = loggerFactory;

            var host = new JobHost(config);

            return(new FunctionsV1HostWrapper(host, options, connectionResolver));
        }