|
|
@@ -464,8 +464,9 @@ func TestAllocationSet_generateKey(t *testing.T) {
|
|
|
var alloc *Allocation
|
|
|
var key string
|
|
|
|
|
|
- props := AllocationProperties{}
|
|
|
- props.Cluster = "true"
|
|
|
+ props := []string{
|
|
|
+ AllocationClusterProp.String(),
|
|
|
+ }
|
|
|
|
|
|
key = alloc.generateKey(props)
|
|
|
if key != "" {
|
|
|
@@ -486,8 +487,11 @@ func TestAllocationSet_generateKey(t *testing.T) {
|
|
|
t.Fatalf("generateKey: expected \"cluster1\"; actual \"%s\"", key)
|
|
|
}
|
|
|
|
|
|
- props.Namespace = "true"
|
|
|
- props.Labels = map[string]string{"app": ""}
|
|
|
+ props = []string{
|
|
|
+ AllocationClusterProp.String(),
|
|
|
+ AllocationNamespaceProp.String(),
|
|
|
+ "label:app",
|
|
|
+ }
|
|
|
|
|
|
key = alloc.generateKey(props)
|
|
|
if key != "cluster1//app=app1" {
|
|
|
@@ -860,7 +864,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1a AggregationProperties=(Cluster)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Cluster: "true"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationClusterProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1a", err, numClusters+numIdle, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1a", map[string]float64{
|
|
|
"cluster1": 46.00,
|
|
|
@@ -871,7 +875,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1b AggregationProperties=(Namespace)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1b", err, numNamespaces+numIdle, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1b", map[string]float64{
|
|
|
"namespace1": 28.00,
|
|
|
@@ -883,7 +887,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1c AggregationProperties=(Pod)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Pod: "true"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationPodProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1c", err, numPods+numIdle, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1c", map[string]float64{
|
|
|
"pod-jkl": 6.00,
|
|
|
@@ -901,7 +905,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1d AggregationProperties=(Container)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Container: "true"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationContainerProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1d", err, numContainers+numIdle, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1d", map[string]float64{
|
|
|
"container2": 6.00,
|
|
|
@@ -919,7 +923,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1e AggregationProperties=(ControllerKind)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{ControllerKind: "true"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationControllerKindProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1e", err, numControllerKinds+numIdle+numUnallocated, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1e", map[string]float64{
|
|
|
"daemonset": 12.00,
|
|
|
@@ -932,7 +936,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1f AggregationProperties=(Controller)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Controller: "true"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationControllerProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1f", err, numControllers+numIdle+numUnallocated, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1f", map[string]float64{
|
|
|
"deployment/deployment2": 24.00,
|
|
|
@@ -947,7 +951,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1g AggregationProperties=(Service)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Services: []string{"true"}}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationServiceProp)}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1g", err, numServices+numIdle+numUnallocated, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1g", map[string]float64{
|
|
|
"service1": 12.00,
|
|
|
@@ -958,7 +962,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1h AggregationProperties=(Label:app)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Labels: map[string]string{"app": ""}}, nil)
|
|
|
+ err = as.AggregateBy([]string{"label:app"}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1h", err, numLabelApps+numIdle+numUnallocated, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1h", map[string]float64{
|
|
|
"app=app1": 16.00,
|
|
|
@@ -970,7 +974,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1i AggregationProperties=(ControllerKind:deployment)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{ControllerKind: "deployment"}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationControllerKindProp), "controllerKind:deployment" }, nil)
|
|
|
assertAllocationSetTotals(t, as, "1i", err, 1+numIdle+numUnallocated, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1i", map[string]float64{
|
|
|
"deployment": 42.00,
|
|
|
@@ -981,7 +985,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 1j AggregationProperties=(Annotation:team)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Annotations: map[string]string{"team": ""}}, nil)
|
|
|
+ err = as.AggregateBy([]string{"annotation:team"}, nil)
|
|
|
assertAllocationSetTotals(t, as, "1j", err, 2+numIdle+numUnallocated, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "1j", map[string]float64{
|
|
|
"team=team1": 12.00,
|
|
|
@@ -999,7 +1003,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 2d AggregationProperties=(Label:app, Label:environment)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Labels: map[string]string{"app": "", "env": ""}}, nil)
|
|
|
+ err = as.AggregateBy([]string{"label:app;env"}, nil)
|
|
|
// sets should be {idle, unallocated, app1/env1, app2/env2, app2/unallocated}
|
|
|
assertAllocationSetTotals(t, as, "2d", err, numIdle+numUnallocated+3, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "2d", map[string]float64{
|
|
|
@@ -1012,7 +1016,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 2e AggregationProperties=(Cluster, Label:app, Label:environment)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Cluster: "true", Labels: map[string]string{"app": "", "env": ""}}, nil)
|
|
|
+ err = as.AggregateBy([]string{string(AllocationClusterProp), "label:app;env"}, nil)
|
|
|
assertAllocationSetTotals(t, as, "2e", err, 6, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "2e", map[string]float64{
|
|
|
"cluster1/app=app2/env=env2": 12.00,
|
|
|
@@ -1025,9 +1029,9 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 2f AggregationProperties=(annotation:team, pod)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Annotations: map[string]string{"team": ""}, Pod: "true"}, nil)
|
|
|
- assertAllocationSetTotals(t, as, "2e", err, 11, activeTotalCost+idleTotalCost)
|
|
|
- assertAllocationTotals(t, as, "2e", map[string]float64{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationPodProp), "annotation:team"}, nil)
|
|
|
+ assertAllocationSetTotals(t, as, "2f", err, 11, activeTotalCost+idleTotalCost)
|
|
|
+ assertAllocationTotals(t, as, "2f", map[string]float64{
|
|
|
"pod-jkl/" + UnallocatedSuffix: 6.00,
|
|
|
"pod-stu/team=team1": 6.00,
|
|
|
"pod-abc/" + UnallocatedSuffix: 6.00,
|
|
|
@@ -1050,7 +1054,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace2: 46.3125 = 36.00 + 5.0*(3.0/6.0) + 15.0*(3.0/16.0) + 5.0*(3.0/6.0) + 5.0*(3.0/6.0)
|
|
|
// namespace3: 23.0000 = 18.00 + 5.0*(3.0/6.0) + 5.0*(3.0/6.0)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{ShareIdle: ShareWeighted})
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{ShareIdle: ShareWeighted})
|
|
|
assertAllocationSetTotals(t, as, "3a", err, numNamespaces, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "3a", map[string]float64{
|
|
|
"namespace1": 42.69,
|
|
|
@@ -1064,7 +1068,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace2: 51.0000 = 36.00 + 5.0*(1.0/2.0) + 15.0*(1.0/2.0) + 5.0*(1.0/2.0) + 5.0*(1.0/2.0)
|
|
|
// namespace3: 23.0000 = 18.00 + 5.0*(1.0/2.0) + 5.0*(1.0/2.0)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{ShareIdle: ShareEven})
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{ShareIdle: ShareEven})
|
|
|
assertAllocationSetTotals(t, as, "3a", err, numNamespaces, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "3a", map[string]float64{
|
|
|
"namespace1": 38.00,
|
|
|
@@ -1080,7 +1084,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace2: 45.5000 = 36.00 + 18.00*(1.0/2.0)
|
|
|
// idle: 30.0000
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
ShareFuncs: []AllocationMatchFunc{isNamespace3},
|
|
|
ShareSplit: ShareEven,
|
|
|
})
|
|
|
@@ -1097,7 +1101,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace2: 37.5000 =
|
|
|
// idle: 30.0000
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
ShareFuncs: []AllocationMatchFunc{isNamespace3},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
})
|
|
|
@@ -1115,7 +1119,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace3: 23.3333 = 18.00 + 16.00*(1.0/3.0)
|
|
|
// idle: 30.0000
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
ShareFuncs: []AllocationMatchFunc{isApp1},
|
|
|
ShareSplit: ShareEven,
|
|
|
})
|
|
|
@@ -1134,7 +1138,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace3: 54.878 = 18.00 + (7.0*24.0)*(18.00/82.00)
|
|
|
// idle: 30.0000
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
SharedHourlyCosts: map[string]float64{"total": sharedOverheadHourlyCost},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
})
|
|
|
@@ -1165,7 +1169,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 5a Filter by cluster with separate idle
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Cluster: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationClusterProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isCluster("cluster1")},
|
|
|
ShareIdle: ShareNone,
|
|
|
})
|
|
|
@@ -1178,7 +1182,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 5b Filter by cluster with shared idle
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Cluster: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationClusterProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isCluster("cluster1")},
|
|
|
ShareIdle: ShareWeighted,
|
|
|
})
|
|
|
@@ -1190,7 +1194,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 5c Filter by cluster, agg by namespace, with separate idle
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isCluster("cluster1")},
|
|
|
ShareIdle: ShareNone,
|
|
|
})
|
|
|
@@ -1204,7 +1208,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 5d Filter by namespace, agg by cluster, with separate idle
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Cluster: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationClusterProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
ShareIdle: ShareNone,
|
|
|
})
|
|
|
@@ -1220,7 +1224,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
|
|
|
// 6a SplitIdle
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{SplitIdle: true})
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{SplitIdle: true})
|
|
|
assertAllocationSetTotals(t, as, "6a", err, numNamespaces+numSplitIdle, activeTotalCost+idleTotalCost)
|
|
|
assertAllocationTotals(t, as, "6a", map[string]float64{
|
|
|
"namespace1": 28.00,
|
|
|
@@ -1235,7 +1239,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// Should match values from unfiltered aggregation (3a)
|
|
|
// namespace2: 46.3125 = 36.00 + 5.0*(3.0/6.0) + 15.0*(3.0/16.0) + 5.0*(3.0/6.0) + 5.0*(3.0/6.0)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
ShareIdle: ShareWeighted,
|
|
|
})
|
|
|
@@ -1249,7 +1253,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// Should match values from unfiltered aggregation (3b)
|
|
|
// namespace2: 51.0000 = 36.00 + 5.0*(1.0/2.0) + 15.0*(1.0/2.0) + 5.0*(1.0/2.0) + 5.0*(1.0/2.0)
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
ShareIdle: ShareEven,
|
|
|
})
|
|
|
@@ -1266,7 +1270,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// idle: 30.0000
|
|
|
// Then namespace 2 is filtered.
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
SharedHourlyCosts: map[string]float64{"total": sharedOverheadHourlyCost},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
@@ -1287,7 +1291,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// namespace2: 54.667 = 36.00 + (28.00)*(36.00/54.00)
|
|
|
// idle: 30.0000
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
ShareFuncs: []AllocationMatchFunc{isNamespace("namespace1")},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
@@ -1335,7 +1339,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// shared cost 14.2292 = (42.6875)*(18.0/54.0)
|
|
|
//
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
ShareFuncs: []AllocationMatchFunc{isNamespace("namespace1")},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
ShareIdle: ShareWeighted,
|
|
|
@@ -1385,7 +1389,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
// Then, filter for namespace2: 74.7708
|
|
|
//
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
ShareFuncs: []AllocationMatchFunc{isNamespace("namespace1")},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
@@ -1426,7 +1430,7 @@ func TestAllocationSet_AggregateBy(t *testing.T) {
|
|
|
//
|
|
|
// Then namespace 2 is filtered.
|
|
|
as = generateAllocationSet(start)
|
|
|
- err = as.AggregateBy(AllocationProperties{Namespace: "true"}, &AllocationAggregationOptions{
|
|
|
+ err = as.AggregateBy([]string{string(AllocationNamespaceProp)}, &AllocationAggregationOptions{
|
|
|
FilterFuncs: []AllocationMatchFunc{isNamespace("namespace2")},
|
|
|
ShareSplit: ShareWeighted,
|
|
|
ShareIdle: ShareWeighted,
|