forked from docker-archive/classicswarm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscheduler_test.go
118 lines (105 loc) · 2.97 KB
/
scheduler_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package scheduler
import (
"testing"
containertypes "github.com/docker/docker/api/types/container"
networktypes "github.com/docker/docker/api/types/network"
"github.com/docker/swarm/cluster"
"github.com/docker/swarm/scheduler/filter"
"github.com/docker/swarm/scheduler/node"
"github.com/docker/swarm/scheduler/strategy"
"github.com/stretchr/testify/assert"
)
func TestSelectNodesForContainer(t *testing.T) {
var (
s = Scheduler{
strategy: &strategy.SpreadPlacementStrategy{},
filters: []filter.Filter{&filter.ConstraintFilter{}},
}
nodes = []*node.Node{
{
ID: "node-0-id",
Name: "node-0-name",
Addr: "node-0",
TotalMemory: 1 * 1024 * 1024 * 1024,
TotalCpus: 1,
Labels: map[string]string{
"group": "1",
},
},
{
ID: "node-1-id",
Name: "node-1-name",
Addr: "node-1",
TotalMemory: 1 * 1024 * 1024 * 1024,
TotalCpus: 2,
Labels: map[string]string{
"group": "2",
},
},
}
config = cluster.BuildContainerConfig(containertypes.Config{
Env: []string{"constraint:group==~1"},
}, containertypes.HostConfig{
Resources: containertypes.Resources{
Memory: 1024 * 1024 * 1024,
CPUShares: 2,
},
}, networktypes.NetworkingConfig{})
)
candidates, err := s.SelectNodesForContainer(nodes, config)
assert.NoError(t, err)
assert.Equal(t, 1, len(candidates))
assert.Equal(t, "node-1-id", candidates[0].ID)
}
func TestSelectNodesForContainerHybrid(t *testing.T) {
var (
s = Scheduler{
strategy: &strategy.SpreadPlacementStrategy{},
filters: []filter.Filter{&filter.ConstraintFilter{}},
}
nodes = []*node.Node{
{
ID: "node-0-id",
Name: "node-0-name",
Addr: "node-0",
TotalMemory: 1 * 1024 * 1024 * 1024,
TotalCpus: 2,
Labels: map[string]string{
"ostype": "linux",
},
},
{
ID: "node-1-id",
Name: "node-1-name",
Addr: "node-1",
TotalMemory: 1 * 1024 * 1024 * 1024,
TotalCpus: 2,
Labels: map[string]string{
"ostype": "windows",
},
},
}
configWin = cluster.BuildContainerConfig(containertypes.Config{}, containertypes.HostConfig{
Resources: containertypes.Resources{
Memory: 1024 * 1024 * 1024,
CPUShares: 2,
},
}, networktypes.NetworkingConfig{})
configLin = cluster.BuildContainerConfig(containertypes.Config{}, containertypes.HostConfig{
Resources: containertypes.Resources{
Memory: 1024 * 1024 * 1024,
CPUShares: 2,
},
}, networktypes.NetworkingConfig{})
)
configWin.AddConstraint("ostype==windows")
configLin.AddConstraint("ostype==linux")
candidates, err := s.SelectNodesForContainer(nodes, configWin)
assert.NoError(t, err)
assert.Equal(t, 1, len(candidates))
assert.Equal(t, "node-1-id", candidates[0].ID)
candidates, err = s.SelectNodesForContainer(nodes, configLin)
assert.NoError(t, err)
assert.Equal(t, 1, len(candidates))
assert.Equal(t, "node-0-id", candidates[0].ID)
}