provider_test.go 2.7 KB

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