Skip to content

Commit

Permalink
feat: capitalize vmsize struct fields (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
gandhipr committed Sep 1, 2023
1 parent 889480d commit 6937bee
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 123 deletions.
68 changes: 34 additions & 34 deletions vmsize.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,30 @@ var skuSizeScheme = regexp.MustCompile(
// unParsableVMSizes map holds vmSize strings that cannot be easily parsed with skuSizeScheme.
var unParsableVMSizes = map[string]VMSizeType{
"M416s_8_v2": {
family: "M",
subfamily: nil,
cpus: "416",
cpusConstrained: nil,
additiveFeatures: []rune{'s'},
acceleratorType: nil,
confidentialChildCapability: false,
version: "v2",
promoVersion: false,
series: "Ms_v2",
Family: "M",
Subfamily: nil,
Cpus: "416",
CpusConstrained: nil,
AdditiveFeatures: []rune{'s'},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "v2",
PromoVersion: false,
Series: "Ms_v2",
},
}

type VMSizeType struct {
family string
subfamily *string
cpus string
cpusConstrained *string
additiveFeatures []rune
acceleratorType *string
confidentialChildCapability bool
version string
promoVersion bool
series string
Family string
Subfamily *string
Cpus string
CpusConstrained *string
AdditiveFeatures []rune
AcceleratorType *string
ConfidentialChildCapability bool
Version string
PromoVersion bool
Series string
}

// parseVMSize parses the VM size and returns the parts as a map.
Expand All @@ -66,15 +66,15 @@ func getVMSize(vmSizeName string) (*VMSizeType, error) {
}

// [Family] - ([A-Z]): Captures a single uppercase letter.
vmSize.family = parts[1]
vmSize.Family = parts[1]

// [Sub-family]* - ([A-Z]?): Optionally captures another uppercase letter.
if len(parts[2]) > 0 {
vmSize.subfamily = &parts[2]
vmSize.Subfamily = &parts[2]
}

// [# of vCPUs] - ([0-9]+): Captures one or more digits.
vmSize.cpus = parts[3]
vmSize.Cpus = parts[3]

// [Constrained vCPUs]*
// -?: Optionally captures a hyphen.
Expand All @@ -84,48 +84,48 @@ func getVMSize(vmSizeName string) (*VMSizeType, error) {
if err != nil {
return nil, fmt.Errorf("converting constrained CPUs, %w", err)
}
vmSize.cpusConstrained = &parts[4]
vmSize.CpusConstrained = &parts[4]
}

// [Additive Features]
// ((?:[abcdilmtspPr]+|C+|NP)?): Captures a sequence of letters representing certain attributes.
// It can capture combinations like 'abcdilmtspPr' or 'C+' or 'NP'.
vmSize.additiveFeatures = []rune(parts[5])
vmSize.AdditiveFeatures = []rune(parts[5])

// [Accelerator Type]*
// _?: Optionally captures an underscore.
// (?:([A-Z][0-9]+)_?)?: Optionally captures a pattern that starts with an uppercase letter followed by digits,
// followed by an optional underscore.
if len(parts[6]) > 0 {
vmSize.acceleratorType = &parts[6]
vmSize.AcceleratorType = &parts[6]
}

// [Confidential Child Capability]* - only AKS
// (_cc_)?: Optionally captures the string "cc" with underscores on both sides.
if parts[7] == "_cc_" {
vmSize.confidentialChildCapability = true
vmSize.ConfidentialChildCapability = true
}

// [Version]*
// Optionally captures the pattern 'v' or 'V' followed by a digit from 1 to 9.
vmSize.version = parts[8]
vmSize.Version = parts[8]

// [Promo]*
// (_Promo)?: Optionally captures the string "_Promo".
if parts[9] == "_Promo" {
vmSize.promoVersion = true
vmSize.PromoVersion = true
}

// [Series]
subfamily := ""
if vmSize.subfamily != nil {
subfamily = *vmSize.subfamily
if vmSize.Subfamily != nil {
subfamily = *vmSize.Subfamily
}
version := ""
if len(vmSize.version) > 0 {
version = "_" + vmSize.version
if len(vmSize.Version) > 0 {
version = "_" + vmSize.Version
}
vmSize.series = vmSize.family + subfamily + string(vmSize.additiveFeatures) + version
vmSize.Series = vmSize.Family + subfamily + string(vmSize.AdditiveFeatures) + version

return &vmSize, nil
}
178 changes: 89 additions & 89 deletions vmsize_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,135 +37,135 @@ var testCases = []struct {
name: "Standard_NV16as_v4",
size: "NV16as_v4",
expectedVM: &VMSizeType{
family: "N",
subfamily: to.Ptr("V"),
cpus: "16",
cpusConstrained: nil,
additiveFeatures: []rune{'a', 's'},
acceleratorType: nil,
confidentialChildCapability: false,
version: "v4",
promoVersion: false,
series: "NVas_v4",
Family: "N",
Subfamily: to.Ptr("V"),
Cpus: "16",
CpusConstrained: nil,
AdditiveFeatures: []rune{'a', 's'},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "v4",
PromoVersion: false,
Series: "NVas_v4",
},
err: nil,
},
{
name: "Standard_M16ms",
size: "M16ms_v2",
expectedVM: &VMSizeType{
family: "M",
subfamily: nil,
cpus: "16",
cpusConstrained: nil,
additiveFeatures: []rune{'m', 's'},
acceleratorType: nil,
confidentialChildCapability: false,
version: "v2",
promoVersion: false,
series: "Mms_v2",
Family: "M",
Subfamily: nil,
Cpus: "16",
CpusConstrained: nil,
AdditiveFeatures: []rune{'m', 's'},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "v2",
PromoVersion: false,
Series: "Mms_v2",
},
err: nil,
},
{
name: "Standard_NC4as_T4_v3",
size: "NC4as_T4_v3",
expectedVM: &VMSizeType{
family: "N",
subfamily: to.Ptr("C"),
cpus: "4",
cpusConstrained: nil,
additiveFeatures: []rune{'a', 's'},
acceleratorType: to.Ptr("T4"),
confidentialChildCapability: false,
version: "v3",
promoVersion: false,
series: "NCas_v3",
Family: "N",
Subfamily: to.Ptr("C"),
Cpus: "4",
CpusConstrained: nil,
AdditiveFeatures: []rune{'a', 's'},
AcceleratorType: to.Ptr("T4"),
ConfidentialChildCapability: false,
Version: "v3",
PromoVersion: false,
Series: "NCas_v3",
},
err: nil,
},
{
name: "Standard_M8-2ms",
size: "M8-2ms_v2",
expectedVM: &VMSizeType{
family: "M",
subfamily: nil,
cpus: "8",
cpusConstrained: to.Ptr("2"),
additiveFeatures: []rune{'m', 's'},
acceleratorType: nil,
confidentialChildCapability: false,
version: "v2",
promoVersion: false,
series: "Mms_v2",
Family: "M",
Subfamily: nil,
Cpus: "8",
CpusConstrained: to.Ptr("2"),
AdditiveFeatures: []rune{'m', 's'},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "v2",
PromoVersion: false,
Series: "Mms_v2",
},
err: nil,
},
{
name: "Standard_A4_v2",
size: "A4_v2",
expectedVM: &VMSizeType{
family: "A",
subfamily: nil,
cpus: "4",
cpusConstrained: nil,
additiveFeatures: []rune{},
acceleratorType: nil,
confidentialChildCapability: false,
version: "v2",
promoVersion: false,
series: "A_v2",
Family: "A",
Subfamily: nil,
Cpus: "4",
CpusConstrained: nil,
AdditiveFeatures: []rune{},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "v2",
PromoVersion: false,
Series: "A_v2",
},
err: nil,
},
{
name: "Standard_EC48as_cc_v5",
size: "EC48as_cc_v5",
expectedVM: &VMSizeType{
family: "E",
subfamily: to.Ptr("C"),
cpus: "48",
cpusConstrained: nil,
additiveFeatures: []rune{'a', 's'},
acceleratorType: nil,
confidentialChildCapability: true,
version: "v5",
promoVersion: false,
series: "ECas_v5",
Family: "E",
Subfamily: to.Ptr("C"),
Cpus: "48",
CpusConstrained: nil,
AdditiveFeatures: []rune{'a', 's'},
AcceleratorType: nil,
ConfidentialChildCapability: true,
Version: "v5",
PromoVersion: false,
Series: "ECas_v5",
},
err: nil,
},
{
name: "Standard_NV24",
size: "NV24",
expectedVM: &VMSizeType{
family: "N",
subfamily: to.Ptr("V"),
cpus: "24",
cpusConstrained: nil,
additiveFeatures: []rune{},
acceleratorType: nil,
confidentialChildCapability: false,
version: "",
promoVersion: false,
series: "NV",
Family: "N",
Subfamily: to.Ptr("V"),
Cpus: "24",
CpusConstrained: nil,
AdditiveFeatures: []rune{},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "",
PromoVersion: false,
Series: "NV",
},
err: nil,
},
{
name: "Standard_D3_v2_Promo",
size: "D3_v2_Promo",
expectedVM: &VMSizeType{
family: "D",
subfamily: nil,
cpus: "3",
cpusConstrained: nil,
additiveFeatures: []rune{},
acceleratorType: nil,
confidentialChildCapability: false,
version: "v2",
promoVersion: true,
series: "D_v2",
Family: "D",
Subfamily: nil,
Cpus: "3",
CpusConstrained: nil,
AdditiveFeatures: []rune{},
AcceleratorType: nil,
ConfidentialChildCapability: false,
Version: "v2",
PromoVersion: true,
Series: "D_v2",
},
err: nil,
},
Expand All @@ -186,14 +186,14 @@ func Test_getVMsize(t *testing.T) {
if err != nil {
continue
}
a.Equal(test.expectedVM.family, vmSize.family)
a.Equal(test.expectedVM.subfamily, vmSize.subfamily)
a.Equal(test.expectedVM.cpus, vmSize.cpus)
a.Equal(test.expectedVM.cpusConstrained, vmSize.cpusConstrained)
a.Equal(test.expectedVM.additiveFeatures, vmSize.additiveFeatures)
a.Equal(test.expectedVM.acceleratorType, vmSize.acceleratorType)
a.Equal(test.expectedVM.confidentialChildCapability, vmSize.confidentialChildCapability)
a.Equal(test.expectedVM.version, vmSize.version)
a.Equal(test.expectedVM.promoVersion, vmSize.promoVersion)
a.Equal(test.expectedVM.Family, vmSize.Family)
a.Equal(test.expectedVM.Subfamily, vmSize.Subfamily)
a.Equal(test.expectedVM.Cpus, vmSize.Cpus)
a.Equal(test.expectedVM.CpusConstrained, vmSize.CpusConstrained)
a.Equal(test.expectedVM.AdditiveFeatures, vmSize.AdditiveFeatures)
a.Equal(test.expectedVM.AcceleratorType, vmSize.AcceleratorType)
a.Equal(test.expectedVM.ConfidentialChildCapability, vmSize.ConfidentialChildCapability)
a.Equal(test.expectedVM.Version, vmSize.Version)
a.Equal(test.expectedVM.PromoVersion, vmSize.PromoVersion)
}
}

0 comments on commit 6937bee

Please sign in to comment.