public async Task RegisterAsync(BlobServiceClient blobServiceClient, BlobContainerClient container, ITriggerExecutor <BlobTriggerExecutorContext> triggerExecutor, CancellationToken cancellationToken) { ThrowIfDisposed(); // Initial background scans for all containers happen on first Execute call. // Prevent accidental late registrations. // (Also prevents incorrect concurrent execution of Register with Execute.) if (_initialScanThread.ThreadState != ThreadState.Unstarted) { throw new InvalidOperationException("All registrations must be created before execution begins."); } ICollection <ITriggerExecutor <BlobTriggerExecutorContext> > containerRegistrations; if (_registrations.ContainsKey(container)) { containerRegistrations = _registrations[container]; } else { containerRegistrations = new List <ITriggerExecutor <BlobTriggerExecutorContext> >(); _registrations.Add(container, containerRegistrations); } containerRegistrations.Add(triggerExecutor); if (!_logListeners.ContainsKey(blobServiceClient)) { BlobLogListener logListener = await BlobLogListener.CreateAsync(blobServiceClient, _exceptionHandler, _logger, cancellationToken).ConfigureAwait(false); _logListeners.Add(blobServiceClient, logListener); } }
public void GetPathsForValidBlobWrites_Returns_ValidBlobWritesOnly() { StorageAnalyticsLogEntry[] entries = new[] { // This is a valid write entry with a valid path new StorageAnalyticsLogEntry { ServiceType = StorageServiceType.Blob, OperationType = StorageServiceOperationType.PutBlob, RequestedObjectKey = @"/storagesample/sample-container/""0x8D199A96CB71468""/sample-blob.txt" }, // This is an invalid path and will be filtered out new StorageAnalyticsLogEntry { ServiceType = StorageServiceType.Blob, OperationType = StorageServiceOperationType.PutBlob, RequestedObjectKey = "/" }, // This does not constitute a write and will be filtered out new StorageAnalyticsLogEntry { ServiceType = StorageServiceType.Blob, OperationType = null, RequestedObjectKey = @"/storagesample/sample-container/""0x8D199A96CB71468""/sample-blob.txt" } }; IEnumerable <BlobPath> validPaths = BlobLogListener.GetPathsForValidBlobWrites(entries); BlobPath singlePath = validPaths.Single(); Assert.AreEqual("sample-container", singlePath.ContainerName); Assert.AreEqual(@"""0x8D199A96CB71468""/sample-blob.txt", singlePath.BlobName); }