diff --git a/providers/azure/provider_test.go b/providers/azure/provider_test.go index ae898f5..4a76a16 100644 --- a/providers/azure/provider_test.go +++ b/providers/azure/provider_test.go @@ -10,7 +10,9 @@ import ( "testing" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/consumption/armconsumption" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -440,6 +442,37 @@ func TestAzureProvider_GetServiceClient_AllServiceTypes(t *testing.T) { } } +func TestAzureClients_GetExistingCommitments_PagerConstructionError(t *testing.T) { + // Keep this test sequential: the SDK reads this process-wide configuration. + originalCloud := cloud.AzurePublic + t.Cleanup(func() { cloud.AzurePublic = originalCloud }) + cloud.AzurePublic = cloud.Configuration{} + + _, sdkErr := armconsumption.NewReservationsDetailsClient(nil, nil) + require.Error(t, sdkErr) + require.Contains(t, sdkErr.Error(), "missing Azure Resource Manager configuration") + + for _, tc := range []struct { + name string + client provider.ServiceClient + }{ + {"cache", NewCacheClient(nil, "test-subscription", "eastus")}, + {"cosmosdb", NewCosmosDBClient(nil, "test-subscription", "eastus")}, + {"database", NewDatabaseClient(nil, "test-subscription", "eastus")}, + {"search", NewSearchClient(nil, "test-subscription", "eastus")}, + } { + t.Run(tc.name, func(t *testing.T) { + commitments, err := tc.client.GetExistingCommitments(context.Background()) + require.Error(t, err) + assert.Nil(t, commitments) + assert.Contains(t, err.Error(), tc.name+": create reservations pager") + cause := errors.Unwrap(err) + require.NotNil(t, cause) + assert.Equal(t, sdkErr.Error(), cause.Error()) + }) + } +} + func TestAzureProvider_GetRecommendationsClient_NotConfigured(t *testing.T) { // Test GetRecommendationsClient when Azure is not configured. Inject a // mock credential provider that fails so IsConfigured() deterministically diff --git a/providers/azure/services/cache/client.go b/providers/azure/services/cache/client.go index 488944e..2d6e00f 100644 --- a/providers/azure/services/cache/client.go +++ b/providers/azure/services/cache/client.go @@ -185,8 +185,7 @@ func (c *Client) GetRecommendations(ctx context.Context, _ *common.Recommendatio func (c *Client) GetExistingCommitments(ctx context.Context) ([]common.Commitment, error) { pager, err := c.createReservationsPager() if err != nil { - log.Printf("WARNING: failed to create Redis reservations pager: %v", err) - return []common.Commitment{}, nil + return nil, fmt.Errorf("cache: create reservations pager: %w", err) } return c.collectRedisReservations(ctx, pager) diff --git a/providers/azure/services/cosmosdb/client.go b/providers/azure/services/cosmosdb/client.go index ea57774..6217086 100644 --- a/providers/azure/services/cosmosdb/client.go +++ b/providers/azure/services/cosmosdb/client.go @@ -187,8 +187,7 @@ func (c *Client) GetRecommendations(ctx context.Context, _ *common.Recommendatio func (c *Client) GetExistingCommitments(ctx context.Context) ([]common.Commitment, error) { pager, err := c.createReservationsPager() if err != nil { - log.Printf("WARNING: failed to create Cosmos DB reservations pager: %v", err) - return []common.Commitment{}, nil + return nil, fmt.Errorf("cosmosdb: create reservations pager: %w", err) } return c.collectCosmosReservations(ctx, pager) diff --git a/providers/azure/services/database/client.go b/providers/azure/services/database/client.go index 4f6ae2c..d03af5b 100644 --- a/providers/azure/services/database/client.go +++ b/providers/azure/services/database/client.go @@ -5,7 +5,6 @@ import ( "context" "encoding/json" "fmt" - "log" "net/http" "net/url" "strings" @@ -217,8 +216,7 @@ func (c *Client) GetRecommendations(ctx context.Context, _ *common.Recommendatio func (c *Client) GetExistingCommitments(ctx context.Context) ([]common.Commitment, error) { pager, err := c.createReservationsPager() if err != nil { - log.Printf("WARNING: failed to create SQL reservations pager: %v", err) - return []common.Commitment{}, nil + return nil, fmt.Errorf("database: create reservations pager: %w", err) } return c.collectSQLReservations(ctx, pager) diff --git a/providers/azure/services/search/client.go b/providers/azure/services/search/client.go index 543b3da..691b0d8 100644 --- a/providers/azure/services/search/client.go +++ b/providers/azure/services/search/client.go @@ -129,8 +129,7 @@ func (c *Client) GetRecommendations(_ context.Context, _ *common.RecommendationP func (c *Client) GetExistingCommitments(ctx context.Context) ([]common.Commitment, error) { pager, err := c.createReservationsPager() if err != nil { - log.Printf("WARNING: failed to create Search reservations pager: %v", err) - return []common.Commitment{}, nil + return nil, fmt.Errorf("search: create reservations pager: %w", err) } return c.collectSearchReservations(ctx, pager)