public async Task UploadObjectAsync_InvalidHash_ThrowOnly() { var client = StorageClient.Create(); var interceptor = new BreakUploadInterceptor(); client.Service.HttpClient.MessageHandler.AddExecuteInterceptor(interceptor); var stream = GenerateData(50); var name = IdGenerator.FromGuid(); var bucket = _fixture.MultiVersionBucket; var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode.ThrowOnly }; await Assert.ThrowsAsync <UploadValidationException>(() => client.UploadObjectAsync(bucket, name, null, stream, options)); // We don't delete the object, so it's still present. ValidateData(bucket, name, new MemoryStream(interceptor.UploadedBytes)); }
public async Task UploadObjectAsync_InvalidHash_None() { var client = StorageClient.Create(); var interceptor = new BreakUploadInterceptor(); client.Service.HttpClient.MessageHandler.AddExecuteInterceptor(interceptor); var stream = GenerateData(50); var name = IdGenerator.FromGuid(); var bucket = _fixture.MultiVersionBucket; var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode.None }; // Upload succeeds despite the data being broken. await client.UploadObjectAsync(bucket, name, null, stream, options); // The object should contain our "wrong" bytes. ValidateData(bucket, name, new MemoryStream(interceptor.UploadedBytes)); }
public void UploadObject_InvalidHash_DeleteAndThrow() { var client = StorageClient.Create(); var interceptor = new BreakUploadInterceptor(); client.Service.HttpClient.MessageHandler.AddExecuteInterceptor(interceptor); var stream = GenerateData(50); var name = IdGenerator.FromGuid(); var bucket = _fixture.MultiVersionBucket; var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode.DeleteAndThrow }; Assert.Throws <UploadValidationException>(() => client.UploadObject(bucket, name, null, stream, options)); var notFound = Assert.Throws <GoogleApiException>(() => _fixture.Client.GetObject(bucket, name)); Assert.Equal(HttpStatusCode.NotFound, notFound.HttpStatusCode); }
public async Task UploadObjectAsync_InvalidHash_DeleteAndThrow_DeleteFails() { var client = StorageClient.Create(); var interceptor = new BreakUploadInterceptor(); client.Service.HttpClient.MessageHandler.AddExecuteInterceptor(interceptor); client.Service.HttpClient.MessageHandler.AddExecuteInterceptor(new BreakDeleteInterceptor()); var stream = GenerateData(50); var name = IdGenerator.FromGuid(); var bucket = _fixture.MultiVersionBucket; var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode.DeleteAndThrow }; var ex = await Assert.ThrowsAsync <UploadValidationException>(() => client.UploadObjectAsync(bucket, name, null, stream, options)); Assert.NotNull(ex.AdditionalFailures); // The deletion failed, so the uploaded object still exists. ValidateData(bucket, name, new MemoryStream(interceptor.UploadedBytes)); }