2018-04-24 06:28:08 -04:00
|
|
|
package kubernetes
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/docker/docker/api/types/filters"
|
|
|
|
"github.com/gotestyourself/gotestyourself/assert"
|
|
|
|
"github.com/gotestyourself/gotestyourself/assert/cmp"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestServiceFiltersLabelSelectorGen(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
|
|
name string
|
|
|
|
stackName string
|
|
|
|
filters filters.Args
|
|
|
|
expectedSelectorParts []string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
name: "no-filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "single-name filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(filters.KeyValuePair{Key: "name", Value: "svc-test"}),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
"com.docker.service.name=svc-test",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "multi-name filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(
|
|
|
|
filters.KeyValuePair{Key: "name", Value: "svc-test"},
|
|
|
|
filters.KeyValuePair{Key: "name", Value: "svc-test2"},
|
|
|
|
),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
"com.docker.service.name in (svc-test,svc-test2)",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "label present filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(
|
|
|
|
filters.KeyValuePair{Key: "label", Value: "label-is-present"},
|
|
|
|
),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
"label-is-present",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "single value label filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(
|
|
|
|
filters.KeyValuePair{Key: "label", Value: "label1=test"},
|
|
|
|
),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
"label1=test",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "multi value label filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(
|
|
|
|
filters.KeyValuePair{Key: "label", Value: "label1=test"},
|
|
|
|
filters.KeyValuePair{Key: "label", Value: "label1=test2"},
|
|
|
|
),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
2018-05-24 08:14:37 -04:00
|
|
|
"label1=test",
|
|
|
|
"label1=test2",
|
2018-04-24 06:28:08 -04:00
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "2 different labels filter",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(
|
|
|
|
filters.KeyValuePair{Key: "label", Value: "label1=test"},
|
|
|
|
filters.KeyValuePair{Key: "label", Value: "label2=test2"},
|
|
|
|
),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
"label1=test",
|
|
|
|
"label2=test2",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "name filter with stackName prefix",
|
|
|
|
stackName: "test",
|
|
|
|
filters: filters.NewArgs(
|
|
|
|
filters.KeyValuePair{Key: "name", Value: "test_svc1"},
|
|
|
|
),
|
|
|
|
expectedSelectorParts: []string{
|
|
|
|
"com.docker.stack.namespace=test",
|
|
|
|
"com.docker.service.name in (test_svc1,svc1)",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, c := range cases {
|
|
|
|
t.Run(c.name, func(t *testing.T) {
|
|
|
|
result := generateLabelSelector(c.filters, c.stackName)
|
|
|
|
for _, toFind := range c.expectedSelectorParts {
|
|
|
|
assert.Assert(t, cmp.Contains(result, toFind))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|