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. } }