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-core.git
The following commit(s) were added to refs/heads/master by this push:
new 56420642 [YUNIKORN-2528] Increase coverage for UGM code (#926)
56420642 is described below
commit 56420642ac020dcb3a42e82f05defc69ba9a5948
Author: Peter Bacsko <[email protected]>
AuthorDate: Mon Aug 12 20:45:06 2024 +0200
[YUNIKORN-2528] Increase coverage for UGM code (#926)
Closes: #926
Signed-off-by: Peter Bacsko <[email protected]>
---
pkg/scheduler/ugm/group_tracker_test.go | 29 +++++++++++++
pkg/scheduler/ugm/queue_tracker_test.go | 73 +++++++++++++++++++++++++++++++++
2 files changed, 102 insertions(+)
diff --git a/pkg/scheduler/ugm/group_tracker_test.go
b/pkg/scheduler/ugm/group_tracker_test.go
index e3af91ac..245e7613 100644
--- a/pkg/scheduler/ugm/group_tracker_test.go
+++ b/pkg/scheduler/ugm/group_tracker_test.go
@@ -78,6 +78,9 @@ func TestGTIncreaseTrackedResource(t *testing.T) {
assert.Equal(t, "map[mem:20000000 vcore:20000]",
actualResources["root.parent.child2"].String(), "wrong resource")
assert.Equal(t, "map[mem:20000000 vcore:20000]",
actualResources["root.parent.child12"].String(), "wrong resource")
assert.Equal(t, 4, len(groupTracker.getTrackedApplications()))
+
+ groupTracker = nil
+ groupTracker.increaseTrackedResource(path1, TestApp1, usage1,
user.User) // no panic
}
func TestGTDecreaseTrackedResource(t *testing.T) {
@@ -147,6 +150,32 @@ func TestGTDecreaseTrackedResource(t *testing.T) {
removeQT = groupTracker.decreaseTrackedResource(path2, TestApp2,
usage5, true)
assert.Equal(t, 0, len(groupTracker.getTrackedApplications()))
assert.Equal(t, removeQT, true, "wrong remove queue tracker value")
+
+ groupTracker = nil
+ removeQT = groupTracker.decreaseTrackedResource(path1, TestApp1,
usage1, true) // no panic
+ assert.Assert(t, !removeQT)
+}
+
+func TestDecreaseAllTrackedResourceUsage(t *testing.T) {
+ GetUserManager()
+ testUser := &security.UserGroup{User: "test", Groups: []string{"test"}}
+ eventSystem := mock.NewEventSystem()
+ groupTracker := newGroupTracker(testUser.User,
newUGMEvents(eventSystem))
+
+ usage1, err := resources.NewResourceFromConf(map[string]string{"mem":
"10M", "vcore": "10"})
+ assert.NilError(t, err)
+ groupTracker.increaseTrackedResource(path1, TestApp1, usage1,
testUser.User)
+ groupTracker.increaseTrackedResource(path1, TestApp2, usage1,
testUser.User)
+ groupTracker.queueTracker.increaseTrackedResource(strings.Split(path1,
configs.DOT), TestApp3, user, usage1)
+
+ apps :=
groupTracker.decreaseAllTrackedResourceUsage(strings.Split(path1, configs.DOT))
+ assert.Equal(t, 2, len(apps))
+ assert.Equal(t, testUser.User, apps[TestApp1])
+ assert.Equal(t, testUser.User, apps[TestApp2])
+
+ groupTracker = nil
+ apps =
groupTracker.decreaseAllTrackedResourceUsage(strings.Split(path1, configs.DOT))
// no panic
+ assert.Assert(t, apps == nil)
}
func TestGTSetAndClearMaxLimits(t *testing.T) {
diff --git a/pkg/scheduler/ugm/queue_tracker_test.go
b/pkg/scheduler/ugm/queue_tracker_test.go
index ff05bf49..52f7c216 100644
--- a/pkg/scheduler/ugm/queue_tracker_test.go
+++ b/pkg/scheduler/ugm/queue_tracker_test.go
@@ -26,6 +26,7 @@ import (
"github.com/apache/yunikorn-core/pkg/common/configs"
"github.com/apache/yunikorn-core/pkg/common/resources"
+ "github.com/apache/yunikorn-core/pkg/webservice/dao"
)
func TestQTIncreaseTrackedResource(t *testing.T) {
@@ -144,6 +145,10 @@ func TestQTDecreaseTrackedResource(t *testing.T) {
t.Errorf("new resource create returned error or wrong resource:
error %t, res %v", err, usage2)
}
queueTracker.increaseTrackedResource([]string{"root", "parent"},
TestApp2, user, usage2)
+
+ // no child queue
+ removeQT = queueTracker.decreaseTrackedResource([]string{"root",
"nonexisting"}, TestApp2, usage3, false)
+ assert.Assert(t, !removeQT)
}
func TestQTQuotaEnforcement(t *testing.T) {
@@ -318,6 +323,74 @@ func TestNewQueueTracker(t *testing.T) {
assert.Assert(t, resources.IsZero(parent.resourceUsage))
}
+func TestCanBeRemoved(t *testing.T) {
+ GetUserManager()
+ root := newRootQueueTracker(user)
+ usage1, err := resources.NewResourceFromConf(map[string]string{"mem":
"10M", "vcore": "10"})
+ assert.NilError(t, err)
+
+ // create tracker hierarchy
+ root.increaseTrackedResource(strings.Split(queuePath1, configs.DOT),
TestApp1, user, usage1)
+ parentQ := root.childQueueTrackers["parent"]
+ childQ := parentQ.childQueueTrackers["child1"]
+ assert.Assert(t, !root.canBeRemoved())
+ assert.Assert(t, !parentQ.canBeRemoved())
+ assert.Assert(t, !childQ.canBeRemoved())
+
+ removeQT := root.decreaseTrackedResource(strings.Split(queuePath1,
configs.DOT), TestApp1, usage1, true)
+ assert.Assert(t, removeQT)
+ assert.Assert(t, root.canBeRemoved())
+}
+
+func TestGetResourceUsageDAOInfo(t *testing.T) {
+ GetUserManager()
+ root := newRootQueueTracker(user)
+ usage1, err := resources.NewResourceFromConf(map[string]string{"mem":
"10M", "vcore": "10"})
+ assert.NilError(t, err)
+
+ // create tracker hierarchy
+ root.increaseTrackedResource(strings.Split(queuePath1, configs.DOT),
TestApp1, user, usage1)
+
+ // update settings on "parent" and "child1" directly
+ parentQ := root.childQueueTrackers["parent"]
+ childQ := parentQ.childQueueTrackers["child1"]
+ childQ.maxRunningApps = 2
+ maxRes := resources.NewResourceFromMap(map[string]resources.Quantity{
+ "first": 123,
+ })
+ childQ.maxResources = maxRes.Clone()
+ parentQ.maxRunningApps = 3
+
+ rootDao := root.getResourceUsageDAOInfo("")
+ assert.Assert(t, resources.Equals(usage1, rootDao.ResourceUsage))
+ assert.Equal(t, "root", rootDao.QueuePath)
+ assert.Equal(t, 1, len(rootDao.RunningApplications))
+ assert.Equal(t, TestApp1, rootDao.RunningApplications[0])
+ assert.Equal(t, 1, len(rootDao.Children))
+ assert.Equal(t, uint64(0), rootDao.MaxApplications)
+ assert.Assert(t, rootDao.MaxResources == nil)
+ parentDao := rootDao.Children[0]
+ assert.Assert(t, resources.Equals(usage1, parentDao.ResourceUsage))
+ assert.Equal(t, "root.parent", parentDao.QueuePath)
+ assert.Equal(t, 1, len(parentDao.RunningApplications))
+ assert.Equal(t, TestApp1, parentDao.RunningApplications[0])
+ assert.Equal(t, uint64(3), parentDao.MaxApplications)
+ assert.Assert(t, parentDao.MaxResources == nil)
+ assert.Equal(t, 1, len(parentDao.Children))
+ childDao := parentDao.Children[0]
+ assert.Assert(t, resources.Equals(usage1, childDao.ResourceUsage))
+ assert.Equal(t, "root.parent.child1", childDao.QueuePath)
+ assert.Equal(t, 1, len(childDao.RunningApplications))
+ assert.Equal(t, TestApp1, childDao.RunningApplications[0])
+ assert.Equal(t, uint64(2), childDao.MaxApplications)
+ assert.Assert(t, resources.Equals(maxRes, childDao.MaxResources))
+ assert.Equal(t, 0, len(childDao.Children))
+
+ root = nil
+ rootDao = root.getResourceUsageDAOInfo("")
+ assert.DeepEqual(t, rootDao, &dao.ResourceUsageDAOInfo{})
+}
+
func TestSetLimit(t *testing.T) {
manager := GetUserManager()
defer manager.ClearConfigLimits()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]