aggregation_test.go 2.5 KB

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