public async void PutBlockAsync_DifferentLengthBlockIds_ThrowsInvalidBlobOrBlockAzureException()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            var differentLengthBlockId = Base64Converter.ConvertToBase64("test-block-id-wrong-length");
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);
            var data = Encoding.UTF8.GetBytes("unit test content");

            await client.PutBlockAsync(containerName, blobName, blockId, data);
            await client.PutBlockAsync(containerName, blobName, differentLengthBlockId, data);

            // throws exception
        }
        public async void PutBlockAsync_BlockIdTooLarge_ThrowsArgumentException()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockId = Base64Converter.ConvertToBase64("test-block-id-very-long-too-long-horribly-wrong-does-not-compute-danger-will-robinson");
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);
            var data = Encoding.UTF8.GetBytes("unit test content");

            await client.PutBlockAsync(containerName, blobName, blockId, data);

            // throws exception
        }
        public async void PutBlockAsync_RequiredArgsOnly_ReturnsCorrectMD5Hash()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);
            var data = Encoding.UTF8.GetBytes("unit test content");
            var expectedContentMD5 = Convert.ToBase64String((MD5.Create()).ComputeHash(data));

            var response = await client.PutBlockAsync(containerName, blobName, blockId, data);

            Assert.AreEqual(expectedContentMD5, response.ContentMD5);
        }
        public async void PutBlockAsync_TooLargePayload_ThrowsArgumentException()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            var fiveMegabytes = new byte[5242880];
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, fiveMegabytes);

            // throws exception
        }
        public async void PutBlockAsync_WithContentMD5_UploadsWithSpecifiedContentMD5()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var data = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            var expectedContentMD5 = Convert.ToBase64String((MD5.Create()).ComputeHash(data));
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            var block = await client.PutBlockAsync(containerName, blobName, blockId, data, contentMD5: expectedContentMD5);

            _util.AssertBlockExists(containerName, blobName, blockId);
            Assert.AreEqual(expectedContentMD5, block.ContentMD5);
        }
        public async void PutBlockAsync_WithIncorrectContentMD5_ThrowsMD5MismatchAzureException()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var data = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            var someOtherData = Encoding.UTF8.GetBytes("different content");
            var incorrectContentMD5 = Convert.ToBase64String((MD5.Create()).ComputeHash(someOtherData));
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, data, contentMD5: incorrectContentMD5);

            // expects exception
        }
        public async void PutBlockAsync_LeasedBlobWithIncorrectLeaseGiven_ThrowsArgumentException()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockData = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, blockData, leaseId: InvalidLeaseId);

            // throws exception
        }
        public async void PutBlockAsync_LeasedBlobWithIncorrectLeaseGiven_ThrowsLeaseIdMismatchWithBlobOperationAzureException()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockData = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            _util.CreateContainer(containerName);
            _util.CreateBlockBlob(containerName, blobName);
            _util.LeaseBlob(containerName, blobName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, blockData, leaseId: GetGuidString());

            // throws exception
        }
        public async void PutBlockAsync_LeasedBlobCorrectLeaseSpecified_UploadsBlockSuccessfully()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var blockData = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            _util.CreateContainer(containerName);
            _util.CreateBlockBlob(containerName, blobName);
            var lease = _util.LeaseBlob(containerName, blobName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, blockData, leaseId: lease);

            _util.AssertBlockExists(containerName, blobName, blockId);
        }
        public async void PutBlockAsync_RequiredArgsOnly_UploadsBlockSuccessfully()
        {
            var containerName = _util.GenerateSampleContainerName(_runId);
            var blobName = _util.GenerateSampleBlobName(_runId);
            var data = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            _util.CreateContainer(containerName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, data);

            _util.AssertBlockExists(containerName, blobName, blockId);
        }
        public async void PutBlockAsync_LeasedBlobWithNoLeaseGiven_ThrowsLeaseIdMissingAzureException()
        {
            var containerName = GenerateSampleContainerName();
            var blobName = GenerateSampleBlobName();
            var blockData = Encoding.UTF8.GetBytes("unit test content");
            var blockId = Base64Converter.ConvertToBase64("test-block-id");
            CreateContainer(containerName);
            CreateBlockBlob(containerName, blobName);
            LeaseBlob(containerName, blobName);
            IBlobServiceClient client = new BlobServiceClient(AccountSettings);

            await client.PutBlockAsync(containerName, blobName, blockId, blockData);

            // throws exception
        }