github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/manager/scheduler/nodeinfo_test.go (about) 1 package scheduler 2 3 import ( 4 "testing" 5 6 "github.com/docker/swarmkit/api" 7 "github.com/docker/swarmkit/api/genericresource" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestRemoveTask(t *testing.T) { 12 nodeResourceSpec := &api.Resources{ 13 NanoCPUs: 100000, 14 MemoryBytes: 1000000, 15 Generic: append( 16 genericresource.NewSet("orange", "blue", "red", "green"), 17 genericresource.NewDiscrete("apple", 6), 18 ), 19 } 20 21 node := &api.Node{ 22 Description: &api.NodeDescription{Resources: nodeResourceSpec}, 23 } 24 25 tasks := map[string]*api.Task{ 26 "task1": { 27 ID: "task1", 28 }, 29 "task2": { 30 ID: "task2", 31 }, 32 } 33 34 available := api.Resources{ 35 NanoCPUs: 100000, 36 MemoryBytes: 1000000, 37 Generic: append( 38 genericresource.NewSet("orange", "blue", "red"), 39 genericresource.NewDiscrete("apple", 5), 40 ), 41 } 42 43 taskRes := &api.Resources{ 44 NanoCPUs: 5000, 45 MemoryBytes: 5000, 46 Generic: []*api.GenericResource{ 47 genericresource.NewDiscrete("apple", 1), 48 genericresource.NewDiscrete("orange", 1), 49 }, 50 } 51 52 task1 := &api.Task{ 53 ID: "task1", 54 Spec: api.TaskSpec{ 55 Resources: &api.ResourceRequirements{Reservations: taskRes}, 56 }, 57 AssignedGenericResources: append( 58 genericresource.NewSet("orange", "green"), 59 genericresource.NewDiscrete("apple", 1), 60 ), 61 } 62 63 task3 := &api.Task{ 64 ID: "task3", 65 } 66 67 // nodeInfo has no tasks 68 nodeInfo := newNodeInfo(node, nil, available) 69 assert.False(t, nodeInfo.removeTask(task1)) 70 71 // nodeInfo's tasks has taskID 72 nodeInfo = newNodeInfo(node, tasks, available) 73 assert.True(t, nodeInfo.removeTask(task1)) 74 75 // nodeInfo's tasks has no taskID 76 assert.False(t, nodeInfo.removeTask(task3)) 77 78 nodeAvailableResources := nodeInfo.AvailableResources 79 80 cpuLeft := available.NanoCPUs + taskRes.NanoCPUs 81 memoryLeft := available.MemoryBytes + taskRes.MemoryBytes 82 83 assert.Equal(t, cpuLeft, nodeAvailableResources.NanoCPUs) 84 assert.Equal(t, memoryLeft, nodeAvailableResources.MemoryBytes) 85 86 assert.Equal(t, 4, len(nodeAvailableResources.Generic)) 87 88 apples := genericresource.GetResource("apple", nodeAvailableResources.Generic) 89 oranges := genericresource.GetResource("orange", nodeAvailableResources.Generic) 90 assert.Len(t, apples, 1) 91 assert.Len(t, oranges, 3) 92 93 for _, k := range []string{"red", "blue", "green"} { 94 assert.True(t, genericresource.HasResource( 95 genericresource.NewString("orange", k), oranges), 96 ) 97 } 98 99 assert.Equal(t, int64(6), apples[0].GetDiscreteResourceSpec().Value) 100 } 101 102 func TestAddTask(t *testing.T) { 103 node := &api.Node{} 104 105 tasks := map[string]*api.Task{ 106 "task1": { 107 ID: "task1", 108 }, 109 "task2": { 110 ID: "task2", 111 }, 112 } 113 114 task1 := &api.Task{ 115 ID: "task1", 116 } 117 118 available := api.Resources{ 119 NanoCPUs: 100000, 120 MemoryBytes: 1000000, 121 Generic: append( 122 genericresource.NewSet("orange", "blue", "red"), 123 genericresource.NewDiscrete("apple", 5), 124 ), 125 } 126 127 taskRes := &api.Resources{ 128 NanoCPUs: 5000, 129 MemoryBytes: 5000, 130 Generic: []*api.GenericResource{ 131 genericresource.NewDiscrete("apple", 2), 132 genericresource.NewDiscrete("orange", 1), 133 }, 134 } 135 136 task3 := &api.Task{ 137 ID: "task3", 138 Spec: api.TaskSpec{ 139 Resources: &api.ResourceRequirements{Reservations: taskRes}, 140 }, 141 } 142 143 nodeInfo := newNodeInfo(node, tasks, available) 144 145 // add task with ID existing 146 assert.False(t, nodeInfo.addTask(task1)) 147 148 // add task with ID non-existing 149 assert.True(t, nodeInfo.addTask(task3)) 150 151 // add again 152 assert.False(t, nodeInfo.addTask(task3)) 153 154 // Check resource consumption of node 155 nodeAvailableResources := nodeInfo.AvailableResources 156 157 cpuLeft := available.NanoCPUs - taskRes.NanoCPUs 158 memoryLeft := available.MemoryBytes - taskRes.MemoryBytes 159 160 assert.Equal(t, cpuLeft, nodeAvailableResources.NanoCPUs) 161 assert.Equal(t, memoryLeft, nodeAvailableResources.MemoryBytes) 162 163 apples := genericresource.GetResource("apple", nodeAvailableResources.Generic) 164 oranges := genericresource.GetResource("orange", nodeAvailableResources.Generic) 165 assert.Len(t, apples, 1) 166 assert.Len(t, oranges, 1) 167 168 o := oranges[0].GetNamedResourceSpec() 169 assert.True(t, o.Value == "blue" || o.Value == "red") 170 assert.Equal(t, int64(3), apples[0].GetDiscreteResourceSpec().Value) 171 172 }