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]

Reply via email to