public async Task TestTransientNetworkError_Nonseekable() { using NonSeekableStream ms = new NonSeekableStream(new byte[4096]); PutObjectResponse response = await ObjectClient.PutObjectAsync(BucketName, nameof(TestTransientNetworkError_Nonseekable), ms).ConfigureAwait(false); Assert.True(response.IsSuccess); Assert.True(_handler.RequestCounter >= 2); }
public async Task TestTimeoutError_NonSeekableStream() { using NonSeekableStream ms = new NonSeekableStream(new byte[4096]); PutObjectResponse response = await ObjectClient.PutObjectAsync(BucketName, nameof(TestTimeoutError_NonSeekableStream), ms).ConfigureAwait(false); // Request should succeed after N tries Assert.True(response.IsSuccess); Assert.Equal(2, _handler.RequestCounter); }
public async Task DeleteObjectsRequestPayer() { PutObjectResponse putResp2 = await ObjectClient.PutObjectAsync(BucketName, nameof(DeleteObjectsRequestPayer), null, req => req.RequestPayer = Payer.Requester).ConfigureAwait(false); Assert.True(putResp2.RequestCharged); DeleteObjectsResponse delResp2 = await ObjectClient.DeleteObjectsAsync(BucketName, new[] { nameof(DeleteObjectsRequestPayer) }, req => req.RequestPayer = Payer.Requester).ConfigureAwait(false); Assert.True(delResp2.RequestCharged); }
public async Task SendNonSeekableStream() { byte[] data = new byte[1024 * 10]; Array.Fill(data, (byte)'A'); //We test if it is possible send a non-seekable stream. This should succeed as we use ChunkedStream PutObjectResponse resp = await ObjectClient.PutObjectAsync(BucketName, nameof(SendNonSeekableStream), new NonSeekableStream(data)).ConfigureAwait(false); Assert.True(resp.IsSuccess); }
public async Task PutObjectRequestPayer() { PutObjectResponse putResp = await ObjectClient.PutObjectAsync(BucketName, nameof(PutObjectRequestPayer), null, req => req.RequestPayer = Payer.Requester).ConfigureAwait(false); Assert.True(putResp.RequestCharged); GetObjectResponse getResp = await ObjectClient.GetObjectAsync(BucketName, nameof(PutObjectRequestPayer), req => req.RequestPayer = Payer.Requester).ConfigureAwait(false); Assert.True(getResp.RequestCharged); }
public async Task TestNonTransientServerError() { using MemoryStream ms = new MemoryStream(new byte[4096]); // One request should succeed PutObjectResponse response = await ObjectClient.PutObjectAsync(BucketName, nameof(TestNonTransientServerError) + "-0", ms).ConfigureAwait(false); Assert.True(response.IsSuccess); Assert.Equal(1, _handler.RequestCounter); // Second request should fail response = await ObjectClient.PutObjectAsync(BucketName, nameof(TestNonTransientServerError) + "-1", ms).ConfigureAwait(false); Assert.False(response.IsSuccess); Assert.Equal(2, _handler.RequestCounter); }
public async Task TestNonTransientNetworkError() { using MemoryStream ms = new MemoryStream(new byte[4096]); // One request should succeed PutObjectResponse response = await ObjectClient.PutObjectAsync(BucketName, nameof(TestNonTransientNetworkError) + "-0", ms).ConfigureAwait(false); Assert.True(response.IsSuccess); Assert.Equal(1, _handler.RequestCounter); // Second request should fail with a network error await Assert.ThrowsAsync <IOException>(async() => await ObjectClient.PutObjectAsync(BucketName, nameof(TestNonTransientNetworkError) + "-1", ms).ConfigureAwait(false)).ConfigureAwait(false); // Because network errors are transient, they should be retried Assert.Equal(5, _handler.RequestCounter); }
public async Task TestClientCancellationToken() { using MemoryStream ms = new MemoryStream(new byte[4096]); using CancellationTokenSource tcs = new CancellationTokenSource(); Task <PutObjectResponse> task = ObjectClient.PutObjectAsync(BucketName, nameof(TestClientCancellationToken), ms, token: tcs.Token); tcs.CancelAfter(500); Stopwatch sw = Stopwatch.StartNew(); await Assert.ThrowsAsync <TaskCanceledException>(async() => await task.ConfigureAwait(false)).ConfigureAwait(false); sw.Stop(); // We should have canceled within 750ms Assert.True(sw.ElapsedMilliseconds < 750); }