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);
        }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
    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);
    }