public async Task Test()
        {
            var containerName = "test-internal1";

            var acs = Environment.GetEnvironmentVariable("AzureWebJobsStorage");

            if (acs == null)
            {
                Assert.False(true, "Missing AzureWebJobsStorage setting");
            }

            // Create a real Blob Container Sas URI
            var account1  = CloudStorageAccount.Parse(acs);
            var client    = account1.CreateCloudBlobClient();
            var container = client.GetContainerReference(containerName);
            await container.CreateIfNotExistsAsync(); // this will throw if acs is bad

            var now = DateTime.UtcNow;
            var sig = container.GetSharedAccessSignature(new SharedAccessBlobPolicy
            {
                Permissions            = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List,
                SharedAccessStartTime  = now.AddDays(-10),
                SharedAccessExpiryTime = now.AddDays(10)
            });

            var fakeSasUri = container.Uri + sig;
            var prog       = new BasicProg();

            IHost host = new HostBuilder()
                         .ConfigureDefaultTestHost(prog, b =>
            {
                b.AddAzureStorage();
                RuntimeStorageWebJobsBuilderExtensions.AddAzureStorageCoreServices(b);
            })
                         .ConfigureAppConfiguration(config =>
            {
                // Set env to the SAS container and clear out all other storage.
                config.AddInMemoryCollection(new Dictionary <string, string>()
                {
                    { "AzureWebJobs:InternalSasBlobContainer", fakeSasUri },
                    { "AzureWebJobsStorage", null },
                    { "AzureWebJobsDashboard", null }
                });
            })
                         .Build();

            var internalOptions = host.Services.GetService <DistributedLockManagerContainerProvider>();

            Assert.NotNull(internalOptions);
            Assert.Equal(container.Name, internalOptions.InternalContainer.Name);

            await host.GetJobHost().CallAsync(nameof(BasicProg.Foo));

            Assert.Equal(1, prog._count); // Verify successfully called.
        }
        public async Task Test()
        {
            var containerName = "test-internal1";

            var acs = Environment.GetEnvironmentVariable("AzureWebJobsStorage");

            if (acs == null)
            {
                Assert.False(true, "Missing AzureWebJobsStorage setting");
            }

            // Create a real Blob Container Sas URI
            var account1  = CloudStorageAccount.Parse(acs);
            var client    = account1.CreateCloudBlobClient();
            var container = client.GetContainerReference(containerName);
            await container.CreateIfNotExistsAsync(); // this will throw if acs is bad

            var now = DateTime.UtcNow;
            var sig = container.GetSharedAccessSignature(new SharedAccessBlobPolicy
            {
                Permissions            = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.List,
                SharedAccessStartTime  = now.AddDays(-10),
                SharedAccessExpiryTime = now.AddDays(10)
            });

            var fakeSasUri = container.Uri + sig;

            // Set env to the SAS container and clear out all other storage.
            using (EnvVarHolder.Set("AzureWebJobsInternalSasBlobContainer", fakeSasUri))
                using (EnvVarHolder.Set("AzureWebJobsStorage", null))
                    using (EnvVarHolder.Set("AzureWebJobsDashboard", null))
                    {
                        var prog      = new BasicProg();
                        var activator = new FakeActivator(prog);
                        JobHostConfiguration config = new JobHostConfiguration()
                        {
                            TypeLocator = new FakeTypeLocator(typeof(BasicProg))
                        };

                        Assert.NotNull(config.InternalStorageConfiguration);
                        Assert.Equal(container.Name, config.InternalStorageConfiguration.InternalContainer.Name);

                        config.JobActivator = activator;
                        config.HostId       = Guid.NewGuid().ToString("n");
                        config.DashboardConnectionString = null;
                        config.StorageConnectionString   = null;


                        var host = new JobHost(config);
                        await host.CallAsync("Foo");

                        Assert.Equal(1, prog._count); // Verify successfully called.
                    }
        }