Ejemplo n.º 1
0
        static async Task Main(string[] args)
        {
            var connectionString = Environment.GetEnvironmentVariable("STORAGE_CONNECTION_STRING");

            if (string.IsNullOrEmpty(connectionString))
            {
                throw new InvalidOperationException("Environment variable STORAGE_CONNECTION_STRING is not set");
            }

            Log($"ITERATIONS: {_iterations}");
            Log($"UPLOAD_SIZE: {_uploadSize}");
            Log($"BUFFER_SIZE: {_bufferSize}");
            Log($"MAX_CONCURRENCY: {_maxConcurrency}");

            // Enable SDK logging (with timestamps)
            using var azureListener = new AzureEventSourceListener(
                      (eventData, text) => Log(String.Format("[{1}] {0}: {2}", eventData.EventSource.Name, eventData.Level, text)),
                      EventLevel.Verbose);

            // Enable System.Net logging
            using var httpListener    = new LogEventListener("Microsoft-System-Net-Http");
            using var socketsListener = new LogEventListener("Microsoft-System-Net-Sockets");

            var containerName = $"container{DateTime.Now.Ticks}";

            // Test custom transport with shorter timeout
            var containerClient = new BlobContainerClient(connectionString, containerName, new BlobClientOptions()
            {
                Transport = new HttpClientTransport(new HttpClient()
                {
                    Timeout = _httpClientTimeout
                })
            });

            Log($"Creating container {containerName}");
            await containerClient.CreateAsync();

            Log($"Created container {containerName}");

            var randomBuffer = new byte[_uploadSize];

            new Random(0).NextBytes(randomBuffer);
            var randomStream = new NonSeekableMemoryStream(randomBuffer);

            for (var i = 0; i < _iterations; i++)
            {
                try
                {
                    Log($"Iteration {i}");

                    var blobName   = $"blob{DateTime.Now.Ticks}";
                    var blobClient = containerClient.GetBlobClient(blobName);

                    randomStream.Seek(0, SeekOrigin.Begin);

                    Log($"Uploading blob {blobName}");
                    await blobClient.UploadAsync(randomStream, transferOptions : new StorageTransferOptions()
                    {
                        MaximumConcurrency    = _maxConcurrency,
                        MaximumTransferLength = _bufferSize
                    });

                    Log($"Uploaded blob {blobName}");

                    Log($"Deleting blob {blobName}");
                    await blobClient.DeleteAsync();

                    Log($"Deleted blob {blobName}");
                }
                catch (Exception e)
                {
                    Log(e);
                }
            }

            Log($"Deleting container {containerName}");
            await containerClient.DeleteAsync();

            Log($"Deleted container {containerName}");
        }