File: KustoResiliencePipelinesTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Azure.Kusto.Tests\Aspire.Hosting.Azure.Kusto.Tests.csproj (Aspire.Hosting.Azure.Kusto.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Kusto.Data.Exceptions;
 
namespace Aspire.Hosting.Azure.Kusto.Tests;
 
public class KustoResiliencePipelinesTests
{
    [Fact]
    public async Task ShouldRetryOnTemporaryExceptions()
    {
        // Arrange
        var attemptCount = 0;
        ValueTask work(CancellationToken ct)
        {
            attemptCount++;
            throw new KustoRequestThrottledException();
        }
 
        // Act + Assert
        await Assert.ThrowsAsync<KustoRequestThrottledException>(async () =>
        {
            await AzureKustoEmulatorResiliencePipelines.Default.ExecuteAsync(work, TestContext.Current.CancellationToken);
        });
        Assert.True(attemptCount > 1, "Operation should have been retried");
    }
 
    [Fact]
    public async Task ShouldNotRetryOnOtherExceptions()
    {
        // Arrange
        var attemptCount = 0;
        ValueTask work(CancellationToken ct)
        {
            attemptCount++;
            throw new InvalidOperationException();
        }
 
        // Act + Assert
        await Assert.ThrowsAsync<InvalidOperationException>(async () =>
        {
            await AzureKustoEmulatorResiliencePipelines.Default.ExecuteAsync(work, TestContext.Current.CancellationToken);
        });
        Assert.Equal(1, attemptCount);
    }
 
    [Fact]
    public async Task ShouldNotRetryOnPermanentExceptions()
    {
        // Arrange
        var attemptCount = 0;
        ValueTask work(CancellationToken ct)
        {
            attemptCount++;
            throw new KustoBadRequestException();
        }
 
        // Act + Assert
        await Assert.ThrowsAsync<KustoBadRequestException>(async () =>
        {
            await AzureKustoEmulatorResiliencePipelines.Default.ExecuteAsync(work, TestContext.Current.CancellationToken);
        });
        Assert.Equal(1, attemptCount);
    }
}