public async Task UpdateLatestScan_Updates() { string hostId = Guid.NewGuid().ToString(); string storageAccountName = Guid.NewGuid().ToString(); string containerName = Guid.NewGuid().ToString(); var account = new XFakeStorageAccount(); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference(HostContainerNames.Hosts); await container.CreateIfNotExistsAsync(); DateTime now = DateTime.UtcNow; DateTime past = now.AddMinutes(-1); var blob = GetBlockBlobReference(client, hostId, storageAccountName, containerName); await blob.UploadTextAsync(string.Format("{{ 'LatestScan' : '{0}' }}", past.ToString("o"))); var manager = new StorageBlobScanInfoManager(hostId, client); await manager.UpdateLatestScanAsync(storageAccountName, containerName, now); var scanInfo = GetBlockBlobReference(client, hostId, storageAccountName, containerName).DownloadText(); var scanInfoJson = JObject.Parse(scanInfo); var storedTime = (DateTime)scanInfoJson["LatestScan"]; Assert.Equal(now, storedTime); Assert.Equal(now, await manager.LoadLatestScanAsync(storageAccountName, containerName)); }
public async Task Blob_IfBoundToCloudBlockBlob_BindsAndCreatesContainerButNotBlob() { // Act var account = new XFakeStorageAccount(); var prog = new BindToCloudBlockBlobProgram(); IHost host = new HostBuilder() .ConfigureDefaultTestHost <BindToCloudBlockBlobProgram>(prog, builder => { builder.AddAzureStorage() .UseStorage(account); }) .Build(); var jobHost = host.GetJobHost <BindToCloudBlockBlobProgram>(); await jobHost.CallAsync(nameof(BindToCloudBlockBlobProgram.Run)); var result = prog.Result; // Assert Assert.NotNull(result); Assert.Equal(BlobName, result.Name); Assert.NotNull(result.Container); Assert.Equal(ContainerName, result.Container.Name); CloudBlobContainer container = GetContainerReference(account, ContainerName); Assert.True(await container.ExistsAsync()); CloudBlockBlob blob = container.GetBlockBlobReference(BlobName); Assert.False(await blob.ExistsAsync()); }
public async Task Trigger_CanBeInstanceMethod() { // Arrange string expectedGuid = Guid.NewGuid().ToString(); CloudQueueMessage expectedMessage = new CloudQueueMessage(expectedGuid); var account = new XFakeStorageAccount(); await account.AddQueueMessageAsync(expectedMessage, QueueName); var prog = new InstanceProgram(); IHost host = new HostBuilder() .ConfigureDefaultTestHost <InstanceProgram>(prog, builder => { builder.AddAzureStorage() .UseStorage(account); }) .Build(); // Act var jobHost = host.GetJobHost <InstanceProgram>(); var result = await jobHost.RunTriggerAsync <CloudQueueMessage>(); // Assert Assert.Equal(expectedGuid, result.AsString); }
private static StorageAccount CreateFakeStorageAccount() { var account = new XFakeStorageAccount(); // make sure our system containers are present var container = CreateContainer(account, "azure-webjobs-hosts"); return(account); }
private static TResult CallQueueTrigger <TResult>(object message, Type programType, Action <TaskCompletionSource <TResult> > setTaskSource) { var account = new XFakeStorageAccount(); var method = programType.GetMethod("Run"); Assert.NotNull(method); var result = FunctionalTest.Call <TResult>(account, programType, method, new Dictionary <string, object> { { "message", message } }, setTaskSource); return(result); }
public async Task LoadLatestScan_NoContainer_ReturnsNull() { string hostId = Guid.NewGuid().ToString(); string storageAccountName = Guid.NewGuid().ToString(); string containerName = Guid.NewGuid().ToString(); var account = new XFakeStorageAccount(); var client = account.CreateCloudBlobClient(); // by default there is no table in this client var manager = new StorageBlobScanInfoManager(hostId, client); var result = await manager.LoadLatestScanAsync(storageAccountName, containerName); Assert.Null(result); }
public async Task LoadLatestScan_NoBlob_ReturnsNull() { string hostId = Guid.NewGuid().ToString(); string storageAccountName = Guid.NewGuid().ToString(); string containerName = Guid.NewGuid().ToString(); var account = new XFakeStorageAccount(); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference(HostContainerNames.Hosts); await container.CreateIfNotExistsAsync(); var manager = new StorageBlobScanInfoManager(hostId, client); var result = await manager.LoadLatestScanAsync(storageAccountName, containerName); Assert.Null(result); }
public async Task Trigger_IfClassIsDisposable_Disposes() { // Arrange CloudQueueMessage expectedMessage = new CloudQueueMessage("ignore"); var account = new XFakeStorageAccount(); await account.AddQueueMessageAsync(expectedMessage, QueueName); IHost host = new HostBuilder() .ConfigureDefaultTestHost <DisposeInstanceProgram>(builder => { builder.UseStorage(account); }) .Build(); // Act & Assert var jobHost = host.GetJobHost <DisposeInstanceProgram>(); var result = await jobHost.RunTriggerAsync <object>(DisposeInstanceProgram.TaskSource); }
public async Task LoadLatestScan_Returns_Timestamp() { string hostId = "host-" + Guid.NewGuid().ToString(); string storageAccountName = "account=" + Guid.NewGuid().ToString(); string containerName = "container-" + Guid.NewGuid().ToString(); var account = new XFakeStorageAccount(); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference(HostContainerNames.Hosts); await container.CreateIfNotExistsAsync(); DateTime now = DateTime.UtcNow; var blob = GetBlockBlobReference(client, hostId, storageAccountName, containerName); await blob.UploadTextAsync(string.Format("{{ \"LatestScan\" : \"{0}\" }}", now.ToString("o"))); var manager = new StorageBlobScanInfoManager(hostId, client); var result = await manager.LoadLatestScanAsync(storageAccountName, containerName); Assert.Equal(now, result); }
public void FlushAfterAdd_PersistsEntity() { // Arrange var account = new XFakeStorageAccount(); var client = account.CreateCloudTableClient(); var table = client.GetTableReference("Table"); TableEntityWriter <ITableEntity> product = new TableEntityWriter <ITableEntity>(table); const string partitionKey = "PK"; const string rowKey = "RK"; DynamicTableEntity entity = new DynamicTableEntity(partitionKey, rowKey); product.Add(entity); // Act product.FlushAsync().GetAwaiter().GetResult(); // Assert DynamicTableEntity persisted = table.Retrieve <DynamicTableEntity>(partitionKey, rowKey); Assert.NotNull(persisted); }
public async Task Trigger_IfClassConstructorHasDependencies_CanUseCustomJobActivator() { // Arrange const string expectedResult = "abc"; Mock <IFactory <string> > resultFactoryMock = new Mock <IFactory <string> >(MockBehavior.Strict); resultFactoryMock.Setup(f => f.Create()).Returns(expectedResult); IFactory <string> resultFactory = resultFactoryMock.Object; Mock <IJobActivator> activatorMock = new Mock <IJobActivator>(MockBehavior.Strict); activatorMock.Setup(a => a.CreateInstance <InstanceCustomActivatorProgram>()) .Returns(() => new InstanceCustomActivatorProgram(resultFactory)); IJobActivator activator = activatorMock.Object; CloudQueueMessage message = new CloudQueueMessage("ignore"); var account = new XFakeStorageAccount(); await account.AddQueueMessageAsync(message, QueueName); IHost host = new HostBuilder() .ConfigureDefaultTestHost <InstanceCustomActivatorProgram>(builder => { builder.UseStorage(account); }, null, activator) .Build(); // Act var jobHost = host.GetJobHost <InstanceCustomActivatorProgram>(); Assert.NotNull(jobHost); var result = await jobHost.RunTriggerAsync <string>(InstanceCustomActivatorProgram.TaskSource); // Assert Assert.Same(expectedResult, result); }