cloud_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package test
  2. import (
  3. "testing"
  4. "github.com/kubecost/cost-model/pkg/cloud"
  5. v1 "k8s.io/api/core/v1"
  6. )
  7. const(
  8. providerIDMap = "spec.providerID"
  9. nameMap = "metadata.name"
  10. labelMapFoo = "metadata.labels.foo"
  11. )
  12. func TestTransformedValueFromMapField(t *testing.T) {
  13. providerIDWant := "i-05445591e0d182d42"
  14. n := &v1.Node{}
  15. n.Spec.ProviderID = "aws:///us-east-1a/i-05445591e0d182d42"
  16. got := cloud.NodeValueFromMapField(providerIDMap, n)
  17. if got != providerIDWant {
  18. t.Errorf("Assert on '%s' want '%s' got '%s'", providerIDMap, providerIDWant, got)
  19. }
  20. providerIDWant2 := "/subscriptions/0bd50fdf-c923-4e1e-850c-196dd3dcc5d3/resourceGroups/MC_test_test_eastus/providers/Microsoft.Compute/virtualMachines/aks-agentpool-20139558-0"
  21. n2 := &v1.Node{}
  22. n2.Spec.ProviderID = "azure:///subscriptions/0bd50fdf-c923-4e1e-850c-196dd3dcc5d3/resourceGroups/MC_test_test_eastus/providers/Microsoft.Compute/virtualMachines/aks-agentpool-20139558-0"
  23. got2 := cloud.NodeValueFromMapField(providerIDMap, n2)
  24. if got2 != providerIDWant2 {
  25. t.Errorf("Assert on '%s' want '%s' got '%s'", providerIDMap, providerIDWant2, got2)
  26. }
  27. providerIDWant3 := "/subscriptions/0bd50fdf-c923-4e1e-850c-196dd3dcc5d3/resourceGroups/mc_testspot_testspot_eastus/providers/Microsoft.Compute/virtualMachineScaleSets/aks-nodepool1-19213364-vmss/virtualMachines/0"
  28. n3 := &v1.Node{}
  29. n3.Spec.ProviderID = "azure:///subscriptions/0bd50fdf-c923-4e1e-850c-196dd3dcc5d3/resourceGroups/mc_testspot_testspot_eastus/providers/Microsoft.Compute/virtualMachineScaleSets/aks-nodepool1-19213364-vmss/virtualMachines/0"
  30. got3 := cloud.NodeValueFromMapField(providerIDMap, n3)
  31. if got3 != providerIDWant3 {
  32. t.Errorf("Assert on '%s' want '%s' got '%s'", providerIDMap, providerIDWant3, got3)
  33. }
  34. }
  35. func TestNodeValueFromMapField(t *testing.T) {
  36. providerIDWant := "providerid"
  37. nameWant := "gke-standard-cluster-1-pool-1-91dc432d-cg69"
  38. labelFooWant := "labelfoo"
  39. n := &v1.Node{}
  40. n.Spec.ProviderID = providerIDWant
  41. n.Name = nameWant
  42. n.Labels = make(map[string]string)
  43. n.Labels["foo"] = labelFooWant
  44. got := cloud.NodeValueFromMapField(providerIDMap, n)
  45. if got != providerIDWant {
  46. t.Errorf("Assert on '%s' want '%s' got '%s'", providerIDMap, providerIDWant, got)
  47. }
  48. got = cloud.NodeValueFromMapField(nameMap, n)
  49. if got != nameWant {
  50. t.Errorf("Assert on '%s' want '%s' got '%s'", nameMap, nameWant, got)
  51. }
  52. got = cloud.NodeValueFromMapField(labelMapFoo, n)
  53. if got != labelFooWant {
  54. t.Errorf("Assert on '%s' want '%s' got '%s'", labelMapFoo, labelFooWant, got)
  55. }
  56. }
  57. func TestNodePriceFromCSV(t * testing.T) {
  58. providerIDWant := "providerid"
  59. nameWant := "gke-standard-cluster-1-pool-1-91dc432d-cg69"
  60. labelFooWant := "labelfoo"
  61. n := &v1.Node{}
  62. n.Spec.ProviderID = providerIDWant
  63. n.Name = nameWant
  64. n.Labels = make(map[string]string)
  65. n.Labels["foo"] = labelFooWant
  66. wantPrice := "0.1337"
  67. c := &cloud.CSVProvider{
  68. CSVLocation: "../configs/pricing_schema.csv",
  69. CustomProvider: &cloud.CustomProvider{
  70. Config: cloud.NewProviderConfig("../configs/default.json"),
  71. },
  72. }
  73. c.DownloadPricingData()
  74. k := c.GetKey(n.Labels, n)
  75. resN, err := c.NodePricing(k)
  76. if err != nil {
  77. t.Errorf("Error in NodePricing: %s", err.Error())
  78. } else {
  79. gotPrice := resN.Cost
  80. if gotPrice != wantPrice {
  81. t.Errorf("Wanted price '%s' got price '%s'", wantPrice, gotPrice)
  82. }
  83. }
  84. unknownN := &v1.Node{}
  85. unknownN.Spec.ProviderID = providerIDWant
  86. unknownN.Name = "unknownname"
  87. unknownN.Labels = make(map[string]string)
  88. unknownN.Labels["foo"] = labelFooWant
  89. k2 := c.GetKey(n.Labels, unknownN)
  90. resN2, _ := c.NodePricing(k2)
  91. if resN2 != nil {
  92. t.Errorf("CSV provider should return nil on missing node")
  93. }
  94. c2 := &cloud.CSVProvider{
  95. CSVLocation: "../configs/fake.csv",
  96. CustomProvider: &cloud.CustomProvider{
  97. Config: cloud.NewProviderConfig("../configs/default.json"),
  98. },
  99. }
  100. k3 := c.GetKey(n.Labels, n)
  101. resN3, _ := c2.NodePricing(k3)
  102. if resN3 != nil {
  103. t.Errorf("CSV provider should return nil on missing csv")
  104. }
  105. }