@@ -264,10 +264,8 @@ public void UploadObject_InvalidHash_None()
264264 var name = IdGenerator . FromGuid ( ) ;
265265 var bucket = _fixture . MultiVersionBucket ;
266266 var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . None } ;
267- // Upload succeeds despite the data being broken.
268- client . UploadObject ( bucket , name , null , stream , options ) ;
269- // The object should contain our "wrong" bytes.
270- ValidateData ( bucket , name , new MemoryStream ( interceptor . UploadedBytes ) ) ;
267+ var exception = Assert . Throws < GoogleApiException > ( ( ) => client . UploadObject ( bucket , name , null , stream , options ) ) ;
268+ Assert . Equal ( HttpStatusCode . BadRequest , exception . HttpStatusCode ) ;
271269 }
272270
273271 [ Fact ]
@@ -280,9 +278,8 @@ public void UploadObject_InvalidHash_ThrowOnly()
280278 var name = IdGenerator . FromGuid ( ) ;
281279 var bucket = _fixture . MultiVersionBucket ;
282280 var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . ThrowOnly } ;
283- Assert . Throws < UploadValidationException > ( ( ) => client . UploadObject ( bucket , name , null , stream , options ) ) ;
284- // We don't delete the object, so it's still present.
285- ValidateData ( bucket , name , new MemoryStream ( interceptor . UploadedBytes ) ) ;
281+ var exception = Assert . Throws < GoogleApiException > ( ( ) => client . UploadObject ( bucket , name , null , stream , options ) ) ;
282+ Assert . Equal ( HttpStatusCode . BadRequest , exception . HttpStatusCode ) ;
286283 }
287284
288285 [ Fact ]
@@ -295,28 +292,12 @@ public void UploadObject_InvalidHash_DeleteAndThrow()
295292 var name = IdGenerator . FromGuid ( ) ;
296293 var bucket = _fixture . MultiVersionBucket ;
297294 var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . DeleteAndThrow } ;
298- Assert . Throws < UploadValidationException > ( ( ) => client . UploadObject ( bucket , name , null , stream , options ) ) ;
295+ var exception = Assert . Throws < GoogleApiException > ( ( ) => client . UploadObject ( bucket , name , null , stream , options ) ) ;
296+ Assert . Equal ( HttpStatusCode . BadRequest , exception . HttpStatusCode ) ;
299297 var notFound = Assert . Throws < GoogleApiException > ( ( ) => _fixture . Client . GetObject ( bucket , name ) ) ;
300298 Assert . Equal ( HttpStatusCode . NotFound , notFound . HttpStatusCode ) ;
301299 }
302300
303- [ Fact ]
304- public void UploadObject_InvalidHash_DeleteAndThrow_DeleteFails ( )
305- {
306- var client = StorageClient . Create ( ) ;
307- var interceptor = new BreakUploadInterceptor ( ) ;
308- client . Service . HttpClient . MessageHandler . AddExecuteInterceptor ( interceptor ) ;
309- client . Service . HttpClient . MessageHandler . AddExecuteInterceptor ( new BreakDeleteInterceptor ( ) ) ;
310- var stream = GenerateData ( 50 ) ;
311- var name = IdGenerator . FromGuid ( ) ;
312- var bucket = _fixture . MultiVersionBucket ;
313- var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . DeleteAndThrow } ;
314- var ex = Assert . Throws < UploadValidationException > ( ( ) => client . UploadObject ( bucket , name , null , stream , options ) ) ;
315- Assert . NotNull ( ex . AdditionalFailures ) ;
316- // The deletion failed, so the uploaded object still exists.
317- ValidateData ( bucket , name , new MemoryStream ( interceptor . UploadedBytes ) ) ;
318- }
319-
320301 [ Fact ]
321302 public async Task UploadObjectAsync_InvalidHash_None ( )
322303 {
@@ -327,10 +308,8 @@ public async Task UploadObjectAsync_InvalidHash_None()
327308 var name = IdGenerator . FromGuid ( ) ;
328309 var bucket = _fixture . MultiVersionBucket ;
329310 var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . None } ;
330- // Upload succeeds despite the data being broken.
331- await client . UploadObjectAsync ( bucket , name , null , stream , options ) ;
332- // The object should contain our "wrong" bytes.
333- ValidateData ( bucket , name , new MemoryStream ( interceptor . UploadedBytes ) ) ;
311+ var exception = await Assert . ThrowsAsync < GoogleApiException > ( ( ) => client . UploadObjectAsync ( bucket , name , null , stream , options ) ) ;
312+ Assert . Equal ( HttpStatusCode . BadRequest , exception . HttpStatusCode ) ;
334313 }
335314
336315 [ Fact ]
@@ -343,9 +322,8 @@ public async Task UploadObjectAsync_InvalidHash_ThrowOnly()
343322 var name = IdGenerator . FromGuid ( ) ;
344323 var bucket = _fixture . MultiVersionBucket ;
345324 var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . ThrowOnly } ;
346- await Assert . ThrowsAsync < UploadValidationException > ( ( ) => client . UploadObjectAsync ( bucket , name , null , stream , options ) ) ;
347- // We don't delete the object, so it's still present.
348- ValidateData ( bucket , name , new MemoryStream ( interceptor . UploadedBytes ) ) ;
325+ var exception = await Assert . ThrowsAsync < GoogleApiException > ( ( ) => client . UploadObjectAsync ( bucket , name , null , stream , options ) ) ;
326+ Assert . Equal ( HttpStatusCode . BadRequest , exception . HttpStatusCode ) ;
349327 }
350328
351329 [ Fact ]
@@ -359,28 +337,12 @@ public async Task UploadObjectAsync_InvalidHash_DeleteAndThrow()
359337 var name = IdGenerator . FromGuid ( ) ;
360338 var bucket = _fixture . MultiVersionBucket ;
361339 var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . DeleteAndThrow } ;
362- await Assert . ThrowsAsync < UploadValidationException > ( ( ) => client . UploadObjectAsync ( bucket , name , null , stream , options ) ) ;
340+ var exception = await Assert . ThrowsAsync < GoogleApiException > ( ( ) => client . UploadObjectAsync ( bucket , name , null , stream , options ) ) ;
341+ Assert . Equal ( HttpStatusCode . BadRequest , exception . HttpStatusCode ) ;
363342 var notFound = await Assert . ThrowsAsync < GoogleApiException > ( ( ) => _fixture . Client . GetObjectAsync ( bucket , name ) ) ;
364343 Assert . Equal ( HttpStatusCode . NotFound , notFound . HttpStatusCode ) ;
365344 }
366345
367- [ Fact ]
368- public async Task UploadObjectAsync_InvalidHash_DeleteAndThrow_DeleteFails ( )
369- {
370- var client = StorageClient . Create ( ) ;
371- var interceptor = new BreakUploadInterceptor ( ) ;
372- client . Service . HttpClient . MessageHandler . AddExecuteInterceptor ( interceptor ) ;
373- client . Service . HttpClient . MessageHandler . AddExecuteInterceptor ( new BreakDeleteInterceptor ( ) ) ;
374- var stream = GenerateData ( 50 ) ;
375- var name = IdGenerator . FromGuid ( ) ;
376- var bucket = _fixture . MultiVersionBucket ;
377- var options = new UploadObjectOptions { UploadValidationMode = UploadValidationMode . DeleteAndThrow } ;
378- var ex = await Assert . ThrowsAsync < UploadValidationException > ( ( ) => client . UploadObjectAsync ( bucket , name , null , stream , options ) ) ;
379- Assert . NotNull ( ex . AdditionalFailures ) ;
380- // The deletion failed, so the uploaded object still exists.
381- ValidateData ( bucket , name , new MemoryStream ( interceptor . UploadedBytes ) ) ;
382- }
383-
384346 [ Fact ]
385347 public async Task InitiateUploadSessionAsync_NegativeLength ( )
386348 {
@@ -460,21 +422,6 @@ public async Task InterceptAsync(HttpRequestMessage request, CancellationToken c
460422 }
461423 }
462424
463- private class BreakDeleteInterceptor : IHttpExecuteInterceptor
464- {
465- public Task InterceptAsync ( HttpRequestMessage request , CancellationToken cancellationToken )
466- {
467- // We only care about Delete requests
468- if ( request . Method == HttpMethod . Delete )
469- {
470- // Ugly but effective hack: replace the generation URL parameter so that we add a leading 9,
471- // so the generation we try to delete is the wrong one.
472- request . RequestUri = new Uri ( request . RequestUri . ToString ( ) . Replace ( "generation=" , "generation=9" ) ) ;
473- }
474- return Task . FromResult ( 0 ) ;
475- }
476- }
477-
478425 private Object GetExistingObject ( )
479426 {
480427 var obj = _fixture . Client . UploadObject ( _fixture . MultiVersionBucket , IdGenerator . FromGuid ( ) , "application/octet-stream" , GenerateData ( 100 ) ) ;
0 commit comments