azureprovider_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package cloud
  2. import (
  3. "testing"
  4. "github.com/Azure/azure-sdk-for-go/services/preview/commerce/mgmt/2015-06-01-preview/commerce"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestParseAzureSubscriptionID(t *testing.T) {
  8. cases := []struct {
  9. input string
  10. expected string
  11. }{
  12. {
  13. input: "azure:///subscriptions/0badafdf-1234-abcd-wxyz-123456789/...",
  14. expected: "0badafdf-1234-abcd-wxyz-123456789",
  15. },
  16. {
  17. input: "azure:/subscriptions/0badafdf-1234-abcd-wxyz-123456789/...",
  18. expected: "",
  19. },
  20. {
  21. input: "azure:///subscriptions//",
  22. expected: "",
  23. },
  24. {
  25. input: "",
  26. expected: "",
  27. },
  28. }
  29. for _, test := range cases {
  30. result := parseAzureSubscriptionID(test.input)
  31. if result != test.expected {
  32. t.Errorf("Input: %s, Expected: %s, Actual: %s", test.input, test.expected, result)
  33. }
  34. }
  35. }
  36. func TestConvertMeterToPricings(t *testing.T) {
  37. regions := map[string]string{
  38. "useast": "US East",
  39. "japanwest": "Japan West",
  40. "australiasoutheast": "Australia Southeast",
  41. "norwaywest": "Norway West",
  42. }
  43. baseCPUPrice := "0.30000"
  44. meterInfo := func(category, subcategory, name, region string, rate float64) commerce.MeterInfo {
  45. return commerce.MeterInfo{
  46. MeterCategory: &category,
  47. MeterSubCategory: &subcategory,
  48. MeterName: &name,
  49. MeterRegion: &region,
  50. MeterRates: map[string]*float64{"0": &rate},
  51. }
  52. }
  53. t.Run("windows", func(t *testing.T) {
  54. info := meterInfo("Virtual Machines", "D2 Series Windows", "D2s v3", "AU Southeast", 0.3)
  55. results, err := convertMeterToPricings(info, regions, baseCPUPrice)
  56. require.NoError(t, err)
  57. require.Nil(t, results)
  58. })
  59. t.Run("storage", func(t *testing.T) {
  60. info := meterInfo("Storage", "Some SSD type", "P4 are good", "US East", 2000)
  61. results, err := convertMeterToPricings(info, regions, baseCPUPrice)
  62. require.NoError(t, err)
  63. expected := map[string]*AzurePricing{
  64. "useast,premium_ssd": {
  65. PV: &PV{Cost: "0.085616", Region: "useast"},
  66. },
  67. }
  68. require.Equal(t, expected, results)
  69. })
  70. t.Run("virtual machines", func(t *testing.T) {
  71. info := meterInfo("Virtual Machines", "Eav4/Easv4 Series", "E96a v4/E96as v4 Low Priority", "JA West", 10)
  72. results, err := convertMeterToPricings(info, regions, baseCPUPrice)
  73. require.NoError(t, err)
  74. expected := map[string]*AzurePricing{
  75. "japanwest,Standard_E96a_v4,preemptible": {
  76. Node: &Node{Cost: "10.000000", BaseCPUPrice: "0.30000", UsageType: "preemptible"},
  77. },
  78. "japanwest,Standard_E96as_v4,preemptible": {
  79. Node: &Node{Cost: "10.000000", BaseCPUPrice: "0.30000", UsageType: "preemptible"},
  80. },
  81. }
  82. require.Equal(t, expected, results)
  83. })
  84. }