From b2e803c2694c1fdafe7e03e1084dd0fde0704a62 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Wed, 19 Nov 2014 18:29:51 -0800 Subject: [PATCH 1/2] Renamed attributes to attribute to be consistent with port filter. Signed-off-by: Andrea Luzzardi --- scheduler/filter/{attributes.go => attribute.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scheduler/filter/{attributes.go => attribute.go} (100%) diff --git a/scheduler/filter/attributes.go b/scheduler/filter/attribute.go similarity index 100% rename from scheduler/filter/attributes.go rename to scheduler/filter/attribute.go From a2f29be40fadc8d7303675d9038bc66e7a0ebe00 Mon Sep 17 00:00:00 2001 From: Andrea Luzzardi Date: Wed, 19 Nov 2014 18:51:26 -0800 Subject: [PATCH 2/2] Added unit tests for the attribute filter. Signed-off-by: Andrea Luzzardi --- scheduler/filter/attribute_test.go | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 scheduler/filter/attribute_test.go diff --git a/scheduler/filter/attribute_test.go b/scheduler/filter/attribute_test.go new file mode 100644 index 0000000000..ce99cc958b --- /dev/null +++ b/scheduler/filter/attribute_test.go @@ -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]) +}