cloud_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. }
  21. func TestNodeValueFromMapField(t *testing.T) {
  22. providerIDWant := "providerid"
  23. nameWant := "gke-standard-cluster-1-pool-1-91dc432d-cg69"
  24. labelFooWant := "labelfoo"
  25. n := &v1.Node{}
  26. n.Spec.ProviderID = providerIDWant
  27. n.Name = nameWant
  28. n.Labels = make(map[string]string)
  29. n.Labels["foo"] = labelFooWant
  30. got := cloud.NodeValueFromMapField(providerIDMap, n)
  31. if got != providerIDWant {
  32. t.Errorf("Assert on '%s' want '%s' got '%s'", providerIDMap, providerIDWant, got)
  33. }
  34. got = cloud.NodeValueFromMapField(nameMap, n)
  35. if got != nameWant {
  36. t.Errorf("Assert on '%s' want '%s' got '%s'", nameMap, nameWant, got)
  37. }
  38. got = cloud.NodeValueFromMapField(labelMapFoo, n)
  39. if got != labelFooWant {
  40. t.Errorf("Assert on '%s' want '%s' got '%s'", labelMapFoo, labelFooWant, got)
  41. }
  42. }
  43. func TestNodePriceFromCSV(t * testing.T) {
  44. providerIDWant := "providerid"
  45. nameWant := "gke-standard-cluster-1-pool-1-91dc432d-cg69"
  46. labelFooWant := "labelfoo"
  47. n := &v1.Node{}
  48. n.Spec.ProviderID = providerIDWant
  49. n.Name = nameWant
  50. n.Labels = make(map[string]string)
  51. n.Labels["foo"] = labelFooWant
  52. wantPrice := "0.1337"
  53. c := &cloud.CSVProvider{
  54. CSVLocation: "../configs/pricing_schema.csv",
  55. CustomProvider: &cloud.CustomProvider{
  56. Config: cloud.NewProviderConfig("../configs/default.json"),
  57. },
  58. }
  59. c.DownloadPricingData()
  60. k := c.GetKey(n.Labels, n)
  61. resN, _ := c.NodePricing(k)
  62. gotPrice := resN.Cost
  63. if gotPrice != wantPrice {
  64. t.Errorf("Wanted price '%s' got price '%s'", wantPrice, gotPrice)
  65. }
  66. unknownN := &v1.Node{}
  67. unknownN.Spec.ProviderID = providerIDWant
  68. unknownN.Name = "unknownname"
  69. unknownN.Labels = make(map[string]string)
  70. unknownN.Labels["foo"] = labelFooWant
  71. k2 := c.GetKey(n.Labels, unknownN)
  72. resN2, _ := c.NodePricing(k2)
  73. if resN2 != nil {
  74. t.Errorf("CSV provider should return nil on missing node")
  75. }
  76. c2 := &cloud.CSVProvider{
  77. CSVLocation: "../configs/fake.csv",
  78. CustomProvider: &cloud.CustomProvider{
  79. Config: cloud.NewProviderConfig("../configs/default.json"),
  80. },
  81. }
  82. k3 := c.GetKey(n.Labels, n)
  83. resN3, _ := c2.NodePricing(k3)
  84. if resN3 != nil {
  85. t.Errorf("CSV provider should return nil on missing csv")
  86. }
  87. }