Skip to content

Commit 4e65a1a

Browse files
committed
equalfold and nilchecks
1 parent 95a4855 commit 4e65a1a

File tree

2 files changed

+83
-11
lines changed

2 files changed

+83
-11
lines changed

pkg/util/computeskus/computeskus.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"errors"
99
"fmt"
1010
"slices"
11+
"strings"
1112

1213
sdkcompute "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v7"
1314

@@ -55,9 +56,11 @@ func HasCapability(sku *sdkcompute.ResourceSKU, capabilityName string) bool {
5556
// IsRestricted checks whether given resource SKU is restricted in a given location
5657
func IsRestricted(sku *sdkcompute.ResourceSKU, location string) bool {
5758
for _, restriction := range sku.Restrictions {
58-
for _, restrictedLocation := range restriction.RestrictionInfo.Locations {
59-
if *restrictedLocation == location {
60-
return true
59+
if restriction.RestrictionInfo != nil {
60+
for _, restrictedLocation := range restriction.RestrictionInfo.Locations {
61+
if restrictedLocation != nil && strings.EqualFold(*restrictedLocation, location) {
62+
return true
63+
}
6164
}
6265
}
6366
}
@@ -92,12 +95,12 @@ func SelectVMSkusInCurrentRegion(ctx context.Context, resourceSkusClient armcomp
9295
continue
9396
}
9497

95-
if slices.Contains(skuNames, *sku.Name) {
96-
// Make sure it's actually in our location
97-
if !slices.ContainsFunc(sku.Locations, func(s *string) bool { return *s == location }) {
98-
continue
99-
}
98+
// Make sure it's actually in our location
99+
if !slices.ContainsFunc(sku.Locations, func(s *string) bool { return s != nil && strings.EqualFold(*s, location) }) {
100+
continue
101+
}
100102

103+
if slices.Contains(skuNames, *sku.Name) {
101104
vmskus[*sku.Name] = sku
102105
}
103106

@@ -126,7 +129,7 @@ func ListUnrestrictedVMSkusInCurrentRegion(ctx context.Context, resourceSkusClie
126129
}
127130

128131
// Make sure it's actually in our location
129-
if !slices.ContainsFunc(sku.Locations, func(s *string) bool { return *s == location }) {
132+
if !slices.ContainsFunc(sku.Locations, func(s *string) bool { return s != nil && strings.EqualFold(*s, location) }) {
130133
continue
131134
}
132135

pkg/util/computeskus/computeskus_test.go

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ func TestSelectVMSkusInCurrentRegion(t *testing.T) {
254254
},
255255
},
256256
}: nil,
257+
// Nil region
258+
{
259+
Name: pointerutils.ToPtr("smallmachine_v6"),
260+
ResourceType: pointerutils.ToPtr("virtualMachines"),
261+
Locations: []*string{nil},
262+
LocationInfo: []*armcompute.ResourceSKULocationInfo{
263+
{
264+
Location: pointerutils.ToPtr("northus2"),
265+
},
266+
},
267+
}: nil,
257268
// Machine that has no locations/locationinfo
258269
{
259270
Name: pointerutils.ToPtr("smallmachine_v3"),
@@ -333,7 +344,6 @@ func TestSelectVMSkusInCurrentRegion(t *testing.T) {
333344
Location: pointerutils.ToPtr("northus2"),
334345
},
335346
},
336-
Restrictions: []*armcompute.ResourceSKURestrictions{},
337347
}: nil,
338348
// Machine that has no locations/locationinfo
339349
{
@@ -460,6 +470,17 @@ func TestListUnrestrictedSKUNames(t *testing.T) {
460470
},
461471
},
462472
}: nil,
473+
// Capitalisation of region
474+
{
475+
Name: pointerutils.ToPtr("smallmachine_v10"),
476+
ResourceType: pointerutils.ToPtr("virtualMachines"),
477+
Locations: pointerutils.ToSlicePtr([]string{"Northus2"}),
478+
LocationInfo: []*armcompute.ResourceSKULocationInfo{
479+
{
480+
Location: pointerutils.ToPtr("Northus2"),
481+
},
482+
},
483+
}: nil,
463484
// Duplicated struct, in case we get two
464485
{
465486
Name: pointerutils.ToPtr("smallmachine_v4"),
@@ -483,6 +504,17 @@ func TestListUnrestrictedSKUNames(t *testing.T) {
483504
},
484505
},
485506
}: nil,
507+
// Nil region
508+
{
509+
Name: pointerutils.ToPtr("smallmachine_v11"),
510+
ResourceType: pointerutils.ToPtr("virtualMachines"),
511+
Locations: []*string{nil},
512+
LocationInfo: []*armcompute.ResourceSKULocationInfo{
513+
{
514+
Location: pointerutils.ToPtr("northus2"),
515+
},
516+
},
517+
}: nil,
486518
// Restricted in this region
487519
{
488520
Name: pointerutils.ToPtr("smallmachine_v2"),
@@ -494,13 +526,50 @@ func TestListUnrestrictedSKUNames(t *testing.T) {
494526
},
495527
},
496528
Restrictions: []*armcompute.ResourceSKURestrictions{
529+
{
530+
RestrictionInfo: &armcompute.ResourceSKURestrictionInfo{
531+
Locations: pointerutils.ToSlicePtr([]string{"somewhereelse"}),
532+
},
533+
},
497534
{
498535
RestrictionInfo: &armcompute.ResourceSKURestrictionInfo{
499536
Locations: pointerutils.ToSlicePtr([]string{"northus2"}),
500537
},
501538
},
502539
},
503540
}: nil,
541+
// Restricted in this region, equal fold
542+
{
543+
Name: pointerutils.ToPtr("smallmachine_v20"),
544+
ResourceType: pointerutils.ToPtr("virtualMachines"),
545+
Locations: pointerutils.ToSlicePtr([]string{"northus2"}),
546+
LocationInfo: []*armcompute.ResourceSKULocationInfo{
547+
{
548+
Location: pointerutils.ToPtr("northus2"),
549+
},
550+
},
551+
Restrictions: []*armcompute.ResourceSKURestrictions{
552+
{
553+
RestrictionInfo: &armcompute.ResourceSKURestrictionInfo{
554+
Locations: pointerutils.ToSlicePtr([]string{"Northus2"}),
555+
},
556+
},
557+
},
558+
}: nil,
559+
// Nil restriction info
560+
{
561+
Name: pointerutils.ToPtr("smallmachine_v1"),
562+
ResourceType: pointerutils.ToPtr("virtualMachines"),
563+
Locations: pointerutils.ToSlicePtr([]string{"northus2"}),
564+
LocationInfo: []*armcompute.ResourceSKULocationInfo{
565+
{
566+
Location: pointerutils.ToPtr("northus2"),
567+
},
568+
},
569+
Restrictions: []*armcompute.ResourceSKURestrictions{
570+
{},
571+
},
572+
}: nil,
504573
// Machine that has no locations/locationinfo
505574
{
506575
Name: pointerutils.ToPtr("smallmachine_v3"),
@@ -522,7 +591,7 @@ func TestListUnrestrictedSKUNames(t *testing.T) {
522591
}),
523592
)
524593
},
525-
desired: []string{"bigmachine_v1", "smallmachine_v4"},
594+
desired: []string{"bigmachine_v1", "smallmachine_v1", "smallmachine_v10", "smallmachine_v4"},
526595
},
527596
{
528597
name: "duplicate VM structs don't lead to duplicated names",

0 commit comments

Comments
 (0)