aggregation_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package costmodel_test
  2. import (
  3. "log"
  4. "testing"
  5. "gotest.tools/assert"
  6. "github.com/kubecost/cost-model/pkg/cloud"
  7. costModel "github.com/kubecost/cost-model/pkg/costmodel"
  8. )
  9. func TestAggregation(t *testing.T) {
  10. cp := &cloud.CustomProvider{}
  11. cd1 := &costModel.CostData{
  12. Namespace: "test1",
  13. NodeName: "testnode",
  14. NodeData: &cloud.Node{
  15. VCPUCost: "1.0",
  16. RAMCost: "1.0",
  17. },
  18. RAMAllocation: []*costModel.Vector{&costModel.Vector{
  19. Timestamp: 10,
  20. Value: 1073741824,
  21. }},
  22. CPUAllocation: []*costModel.Vector{&costModel.Vector{
  23. Timestamp: 10,
  24. Value: 1.0,
  25. }},
  26. GPUReq: []*costModel.Vector{&costModel.Vector{}},
  27. PVCData: []*costModel.PersistentVolumeClaimData{
  28. &costModel.PersistentVolumeClaimData{
  29. Namespace: "test1",
  30. VolumeName: "foo",
  31. Volume: &cloud.PV{
  32. Cost: "1.0",
  33. Size: "1073741824",
  34. },
  35. Values: []*costModel.Vector{&costModel.Vector{
  36. Timestamp: 10,
  37. Value: 1073741824,
  38. }},
  39. },
  40. &costModel.PersistentVolumeClaimData{
  41. Namespace: "test1",
  42. VolumeName: "bar",
  43. Volume: &cloud.PV{
  44. Cost: "1.0",
  45. Size: "1073741824",
  46. },
  47. Values: []*costModel.Vector{&costModel.Vector{
  48. Timestamp: 10,
  49. Value: 1073741824,
  50. }},
  51. },
  52. },
  53. }
  54. cd2 := &costModel.CostData{
  55. Namespace: "test1",
  56. NodeName: "testnode",
  57. NodeData: &cloud.Node{
  58. VCPUCost: "1.0",
  59. RAMCost: "1.0",
  60. },
  61. RAMAllocation: []*costModel.Vector{&costModel.Vector{
  62. Timestamp: 10,
  63. Value: 1073741824,
  64. }},
  65. CPUAllocation: []*costModel.Vector{&costModel.Vector{
  66. Timestamp: 10,
  67. Value: 1.0,
  68. }},
  69. GPUReq: []*costModel.Vector{&costModel.Vector{}},
  70. PVCData: []*costModel.PersistentVolumeClaimData{
  71. &costModel.PersistentVolumeClaimData{
  72. Namespace: "test1",
  73. VolumeName: "foo",
  74. Volume: &cloud.PV{
  75. Cost: "1.0",
  76. Size: "1073741824",
  77. },
  78. Values: []*costModel.Vector{&costModel.Vector{
  79. Timestamp: 10,
  80. Value: 1073741824,
  81. }},
  82. },
  83. &costModel.PersistentVolumeClaimData{
  84. Namespace: "test1",
  85. VolumeName: "bar",
  86. Volume: &cloud.PV{
  87. Cost: "1.0",
  88. Size: "1073741824",
  89. },
  90. Values: []*costModel.Vector{&costModel.Vector{
  91. Timestamp: 10,
  92. Value: 1073741824,
  93. }},
  94. },
  95. },
  96. }
  97. costData := make(map[string]*costModel.CostData)
  98. costData["test1,foo,nginx,testnode"] = cd1
  99. costData["test1,bar,nginx,testnode"] = cd2
  100. field := "namespace"
  101. subfields := []string{""}
  102. agg := costModel.AggregateCostData(costData, field, subfields, cp, nil)
  103. log.Printf("agg: %+v", agg["test1"])
  104. assert.Equal(t, agg["test1"].TotalCost, 8.0)
  105. }