mirror of https://github.com/docker/docs.git
Merge branch 'master' of github.com:docker/libcluster
This commit is contained in:
commit
725c03d799
|
@ -0,0 +1,64 @@
|
||||||
|
package filter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/swarm/cluster"
|
||||||
|
"github.com/samalba/dockerclient"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAttributeFilter(t *testing.T) {
|
||||||
|
var (
|
||||||
|
f = AttributeFilter{}
|
||||||
|
nodes = []*cluster.Node{
|
||||||
|
cluster.NewNode("node-1", ""),
|
||||||
|
cluster.NewNode("node-2", ""),
|
||||||
|
cluster.NewNode("node-3", ""),
|
||||||
|
}
|
||||||
|
result []*cluster.Node
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
nodes[0].Labels = map[string]string{
|
||||||
|
"name": "node0",
|
||||||
|
"group": "1",
|
||||||
|
}
|
||||||
|
|
||||||
|
nodes[1].Labels = map[string]string{
|
||||||
|
"name": "node1",
|
||||||
|
"group": "1",
|
||||||
|
}
|
||||||
|
|
||||||
|
nodes[2].Labels = map[string]string{
|
||||||
|
"name": "node2",
|
||||||
|
"group": "2",
|
||||||
|
}
|
||||||
|
|
||||||
|
// Without constraints we should get the unfiltered list of nodes back.
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, result, nodes)
|
||||||
|
|
||||||
|
// Set a constraint that cannot be fullfilled and expect an error back.
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{
|
||||||
|
Env: []string{"constraint:does_not_exist=true"},
|
||||||
|
}, nodes)
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
// Set a contraint that can only be filled by a single node.
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{
|
||||||
|
Env: []string{"constraint:name=node1"},
|
||||||
|
}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, result, 1)
|
||||||
|
assert.Equal(t, result[0], nodes[1])
|
||||||
|
|
||||||
|
// This constraint can only be fullfilled by a subset of nodes.
|
||||||
|
result, err = f.Filter(&dockerclient.ContainerConfig{
|
||||||
|
Env: []string{"constraint:group=1"},
|
||||||
|
}, nodes)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, result, 2)
|
||||||
|
assert.NotContains(t, result, nodes[2])
|
||||||
|
}
|
Loading…
Reference in New Issue