public virtual async Task UploadPartitionMismatchedHashThrows(TransactionalHashAlgorithm algorithm) { await using IDisposingContainer <TContainerClient> disposingContainer = await GetDisposingContainerAsync(); // Arrange const int dataLength = Constants.KB; var data = GetRandomBuffer(dataLength); var hashingOptions = new UploadTransactionalHashingOptions { Algorithm = algorithm }; // Tamper with stream contents in the pipeline to simulate silent failure in the transit layer var streamTamperPolicy = new TamperStreamContentsPolicy(); var clientOptions = ClientBuilder.GetOptions(); clientOptions.AddPolicy(streamTamperPolicy, HttpPipelinePosition.PerCall); var client = await GetResourceClientAsync( disposingContainer.Container, resourceLength : dataLength, createResource : true, options : clientOptions); using (var stream = new MemoryStream(data)) { // Act streamTamperPolicy.TransformRequestBody = true; AsyncTestDelegate operation = async() => await UploadPartitionAsync(client, stream, hashingOptions); // Assert AssertWriteHashMismatch(operation, algorithm); } }
public virtual async Task OpenWriteMismatchedHashThrows(TransactionalHashAlgorithm algorithm) { await using IDisposingContainer <TContainerClient> disposingContainer = await GetDisposingContainerAsync(); // Arrange const int streamBufferSize = Constants.KB; // this one needs to be 512 multiple for page blobs const int dataSize = Constants.KB - 11; // odd number to get some variance const int streamWrites = 10; var data = GetRandomBuffer(dataSize); var hashingOptions = new UploadTransactionalHashingOptions { Algorithm = algorithm }; // Tamper with stream contents in the pipeline to simulate silent failure in the transit layer var clientOptions = ClientBuilder.GetOptions(); var tamperPolicy = new TamperStreamContentsPolicy(); clientOptions.AddPolicy(tamperPolicy, HttpPipelinePosition.PerCall); var client = await GetResourceClientAsync( disposingContainer.Container, // should use dataSize instead of streamBufferSize but this gives 512 multiple and ends up irrelevant for this test resourceLength : streamBufferSize *streamWrites, createResource : true, options : clientOptions); // Act var writeStream = await OpenWriteAsync(client, hashingOptions, streamBufferSize); // Assert AssertWriteHashMismatch(async() => { tamperPolicy.TransformRequestBody = true; foreach (var _ in Enumerable.Range(0, streamWrites)) { await writeStream.WriteAsync(data, 0, data.Length); } }, algorithm); }