disktiers_test.go 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package azure
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/require"
  5. )
  6. func TestParseManagedDiskMeter(t *testing.T) {
  7. cases := []struct {
  8. name string
  9. meter string
  10. wantClass string
  11. wantRedund string
  12. wantTier string
  13. wantOK bool
  14. }{
  15. {name: "p4 lrs", meter: "P4 LRS Disk", wantClass: AzureDiskPremiumSSDStorageClass, wantRedund: "LRS", wantTier: "P4", wantOK: true},
  16. {name: "p10 zrs", meter: "P10 ZRS Disk", wantClass: AzureDiskPremiumSSDStorageClass, wantRedund: "ZRS", wantTier: "P10", wantOK: true},
  17. {name: "e20 lrs", meter: "E20 LRS Disk", wantClass: AzureDiskStandardSSDStorageClass, wantRedund: "LRS", wantTier: "E20", wantOK: true},
  18. {name: "s4 lrs", meter: "S4 LRS Disk", wantClass: AzureDiskStandardStorageClass, wantRedund: "LRS", wantTier: "S4", wantOK: true},
  19. {name: "disk mount", meter: "P4 LRS Disk Mount", wantOK: false},
  20. {name: "files", meter: "LRS Provisioned", wantOK: false},
  21. {name: "garbage", meter: "P4 are good", wantOK: false},
  22. }
  23. for _, tc := range cases {
  24. t.Run(tc.name, func(t *testing.T) {
  25. class, redund, tier, ok := parseManagedDiskMeter(tc.meter)
  26. require.Equal(t, tc.wantOK, ok)
  27. if tc.wantOK {
  28. require.Equal(t, tc.wantClass, class)
  29. require.Equal(t, tc.wantRedund, redund)
  30. require.Equal(t, tc.wantTier, tier)
  31. }
  32. })
  33. }
  34. }
  35. func TestResolveDiskSKU(t *testing.T) {
  36. sku, ok := resolveDiskSKU("Premium_LRS")
  37. require.True(t, ok)
  38. require.Equal(t, AzureDiskPremiumSSDStorageClass, sku.StorageClass)
  39. require.Equal(t, azureDiskRedundancyLRS, sku.Redundancy)
  40. sku, ok = resolveDiskSKU("Premium_ZRS")
  41. require.True(t, ok)
  42. require.Equal(t, azureDiskRedundancyZRS, sku.Redundancy)
  43. _, ok = resolveDiskSKU("not-a-sku")
  44. require.False(t, ok)
  45. }
  46. func TestPickSizedOrLargerAvailableTier(t *testing.T) {
  47. available := map[string]bool{"P4": true, "P15": true}
  48. has := func(name string) bool { return available[name] }
  49. tier, ok := pickSizedOrLargerAvailableTier(AzureDiskPremiumSSDStorageClass, "P10", has)
  50. require.True(t, ok)
  51. require.Equal(t, "P15", tier.Name)
  52. tier, ok = pickSizedOrLargerAvailableTier(AzureDiskPremiumSSDStorageClass, "P4", has)
  53. require.True(t, ok)
  54. require.Equal(t, "P4", tier.Name)
  55. _, ok = pickSizedOrLargerAvailableTier(AzureDiskPremiumSSDStorageClass, "P10", func(string) bool { return false })
  56. require.False(t, ok)
  57. onlySmaller := map[string]bool{"P4": true}
  58. _, ok = pickSizedOrLargerAvailableTier(AzureDiskPremiumSSDStorageClass, "P10", func(name string) bool { return onlySmaller[name] })
  59. require.False(t, ok)
  60. }
  61. func TestDiskRateConversions(t *testing.T) {
  62. monthly := 5.2795
  63. require.InDelta(t, monthly/730.0, tierHourlyFromMonthly(monthly), 1e-12)
  64. require.InDelta(t, monthly/730.0/10.0, effectiveGiBHourRate(monthly, 10), 1e-12)
  65. require.Equal(t, 0.0, effectiveGiBHourRate(monthly, 0))
  66. }
  67. func TestIsManagedDiskTierKey(t *testing.T) {
  68. require.True(t, isManagedDiskTierKey("centralus,premium_ssd,LRS,P4"))
  69. require.True(t, isManagedDiskTierKey("centralus,standard_ssd,ZRS,E20"))
  70. require.True(t, isManagedDiskTierKey("centralus,premium_ssd,LRS,P123"))
  71. require.False(t, isManagedDiskTierKey("centralus,Standard_D2s_v3,ondemand,windows"))
  72. require.False(t, isManagedDiskTierKey("centralus,premium_ssd,LRS,E20"))
  73. require.False(t, isManagedDiskTierKey("centralus,standard_hdd,LRS,Sx"))
  74. require.False(t, isManagedDiskTierKey("centralus,premium_ssd,LRS,P4 Mount"))
  75. require.False(t, isManagedDiskTierKey("centralus,premium_ssd,LRS"))
  76. }