Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion providers/azure/services/cache/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,8 +354,9 @@ func (c *CacheClient) ValidateOffering(ctx context.Context, rec common.Recommend
return fmt.Errorf("failed to get valid SKUs: %w", err)
}

resourceType := strings.TrimSpace(rec.ResourceType)
for _, sku := range validSKUs {
if sku == rec.ResourceType {
if strings.EqualFold(sku, resourceType) {
return nil
}
}
Expand Down
18 changes: 18 additions & 0 deletions providers/azure/services/cache/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,24 @@ func TestCacheClient_ValidateOffering_ValidSKU(t *testing.T) {
assert.NoError(t, err)
}

func TestCacheClient_ValidateOffering_CaseInsensitive(t *testing.T) {
ctx := context.Background()

t.Run("case_insensitive", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
rec := common.Recommendation{ResourceType: "premium_p1"}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})

t.Run("whitespace_trimmed", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
rec := common.Recommendation{ResourceType: " Premium_P1 "}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})
}

func TestCacheClient_GetRecommendations_WithMockPager(t *testing.T) {
ctx := context.Background()
client := NewClient(nil, "test-subscription", "eastus")
Expand Down
3 changes: 2 additions & 1 deletion providers/azure/services/compute/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -484,8 +484,9 @@ func (c *ComputeClient) ValidateOffering(ctx context.Context, rec common.Recomme
return fmt.Errorf("failed to get valid SKUs: %w", err)
}

resourceType := strings.TrimSpace(rec.ResourceType)
for _, sku := range validSKUs {
if sku == rec.ResourceType {
if strings.EqualFold(sku, resourceType) {
return nil
}
}
Expand Down
28 changes: 28 additions & 0 deletions providers/azure/services/compute/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,34 @@ func TestComputeClient_ValidateOffering_Invalid(t *testing.T) {
assert.Contains(t, err.Error(), "invalid Azure VM SKU")
}

func TestComputeClient_ValidateOffering_CaseInsensitive(t *testing.T) {
ctx := context.Background()

t.Run("case_insensitive", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
mockPager := &mocks.MockResourceSKUsPager{
Results: mocks.CreateSampleResourceSKUs("eastus"),
HasMore: true,
}
client.SetResourceSKUsPager(mockPager)
rec := common.Recommendation{ResourceType: "standard_d2s_v3"}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})

t.Run("whitespace_trimmed", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
mockPager := &mocks.MockResourceSKUsPager{
Results: mocks.CreateSampleResourceSKUs("eastus"),
HasMore: true,
}
client.SetResourceSKUsPager(mockPager)
rec := common.Recommendation{ResourceType: " Standard_D2s_v3 "}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})
}

func TestComputeClient_GetOfferingDetails_WithMock(t *testing.T) {
ctx := context.Background()

Expand Down
3 changes: 2 additions & 1 deletion providers/azure/services/cosmosdb/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,8 +351,9 @@ func (c *CosmosDBClient) ValidateOffering(ctx context.Context, rec common.Recomm
return fmt.Errorf("failed to get valid SKUs: %w", err)
}

resourceType := strings.TrimSpace(rec.ResourceType)
for _, sku := range validSKUs {
if sku == rec.ResourceType {
if strings.EqualFold(sku, resourceType) {
return nil
}
}
Expand Down
41 changes: 41 additions & 0 deletions providers/azure/services/cosmosdb/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,47 @@ func TestCosmosDBClient_ValidateOffering_Invalid(t *testing.T) {
assert.Contains(t, err.Error(), "invalid Azure Cosmos DB SKU")
}

func TestCosmosDBClient_ValidateOffering_CaseInsensitive(t *testing.T) {
ctx := context.Background()

capability := "EnableCassandra"
mockPager := func() *MockCosmosAccountsPager {
return &MockCosmosAccountsPager{
pages: []armcosmos.DatabaseAccountsClientListResponse{
{
DatabaseAccountsListResult: armcosmos.DatabaseAccountsListResult{
Value: []*armcosmos.DatabaseAccountGetResults{
{
Properties: &armcosmos.DatabaseAccountGetProperties{
Capabilities: []*armcosmos.Capability{
{Name: &capability},
},
},
},
},
},
},
},
}
}

t.Run("case_insensitive", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
client.SetCosmosAccountsPager(mockPager())
rec := common.Recommendation{ResourceType: "enablecassandra"}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})

t.Run("whitespace_trimmed", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
client.SetCosmosAccountsPager(mockPager())
rec := common.Recommendation{ResourceType: " EnableCassandra "}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})
}

func TestCosmosDBClient_SetterMethods(t *testing.T) {
client := NewClient(nil, "test-sub", "eastus")

Expand Down
3 changes: 2 additions & 1 deletion providers/azure/services/database/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -359,8 +359,9 @@ func (c *DatabaseClient) ValidateOffering(ctx context.Context, rec common.Recomm
return fmt.Errorf("failed to get valid SKUs: %w", err)
}

resourceType := strings.TrimSpace(rec.ResourceType)
for _, sku := range validSKUs {
if sku == rec.ResourceType {
if strings.EqualFold(sku, resourceType) {
return nil
}
}
Expand Down
39 changes: 39 additions & 0 deletions providers/azure/services/database/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1020,3 +1020,42 @@ func TestDatabaseClient_ValidateOffering_Invalid(t *testing.T) {
assert.Error(t, err)
assert.Contains(t, err.Error(), "invalid Azure SQL Database SKU")
}

func TestDatabaseClient_ValidateOffering_CaseInsensitive(t *testing.T) {
ctx := context.Background()

skuName := "GP_Gen5_8"
mockCapabilities := &MockCapabilitiesClient{
response: armsql.CapabilitiesClientListByLocationResponse{
LocationCapabilities: armsql.LocationCapabilities{
SupportedServerVersions: []*armsql.ServerVersionCapability{
{
SupportedEditions: []*armsql.EditionCapability{
{
SupportedServiceLevelObjectives: []*armsql.ServiceObjectiveCapability{
{SKU: &armsql.SKU{Name: &skuName}},
},
},
},
},
},
},
},
}

t.Run("case_insensitive", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
client.SetCapabilitiesClient(mockCapabilities)
rec := common.Recommendation{ResourceType: "gp_gen5_8"}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})

t.Run("whitespace_trimmed", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
client.SetCapabilitiesClient(mockCapabilities)
rec := common.Recommendation{ResourceType: " GP_Gen5_8 "}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})
}
3 changes: 2 additions & 1 deletion providers/azure/services/search/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -327,8 +327,9 @@ func (c *SearchClient) ValidateOffering(ctx context.Context, rec common.Recommen
return fmt.Errorf("failed to get valid SKUs: %w", err)
}

resourceType := strings.TrimSpace(rec.ResourceType)
for _, sku := range validSKUs {
if sku == rec.ResourceType {
if strings.EqualFold(sku, resourceType) {
return nil
}
}
Expand Down
35 changes: 35 additions & 0 deletions providers/azure/services/search/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -861,3 +861,38 @@ func TestSearchClient_PurchaseCommitment_IdempotentReDrive(t *testing.T) {
assert.NotEqual(t, first.CommitmentID, other.CommitmentID)
assert.NotEqual(t, firstURL, otherURL)
}

func TestSearchClient_ValidateOffering_CaseInsensitive(t *testing.T) {
ctx := context.Background()

skuName := armsearch.SKUNameStandard
mockPager := func() *MockSearchServicesPager {
return &MockSearchServicesPager{
pages: []armsearch.ServicesClientListBySubscriptionResponse{
{
ServiceListResult: armsearch.ServiceListResult{
Value: []*armsearch.Service{
{SKU: &armsearch.SKU{Name: &skuName}},
},
},
},
},
}
}

t.Run("case_insensitive", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
client.SetSearchServicesPager(mockPager())
rec := common.Recommendation{ResourceType: "STANDARD"}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})

t.Run("whitespace_trimmed", func(t *testing.T) {
client := NewClient(nil, "test-subscription", "eastus")
client.SetSearchServicesPager(mockPager())
rec := common.Recommendation{ResourceType: " standard "}
err := client.ValidateOffering(ctx, rec)
assert.NoError(t, err)
})
}
Loading