Selaa lähdekoodia

Fix up mocks and tests for KubeModel source

Niko Kovacevic 6 kuukautta sitten
vanhempi
sitoutus
38f02152d3

+ 2 - 1
core/pkg/opencost/exporter/controllers.go

@@ -23,6 +23,7 @@ type ComputePipelineSource interface {
 	allocation.AllocationSource
 	asset.AssetSource
 	networkinsight.NetworkInsightSource
+	exporterkubemodel.KubeModelSource
 
 	GetDataSource() source.OpenCostDataSource
 }
@@ -136,7 +137,7 @@ func NewPipelineExportControllers(clusterId string, store storage.Storage, cm Co
 	}
 
 	// KubeModel sources and exporters
-	kubeModelSource := exporterkubemodel.NewKubeModelComputeSource(nil) // TODO: CREATE AN IMPLEMENTATION OF ComputeSource[kubemodel.KubeModelSet]
+	kubeModelSource := exporterkubemodel.NewKubeModelComputeSource(cm) // TODO: CREATE AN IMPLEMENTATION OF ComputeSource[kubemodel.KubeModelSet]
 	kubeModelExportControllers := []*export.ComputeExportController[kubemodel.KubeModelSet]{}
 
 	for _, res := range config.KubeModelPipelineResolutions {

+ 25 - 12
core/pkg/opencost/exporter/exporter_test.go

@@ -9,6 +9,7 @@ import (
 	"github.com/opencost/opencost/core/pkg/diagnostics"
 	"github.com/opencost/opencost/core/pkg/exporter"
 	"github.com/opencost/opencost/core/pkg/exporter/pathing"
+	"github.com/opencost/opencost/core/pkg/model/kubemodel"
 	"github.com/opencost/opencost/core/pkg/opencost"
 	"github.com/opencost/opencost/core/pkg/pipelines"
 	"github.com/opencost/opencost/core/pkg/source"
@@ -58,6 +59,12 @@ func NewMockNetworkInsightSource() exporter.ComputeSource[opencost.NetworkInsigh
 	}
 }
 
+func NewMockKubeModelSource() exporter.ComputeSource[kubemodel.KubeModelSet] {
+	return &MockSource[kubemodel.KubeModelSet]{
+		generate: func(start, end time.Time) *kubemodel.KubeModelSet { return opencost.GenerateMockKubeModelSet(start) },
+	}
+}
+
 type MockDataSource struct {
 	resolution time.Duration
 }
@@ -81,27 +88,30 @@ func (mds *MockDataSource) BatchDuration() time.Duration
 func (mds *MockDataSource) Resolution() time.Duration                                     { return mds.resolution }
 
 type MockPipelineComputeSource struct {
-	allocSource exporter.ComputeSource[opencost.AllocationSet]
-	assetSource exporter.ComputeSource[opencost.AssetSet]
-	netSource   exporter.ComputeSource[opencost.NetworkInsightSet]
-	ds          *MockDataSource
+	allocSource     exporter.ComputeSource[opencost.AllocationSet]
+	assetSource     exporter.ComputeSource[opencost.AssetSet]
+	netSource       exporter.ComputeSource[opencost.NetworkInsightSet]
+	kubeModelSource exporter.ComputeSource[kubemodel.KubeModelSet]
+	ds              *MockDataSource
 }
 
 func NewMockPipelineComputeSource() *MockPipelineComputeSource {
 	return &MockPipelineComputeSource{
-		allocSource: NewMockAllocationSource(),
-		assetSource: NewMockAssetSource(),
-		netSource:   NewMockNetworkInsightSource(),
-		ds:          NewMockDataSource(),
+		allocSource:     NewMockAllocationSource(),
+		assetSource:     NewMockAssetSource(),
+		netSource:       NewMockNetworkInsightSource(),
+		kubeModelSource: NewMockKubeModelSource(),
+		ds:              NewMockDataSource(),
 	}
 }
 
 func NewMockPipelineComputeSourceWith(srcResolution time.Duration) *MockPipelineComputeSource {
 	return &MockPipelineComputeSource{
-		allocSource: NewMockAllocationSource(),
-		assetSource: NewMockAssetSource(),
-		netSource:   NewMockNetworkInsightSource(),
-		ds:          NewMockDataSourceWith(srcResolution),
+		allocSource:     NewMockAllocationSource(),
+		assetSource:     NewMockAssetSource(),
+		netSource:       NewMockNetworkInsightSource(),
+		kubeModelSource: NewMockKubeModelSource(),
+		ds:              NewMockDataSourceWith(srcResolution),
 	}
 }
 
@@ -114,6 +124,9 @@ func (mpcs *MockPipelineComputeSource) ComputeAssets(start, end time.Time) (*ope
 func (mpcs *MockPipelineComputeSource) ComputeNetworkInsights(start, end time.Time) (*opencost.NetworkInsightSet, error) {
 	return mpcs.netSource.Compute(start, end)
 }
+func (mpcs *MockPipelineComputeSource) ComputeKubeModel(start, end time.Time) (*kubemodel.KubeModelSet, error) {
+	return mpcs.kubeModelSource.Compute(start, end)
+}
 func (mpcs *MockPipelineComputeSource) GetDataSource() source.OpenCostDataSource {
 	return mpcs.ds
 }

+ 9 - 0
core/pkg/opencost/mock.go

@@ -3,6 +3,8 @@ package opencost
 import (
 	"fmt"
 	"time"
+
+	"github.com/opencost/opencost/core/pkg/model/kubemodel"
 )
 
 const gb = 1024 * 1024 * 1024
@@ -1013,3 +1015,10 @@ func GenerateMockCloudCostSet(start, end time.Time, provider, integration string
 
 	return ccs
 }
+
+// GenerateMockKubeModelSet creates generic allocation set without idle allocations
+func GenerateMockKubeModelSet(start time.Time) *kubemodel.KubeModelSet {
+	// TODO: fill out mocks
+
+	return &kubemodel.KubeModelSet{}
+}