This is an automated email from the ASF dual-hosted git repository. pbacsko pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/yunikorn-k8shim.git
The following commit(s) were added to refs/heads/master by this push: new 498b8eac [YUNIKORN-2765] Improve si_helper & resource funtion's test coverage (#881) 498b8eac is described below commit 498b8eac40147740107b20eaf227266bac0f6d74 Author: SP12893678 <36910625+sp12893...@users.noreply.github.com> AuthorDate: Thu Jul 25 19:26:07 2024 +0200 [YUNIKORN-2765] Improve si_helper & resource funtion's test coverage (#881) Closes: #881 Signed-off-by: Peter Bacsko <bacs...@gmail.com> --- pkg/common/resource_test.go | 141 +++++++++++++++++++++++++++++++++++++++++++ pkg/common/si_helper_test.go | 16 +++++ 2 files changed, 157 insertions(+) diff --git a/pkg/common/resource_test.go b/pkg/common/resource_test.go index 5adbf8c8..204086f2 100644 --- a/pkg/common/resource_test.go +++ b/pkg/common/resource_test.go @@ -510,6 +510,31 @@ func TestGetPodResourcesWithInPlacePodVerticalScaling(t *testing.T) { assert.Equal(t, res.Resources[siCommon.CPU].GetValue(), int64(4000)) assert.Equal(t, res.Resources["nvidia.com/gpu"].GetValue(), int64(5)) assert.Equal(t, res.Resources["pods"].GetValue(), int64(1)) + + // case: requested resource types are fewer than allocated types + containers = make([]v1.Container, 0) + c1Resources = make(map[v1.ResourceName]resource.Quantity) + containers = append(containers, v1.Container{ + Name: "container-01", + Resources: v1.ResourceRequirements{ + Requests: c1Resources, + }, + }) + pod.Spec.Containers = containers + + c1Allocated[v1.ResourceMemory] = resource.MustParse("500M") + c1Allocated[v1.ResourceCPU] = resource.MustParse("2") + pod.Status.ContainerStatuses = []v1.ContainerStatus{ + {AllocatedResources: c1Allocated}, + {AllocatedResources: c2Allocated}, + } + pod.Status.Resize = v1.PodResizeStatusProposed + + res = GetPodResource(pod) + assert.Equal(t, res.Resources[siCommon.Memory].GetValue(), int64(500*1000*1000)) + assert.Equal(t, res.Resources[siCommon.CPU].GetValue(), int64(2000)) + assert.Equal(t, res.Resources["nvidia.com/gpu"].GetValue(), int64(1)) + assert.Equal(t, res.Resources["pods"].GetValue(), int64(1)) } func TestBestEffortPod(t *testing.T) { @@ -741,3 +766,119 @@ func TestParseResourceString(t *testing.T) { }) } } + +func TestGetResource(t *testing.T) { + tests := []struct { + name string + resMap map[string]string + expectedRes map[string]int64 + }{ + { + name: "empty resMap", + resMap: map[string]string{}, + expectedRes: map[string]int64{}, + }, + { + name: "single resource", + resMap: map[string]string{ + v1.ResourceCPU.String(): "100m", + }, + expectedRes: map[string]int64{ + siCommon.CPU: 100, + }, + }, + { + name: "multiple resources", + resMap: map[string]string{ + v1.ResourceCPU.String(): "1", + v1.ResourceMemory.String(): "1G", + }, + expectedRes: map[string]int64{ + siCommon.CPU: 1000, + siCommon.Memory: 1000 * 1000 * 1000, + }, + }, + { + name: "invalid cpu resources", + resMap: map[string]string{ + v1.ResourceCPU.String(): "xyz", + }, + expectedRes: nil, + }, + { + name: "invalid memory resources", + resMap: map[string]string{ + v1.ResourceMemory.String(): "64MiB", + }, + expectedRes: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actualRes := GetResource(tt.resMap) + if tt.expectedRes == nil { + assert.Assert(t, actualRes == nil) + } else { + assert.Equal(t, len(actualRes.Resources), len(tt.expectedRes)) + if len(tt.expectedRes) > 0 { + for name, value := range tt.expectedRes { + assert.Equal(t, actualRes.Resources[name].GetValue(), value) + } + } + } + }) + } +} + +func TestGetTGResource(t *testing.T) { + tests := []struct { + name string + resMap map[string]resource.Quantity + members int64 + expectedRes map[string]int64 + }{ + { + name: "empty resMap", + resMap: map[string]resource.Quantity{}, + members: 2, + expectedRes: map[string]int64{ + "pods": 2, + }, + }, + { + name: "single resource", + resMap: map[string]resource.Quantity{ + v1.ResourceCPU.String(): resource.MustParse("100m"), + }, + members: 2, + expectedRes: map[string]int64{ + "pods": 2, + siCommon.CPU: 2 * 100, + }, + }, + { + name: "multiple resources", + resMap: map[string]resource.Quantity{ + v1.ResourceCPU.String(): resource.MustParse("1"), + v1.ResourceMemory.String(): resource.MustParse("1G"), + }, + members: 2, + expectedRes: map[string]int64{ + "pods": 2, + siCommon.CPU: 2 * 1000, + siCommon.Memory: 2 * 1000 * 1000 * 1000, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actualRes := GetTGResource(tt.resMap, tt.members) + assert.Equal(t, len(actualRes.Resources), len(tt.expectedRes)) + for name, value := range tt.expectedRes { + assert.Equal(t, actualRes.Resources[name].GetValue(), value) + } + }) + } +} diff --git a/pkg/common/si_helper_test.go b/pkg/common/si_helper_test.go index 67be6147..63c603f7 100644 --- a/pkg/common/si_helper_test.go +++ b/pkg/common/si_helper_test.go @@ -45,6 +45,7 @@ func TestCreateReleaseRequestForTask(t *testing.T) { assert.Equal(t, request.Releases.AllocationAsksToRelease[0].ApplicationID, "app01") assert.Equal(t, request.Releases.AllocationAsksToRelease[0].AllocationKey, "task01") assert.Equal(t, request.Releases.AllocationAsksToRelease[0].PartitionName, "default") + assert.Equal(t, request.Releases.AllocationAsksToRelease[0].TerminationType, si.TerminationType_UNKNOWN_TERMINATION_TYPE) // without allocationKey request = CreateReleaseRequestForTask("app01", "task01", "", "default", "STOPPED_BY_RM") @@ -56,6 +57,21 @@ func TestCreateReleaseRequestForTask(t *testing.T) { assert.Equal(t, request.Releases.AllocationAsksToRelease[0].ApplicationID, "app01") assert.Equal(t, request.Releases.AllocationAsksToRelease[0].AllocationKey, "task01") assert.Equal(t, request.Releases.AllocationAsksToRelease[0].PartitionName, "default") + assert.Equal(t, request.Releases.AllocationAsksToRelease[0].TerminationType, si.TerminationType_UNKNOWN_TERMINATION_TYPE) + + request = CreateReleaseRequestForTask("app01", "task01", "task01", "default", "UNKNOWN") + assert.Assert(t, request.Releases != nil) + assert.Assert(t, request.Releases.AllocationsToRelease != nil) + assert.Assert(t, request.Releases.AllocationAsksToRelease != nil) + assert.Equal(t, len(request.Releases.AllocationsToRelease), 1) + assert.Equal(t, len(request.Releases.AllocationAsksToRelease), 1) + assert.Equal(t, request.Releases.AllocationsToRelease[0].ApplicationID, "app01") + assert.Equal(t, request.Releases.AllocationsToRelease[0].AllocationKey, "task01") + assert.Equal(t, request.Releases.AllocationsToRelease[0].PartitionName, "default") + assert.Equal(t, request.Releases.AllocationAsksToRelease[0].ApplicationID, "app01") + assert.Equal(t, request.Releases.AllocationAsksToRelease[0].AllocationKey, "task01") + assert.Equal(t, request.Releases.AllocationAsksToRelease[0].PartitionName, "default") + assert.Equal(t, request.Releases.AllocationAsksToRelease[0].TerminationType, si.TerminationType_UNKNOWN_TERMINATION_TYPE) } func TestCreateUpdateRequestForRemoveApplication(t *testing.T) { --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@yunikorn.apache.org For additional commands, e-mail: issues-h...@yunikorn.apache.org