karmada/pkg/modeling/modeling_test.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)
}
}