public void PutBlock_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");

            client.PutBlock(containerName, blobName, blockId, data);
            client.PutBlock(containerName, blobName, differentLengthBlockId, data);

            // throws exception
        }
        public void PutBlock_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");

            client.PutBlock(containerName, blobName, blockId, data);

            // throws exception
        }
        public void PutBlock_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 = client.PutBlock(containerName, blobName, blockId, data);

            Assert.AreEqual(expectedContentMD5, response.ContentMD5);
        }
        public void PutBlock_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);

            client.PutBlock(containerName, blobName, blockId, fiveMegabytes);

            // throws exception
        }
        public void PutBlock_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 = client.PutBlock(containerName, blobName, blockId, data, contentMD5: expectedContentMD5);

            _util.AssertBlockExists(containerName, blobName, blockId);
            Assert.AreEqual(expectedContentMD5, block.ContentMD5);
        }
        public void PutBlock_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);

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

            // expects exception
        }
        public void PutBlock_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);

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

            // throws exception
        }
        public void PutBlock_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);

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

            // throws exception
        }
        public void PutBlock_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);

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

            _util.AssertBlockExists(containerName, blobName, blockId);
        }
        public void PutBlock_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);

            client.PutBlock(containerName, blobName, blockId, data);

            _util.AssertBlockExists(containerName, blobName, blockId);
        }
        public void PutBlock_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);

            client.PutBlock(containerName, blobName, blockId, blockData);

            // throws exception
        }