894 lines
24 KiB
Go
894 lines
24 KiB
Go
package modeling
|
|
|
|
import (
|
|
"container/list"
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/emirpasic/gods/trees/redblacktree"
|
|
corev1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
|
|
clusterapis "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
|
|
)
|
|
|
|
func TestInitSummary(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
if actualValue := len(rs); actualValue != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
}
|
|
|
|
func TestInitSummaryError(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
if actualValue := len(rs); actualValue != 0 {
|
|
t.Errorf("Got %v expected %v", actualValue, 0)
|
|
}
|
|
|
|
if err == nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
}
|
|
|
|
func TestSearchLastLessElement(t *testing.T) {
|
|
nums, target := []resource.Quantity{
|
|
*resource.NewMilliQuantity(1999, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(4327, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(9783, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(12378, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(23480, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(74217, resource.DecimalSI),
|
|
}, *resource.NewMilliQuantity(10000, resource.DecimalSI)
|
|
index := searchLastLessElement(nums, target)
|
|
if index != 2 {
|
|
t.Errorf("Got %v expected %v", index, 2)
|
|
}
|
|
nums, target = []resource.Quantity{
|
|
*resource.NewMilliQuantity(1000, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(3400, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(4500, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(8700, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(11599, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(62300, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(95600, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(134600, resource.DecimalSI),
|
|
}, *resource.NewMilliQuantity(9700, resource.DecimalSI)
|
|
index = searchLastLessElement(nums, target)
|
|
if index != 3 {
|
|
t.Errorf("Got %v expected %v", index, 3)
|
|
}
|
|
nums, target = []resource.Quantity{
|
|
*resource.NewMilliQuantity(1000, resource.DecimalSI),
|
|
*resource.NewMilliQuantity(2000, resource.DecimalSI),
|
|
}, *resource.NewMilliQuantity(0, resource.DecimalSI)
|
|
index = searchLastLessElement(nums, target)
|
|
if index != -1 {
|
|
t.Errorf("Got %v expected %v", index, -1)
|
|
}
|
|
}
|
|
|
|
func TestGetIndex(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
crn := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
}
|
|
index := rs.getIndex(crn)
|
|
|
|
if index != 1 {
|
|
t.Errorf("Got %v expected %v", index, 1)
|
|
}
|
|
|
|
crn = ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(20, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*100, resource.DecimalSI),
|
|
},
|
|
}
|
|
index = rs.getIndex(crn)
|
|
|
|
if index != 1 {
|
|
t.Errorf("Got %v expected %v", index, 1)
|
|
}
|
|
}
|
|
|
|
func TestClusterResourceNodeComparator(t *testing.T) {
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 10,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(10, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 789,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(2, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
}
|
|
if res := clusterResourceNodeComparator(crn1, crn2); res != 1 {
|
|
t.Errorf("Got %v expected %v", res, 1)
|
|
}
|
|
|
|
crn1 = ClusterResourceNode{
|
|
quantity: 10,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(6, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 = ClusterResourceNode{
|
|
quantity: 789,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(6, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
}
|
|
if res := clusterResourceNodeComparator(crn1, crn2); res != 0 {
|
|
t.Errorf("Got %v expected %v", res, 0)
|
|
}
|
|
|
|
crn1 = ClusterResourceNode{
|
|
quantity: 10,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(6, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 = ClusterResourceNode{
|
|
quantity: 789,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(6, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*10, resource.DecimalSI),
|
|
},
|
|
}
|
|
if res := clusterResourceNodeComparator(crn1, crn2); res != -1 {
|
|
t.Errorf("Got %v expected %v", res, -1)
|
|
}
|
|
}
|
|
|
|
func TestGetNodeNumFromModel(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
if actualValue := len(rs); actualValue != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 3,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(8, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn3 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
rs.AddToResourceSummary(crn1)
|
|
rs.AddToResourceSummary(crn2)
|
|
rs.AddToResourceSummary(crn3)
|
|
|
|
for index := range rs {
|
|
num := rs.GetNodeNumFromModel(&rs[index])
|
|
if index == 0 {
|
|
if num != 0 {
|
|
t.Errorf("Got %v expected %v", num, 0)
|
|
}
|
|
}
|
|
if index == 1 {
|
|
if num != 2 {
|
|
t.Errorf("Got %v expected %v", num, 2)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestConvertToResourceList(t *testing.T) {
|
|
rslist := corev1.ResourceList{
|
|
corev1.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
corev1.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
}
|
|
rsl := ConvertToResourceList(rslist)
|
|
for name := range rsl {
|
|
if reflect.TypeOf(name).String() != "v1alpha1.ResourceName" {
|
|
t.Errorf("Got %v expected %v", reflect.TypeOf(name), "v1alpha1.ResourceName")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLlConvertToRbt(t *testing.T) {
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 6,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(2, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*7, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 5,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(6, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn3 := ClusterResourceNode{
|
|
quantity: 4,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(5, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*8, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn4 := ClusterResourceNode{
|
|
quantity: 3,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(8, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn5 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn6 := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(2, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*12, resource.DecimalSI),
|
|
},
|
|
}
|
|
mylist := list.New()
|
|
mylist.PushBack(crn5)
|
|
mylist.PushBack(crn1)
|
|
mylist.PushBack(crn6)
|
|
mylist.PushBack(crn3)
|
|
mylist.PushBack(crn2)
|
|
mylist.PushBack(crn4)
|
|
|
|
rbt := llConvertToRbt(mylist)
|
|
fmt.Println(rbt)
|
|
if actualValue := rbt.Size(); actualValue != 6 {
|
|
t.Errorf("Got %v expected %v", actualValue, 6)
|
|
}
|
|
|
|
actualValue := rbt.GetNode(crn5)
|
|
node := actualValue.Key.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
actualValue = rbt.GetNode(crn6)
|
|
node = actualValue.Key.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 1 {
|
|
t.Errorf("Got %v expected %v", actualValue, 1)
|
|
}
|
|
|
|
actualValue = rbt.GetNode(crn1)
|
|
node = actualValue.Key.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 6 {
|
|
t.Errorf("Got %v expected %v", actualValue, 6)
|
|
}
|
|
}
|
|
|
|
func TestRbtConvertToLl(t *testing.T) {
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 6,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(2, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*7, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 5,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(6, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn3 := ClusterResourceNode{
|
|
quantity: 4,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(5, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*8, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn4 := ClusterResourceNode{
|
|
quantity: 3,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(8, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn5 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn6 := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(2, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*12, resource.DecimalSI),
|
|
},
|
|
}
|
|
tree := redblacktree.NewWith(clusterResourceNodeComparator)
|
|
|
|
if actualValue := tree.Size(); actualValue != 0 {
|
|
t.Errorf("Got %v expected %v", actualValue, 0)
|
|
}
|
|
|
|
if actualValue := tree.GetNode(2).Size(); actualValue != 0 {
|
|
t.Errorf("Got %v expected %v", actualValue, 0)
|
|
}
|
|
|
|
tree.Put(crn2, crn2.quantity)
|
|
tree.Put(crn1, crn1.quantity)
|
|
tree.Put(crn6, crn6.quantity)
|
|
tree.Put(crn3, crn3.quantity)
|
|
tree.Put(crn5, crn5.quantity)
|
|
tree.Put(crn4, crn4.quantity)
|
|
|
|
ll := rbtConvertToLl(tree)
|
|
fmt.Println(ll)
|
|
|
|
for element := ll.Front(); element != nil; element = element.Next() {
|
|
fmt.Println(element.Value)
|
|
}
|
|
|
|
actualValue := ll.Front()
|
|
node := actualValue.Value.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
ll.Remove(actualValue)
|
|
|
|
actualValue = ll.Front()
|
|
node = actualValue.Value.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 6 {
|
|
t.Errorf("Got %v expected %v", actualValue, 6)
|
|
}
|
|
ll.Remove(actualValue)
|
|
|
|
actualValue = ll.Front()
|
|
node = actualValue.Value.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 1 {
|
|
t.Errorf("Got %v expected %v", actualValue, 1)
|
|
}
|
|
ll.Remove(actualValue)
|
|
|
|
actualValue = ll.Front()
|
|
node = actualValue.Value.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 4 {
|
|
t.Errorf("Got %v expected %v", actualValue, 4)
|
|
}
|
|
ll.Remove(actualValue)
|
|
|
|
actualValue = ll.Front()
|
|
node = actualValue.Value.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 5 {
|
|
t.Errorf("Got %v expected %v", actualValue, 5)
|
|
}
|
|
ll.Remove(actualValue)
|
|
|
|
actualValue = ll.Front()
|
|
node = actualValue.Value.(ClusterResourceNode)
|
|
if quantity := node.quantity; quantity != 3 {
|
|
t.Errorf("Got %v expected %v", actualValue, 3)
|
|
}
|
|
ll.Remove(actualValue)
|
|
|
|
if actualValue := ll.Len(); actualValue != 0 {
|
|
t.Errorf("Got %v expected %v", actualValue, 0)
|
|
}
|
|
}
|
|
|
|
func TestAddToResourceSummary(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
if actualValue := len(rs); actualValue != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 3,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(8, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn3 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
rs.AddToResourceSummary(crn1)
|
|
rs.AddToResourceSummary(crn2)
|
|
rs.AddToResourceSummary(crn3)
|
|
|
|
for index, v := range rs {
|
|
num := rs.GetNodeNumFromModel(&rs[index])
|
|
if index == 0 && num != 0 {
|
|
t.Errorf("Got %v expected %v", num, 0)
|
|
}
|
|
if index == 1 && num != 2 {
|
|
t.Errorf("Got %v expected %v", num, 2)
|
|
}
|
|
if index == 0 && v.Quantity != 0 {
|
|
t.Errorf("Got %v expected %v", v.Quantity, 0)
|
|
}
|
|
if index == 1 && v.Quantity != 6 {
|
|
t.Errorf("Got %v expected %v", v.Quantity, 6)
|
|
}
|
|
}
|
|
|
|
crn4 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(19, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
rs.AddToResourceSummary(crn4)
|
|
|
|
if actualValue := rs[0]; actualValue.Quantity != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
if actualValue := rs[0]; rs.GetNodeNumFromModel(&actualValue) != 1 {
|
|
t.Errorf("Got %v expected %v", actualValue, 1)
|
|
}
|
|
}
|
|
|
|
func TestDeleteFromResourceSummary(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
if actualValue := len(rs); actualValue != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 3,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(8, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn3 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
rs.AddToResourceSummary(crn1)
|
|
rs.AddToResourceSummary(crn2)
|
|
rs.AddToResourceSummary(crn3)
|
|
|
|
for index := range rs {
|
|
num := rs.GetNodeNumFromModel(&rs[index])
|
|
if index == 0 && num != 0 {
|
|
t.Errorf("Got %v expected %v", num, 0)
|
|
}
|
|
if index == 1 && num != 2 {
|
|
t.Errorf("Got %v expected %v", num, 2)
|
|
}
|
|
if index == 0 && rs[index].Quantity != 0 {
|
|
t.Errorf("Got %v expected %v", rs[index].Quantity, 0)
|
|
}
|
|
if index == 1 && rs[index].Quantity != 6 {
|
|
t.Errorf("Got %v expected %v", rs[index].Quantity, 6)
|
|
}
|
|
}
|
|
|
|
crn4 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(19, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
err = rs.DeleteFromResourceSummary(crn4)
|
|
|
|
if err == nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
if actualValue := rs[1]; actualValue.Quantity != 6 {
|
|
t.Errorf("Got %v expected %v", actualValue, 6)
|
|
}
|
|
|
|
if actualValue := rs[0]; rs.GetNodeNumFromModel(&actualValue) != 0 {
|
|
t.Errorf("Got %v expected %v", actualValue, 0)
|
|
}
|
|
}
|
|
|
|
func TestUpdateSummary(t *testing.T) {
|
|
rms := []clusterapis.ResourceModel{
|
|
{
|
|
Grade: 0,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(0, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Grade: 1,
|
|
Ranges: []clusterapis.ResourceModelRange{
|
|
{
|
|
Name: clusterapis.ResourceCPU,
|
|
Min: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(2, resource.DecimalSI),
|
|
},
|
|
{
|
|
Name: clusterapis.ResourceMemory,
|
|
Min: *resource.NewMilliQuantity(1024, resource.DecimalSI),
|
|
Max: *resource.NewQuantity(1024*2, resource.DecimalSI),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
rs, err := InitSummary(rms)
|
|
if actualValue := len(rs); actualValue != 2 {
|
|
t.Errorf("Got %v expected %v", actualValue, 2)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
crn1 := ClusterResourceNode{
|
|
quantity: 3,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(8, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*3, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn2 := ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn3 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
rs.AddToResourceSummary(crn1)
|
|
rs.AddToResourceSummary(crn2)
|
|
rs.AddToResourceSummary(crn3)
|
|
|
|
for index := range rs {
|
|
num := rs.GetNodeNumFromModel(&rs[index])
|
|
if index == 0 && num != 0 {
|
|
t.Errorf("Got %v expected %v", num, 0)
|
|
}
|
|
if index == 1 && num != 2 {
|
|
t.Errorf("Got %v expected %v", num, 2)
|
|
}
|
|
if index == 0 && rs[index].Quantity != 0 {
|
|
t.Errorf("Got %v expected %v", rs[index].Quantity, 0)
|
|
}
|
|
if index == 1 && rs[index].Quantity != 6 {
|
|
t.Errorf("Got %v expected %v", rs[index].Quantity, 6)
|
|
}
|
|
}
|
|
|
|
crn2 = ClusterResourceNode{
|
|
quantity: 1,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(1024*6, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
crn4 := ClusterResourceNode{
|
|
quantity: 2,
|
|
resourceList: ResourceList{
|
|
clusterapis.ResourceCPU: *resource.NewMilliQuantity(1, resource.DecimalSI),
|
|
clusterapis.ResourceMemory: *resource.NewQuantity(19, resource.DecimalSI),
|
|
},
|
|
}
|
|
|
|
err = rs.UpdateInResourceSummary(crn2, crn4)
|
|
|
|
if err != nil {
|
|
t.Errorf("Got %v expected %v", err, nil)
|
|
}
|
|
|
|
if actualValue := rs[1]; actualValue.Quantity != 7 {
|
|
t.Errorf("Got %v expected %v", actualValue, 7)
|
|
}
|
|
|
|
if actualValue := rs[1]; rs.GetNodeNumFromModel(&actualValue) != 3 {
|
|
t.Errorf("Got %v expected %v", rs.GetNodeNumFromModel(&actualValue), 3)
|
|
}
|
|
}
|