mirror of https://github.com/docker/docs.git
cleanup tests
This commit is contained in:
parent
ec06513f48
commit
d0de5ee964
|
@ -8,79 +8,84 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func createNode(ID string, memory int64, cpus int) *cluster.Node {
|
||||||
|
node := cluster.NewNode(ID, "")
|
||||||
|
node.Memory = memory * 1024 * 1024 * 1024
|
||||||
|
node.Cpus = cpus
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
func createConfig(memory int, cpus int) *dockerclient.ContainerConfig {
|
||||||
|
return &dockerclient.ContainerConfig{Memory: memory * 1024 * 1024 * 1024, CpuShares: cpus}
|
||||||
|
}
|
||||||
|
|
||||||
|
func createContainer(ID string, config *dockerclient.ContainerConfig) *cluster.Container {
|
||||||
|
return &cluster.Container{Container: dockerclient.Container{Id: ID}, Info: dockerclient.ContainerInfo{Config: config}}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPlaceContainer(t *testing.T) {
|
func TestPlaceContainer(t *testing.T) {
|
||||||
var (
|
s := &BinPackingPlacementStrategy{}
|
||||||
s = &BinPackingPlacementStrategy{}
|
|
||||||
|
|
||||||
nodes = []*cluster.Node{
|
nodes := []*cluster.Node{
|
||||||
cluster.NewNode("node-1", ""),
|
createNode("node-1", 2, 4),
|
||||||
cluster.NewNode("node-2", ""),
|
createNode("node-2", 2, 4),
|
||||||
cluster.NewNode("node-3", ""),
|
createNode("node-3", 2, 4),
|
||||||
}
|
}
|
||||||
|
|
||||||
config1 = &dockerclient.ContainerConfig{Memory: 1024 * 1024 * 1024, CpuShares: 1}
|
// try to place a 10G container
|
||||||
config2 = &dockerclient.ContainerConfig{Memory: 2 * 1024 * 1024 * 1024, CpuShares: 1}
|
config := createConfig(10, 1)
|
||||||
|
_, err := s.PlaceContainer(config, nodes)
|
||||||
|
|
||||||
container1 = &cluster.Container{Container: dockerclient.Container{Id: "c1"},
|
// check that it refuses because the cluster is full
|
||||||
Info: dockerclient.ContainerInfo{Config: config1}}
|
assert.Error(t, err)
|
||||||
container2 = &cluster.Container{Container: dockerclient.Container{Id: "c2"},
|
|
||||||
Info: dockerclient.ContainerInfo{Config: config1}}
|
|
||||||
container3 = &cluster.Container{Container: dockerclient.Container{Id: "c3"},
|
|
||||||
Info: dockerclient.ContainerInfo{Config: config2}}
|
|
||||||
container4 = &cluster.Container{Container: dockerclient.Container{Id: "c4"},
|
|
||||||
Info: dockerclient.ContainerInfo{Config: config1}}
|
|
||||||
container5 = &cluster.Container{Container: dockerclient.Container{Id: "c5"},
|
|
||||||
Info: dockerclient.ContainerInfo{Config: config1}}
|
|
||||||
container6 = &cluster.Container{Container: dockerclient.Container{Id: "c6"},
|
|
||||||
Info: dockerclient.ContainerInfo{Config: config1}}
|
|
||||||
)
|
|
||||||
|
|
||||||
for _, node := range nodes {
|
|
||||||
node.Memory = 2 * 1024 * 1024 * 1024
|
|
||||||
node.Cpus = 4
|
|
||||||
}
|
|
||||||
|
|
||||||
// add one container 1G
|
// add one container 1G
|
||||||
node1, err := s.PlaceContainer(config1, nodes)
|
config = createConfig(1, 1)
|
||||||
|
node1, err := s.PlaceContainer(config, nodes)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
node1.AddContainer(container1)
|
node1.AddContainer(createContainer("c1", config))
|
||||||
|
|
||||||
// add another container 1G
|
// add another container 1G
|
||||||
node2, err := s.PlaceContainer(config1, nodes)
|
config = createConfig(1, 1)
|
||||||
|
node2, err := s.PlaceContainer(config, nodes)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
node2.AddContainer(container2)
|
node2.AddContainer(createContainer("c2", config))
|
||||||
|
|
||||||
// check that both containers ended on the same node
|
// check that both containers ended on the same node
|
||||||
assert.Equal(t, node1.ID, node2.ID, "")
|
assert.Equal(t, node1.ID, node2.ID, "")
|
||||||
assert.Equal(t, len(node1.Containers()), len(node2.Containers()), "")
|
assert.Equal(t, len(node1.Containers()), len(node2.Containers()), "")
|
||||||
|
|
||||||
// add another container 2G
|
// add another container 2G
|
||||||
node3, err := s.PlaceContainer(config2, nodes)
|
config = createConfig(2, 1)
|
||||||
|
node3, err := s.PlaceContainer(createConfig(2, 1), nodes)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
node3.AddContainer(container3)
|
node3.AddContainer(createContainer("c3", config))
|
||||||
|
|
||||||
// check that it ends up on another node
|
// check that it ends up on another node
|
||||||
assert.NotEqual(t, node1.ID, node3.ID, "")
|
assert.NotEqual(t, node1.ID, node3.ID, "")
|
||||||
|
|
||||||
// add another container 1G
|
// add another container 1G
|
||||||
node4, err := s.PlaceContainer(config1, nodes)
|
config = createConfig(1, 1)
|
||||||
|
node4, err := s.PlaceContainer(config, nodes)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
node4.AddContainer(container4)
|
node4.AddContainer(createContainer("c4", config))
|
||||||
|
|
||||||
// check that it ends up on another node
|
// check that it ends up on another node
|
||||||
assert.NotEqual(t, node1.ID, node4.ID, "")
|
assert.NotEqual(t, node1.ID, node4.ID, "")
|
||||||
assert.NotEqual(t, node3.ID, node4.ID, "")
|
assert.NotEqual(t, node3.ID, node4.ID, "")
|
||||||
|
|
||||||
// add another container 1G
|
// add another container 1G
|
||||||
node5, err := s.PlaceContainer(config1, nodes)
|
config = createConfig(1, 1)
|
||||||
|
node5, err := s.PlaceContainer(config, nodes)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
node5.AddContainer(container5)
|
node5.AddContainer(createContainer("c5", config))
|
||||||
|
|
||||||
// check that it ends up on the same node
|
// check that it ends up on the same node
|
||||||
assert.Equal(t, node4.ID, node5.ID, "")
|
assert.Equal(t, node4.ID, node5.ID, "")
|
||||||
|
|
||||||
// try to add another container
|
// try to add another container
|
||||||
_, err = s.PlaceContainer(config1, nodes)
|
config = createConfig(1, 1)
|
||||||
|
_, err = s.PlaceContainer(config, nodes)
|
||||||
|
|
||||||
// check that it refuses because the cluster is full
|
// check that it refuses because the cluster is full
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
|
@ -89,9 +94,10 @@ func TestPlaceContainer(t *testing.T) {
|
||||||
node3.CleanupContainers()
|
node3.CleanupContainers()
|
||||||
|
|
||||||
// add another container
|
// add another container
|
||||||
node6, err := s.PlaceContainer(config1, nodes)
|
config = createConfig(1, 1)
|
||||||
|
node6, err := s.PlaceContainer(config, nodes)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
node6.AddContainer(container6)
|
node6.AddContainer(createContainer("c6", config))
|
||||||
|
|
||||||
// check it ends up on `node3`
|
// check it ends up on `node3`
|
||||||
assert.Equal(t, node3.ID, node6.ID, "")
|
assert.Equal(t, node3.ID, node6.ID, "")
|
||||||
|
|
Loading…
Reference in New Issue