44 "testing"
55
66 "github.com/docker/docker/api/types/filters"
7+ "github.com/docker/docker/api/types/swarm"
78 "github.com/gotestyourself/gotestyourself/assert"
89 "github.com/gotestyourself/gotestyourself/assert/cmp"
910)
@@ -23,27 +24,6 @@ func TestServiceFiltersLabelSelectorGen(t *testing.T) {
2324 "com.docker.stack.namespace=test" ,
2425 },
2526 },
26- {
27- name : "single-name filter" ,
28- stackName : "test" ,
29- filters : filters .NewArgs (filters.KeyValuePair {Key : "name" , Value : "svc-test" }),
30- expectedSelectorParts : []string {
31- "com.docker.stack.namespace=test" ,
32- "com.docker.service.name=svc-test" ,
33- },
34- },
35- {
36- name : "multi-name filter" ,
37- stackName : "test" ,
38- filters : filters .NewArgs (
39- filters.KeyValuePair {Key : "name" , Value : "svc-test" },
40- filters.KeyValuePair {Key : "name" , Value : "svc-test2" },
41- ),
42- expectedSelectorParts : []string {
43- "com.docker.stack.namespace=test" ,
44- "com.docker.service.name in (svc-test,svc-test2)" ,
45- },
46- },
4727 {
4828 name : "label present filter" ,
4929 stackName : "test" ,
@@ -92,17 +72,6 @@ func TestServiceFiltersLabelSelectorGen(t *testing.T) {
9272 "label2=test2" ,
9373 },
9474 },
95- {
96- name : "name filter with stackName prefix" ,
97- stackName : "test" ,
98- filters : filters .NewArgs (
99- filters.KeyValuePair {Key : "name" , Value : "test_svc1" },
100- ),
101- expectedSelectorParts : []string {
102- "com.docker.stack.namespace=test" ,
103- "com.docker.service.name in (test_svc1,svc1)" ,
104- },
105- },
10675 }
10776
10877 for _ , c := range cases {
@@ -114,3 +83,56 @@ func TestServiceFiltersLabelSelectorGen(t *testing.T) {
11483 })
11584 }
11685}
86+ func TestServiceFiltersServiceByName (t * testing.T ) {
87+ cases := []struct {
88+ name string
89+ filters []string
90+ services []swarm.Service
91+ expectedServices []swarm.Service
92+ }{
93+ {
94+ name : "no filter" ,
95+ filters : []string {},
96+ services : makeServices ("s1" , "s2" ),
97+ expectedServices : makeServices ("s1" , "s2" ),
98+ },
99+ {
100+ name : "single-name filter" ,
101+ filters : []string {"s1" },
102+ services : makeServices ("s1" , "s2" ),
103+ expectedServices : makeServices ("s1" ),
104+ },
105+ {
106+ name : "filter by prefix" ,
107+ filters : []string {"prefix" },
108+ services : makeServices ("prefix-s1" , "prefix-s2" , "s2" ),
109+ expectedServices : makeServices ("prefix-s1" , "prefix-s2" ),
110+ },
111+ {
112+ name : "multi-name filter" ,
113+ filters : []string {"s1" , "s2" },
114+ services : makeServices ("s1" , "s2" , "s3" ),
115+ expectedServices : makeServices ("s1" , "s2" ),
116+ },
117+ {
118+ name : "stack name prefix is valid" ,
119+ filters : []string {"stack_s1" },
120+ services : makeServices ("s1" , "s11" , "s2" ),
121+ expectedServices : makeServices ("s1" , "s11" ),
122+ },
123+ }
124+ for _ , c := range cases {
125+ t .Run (c .name , func (t * testing.T ) {
126+ result := filterServicesByName (c .services , c .filters , "stack" )
127+ assert .DeepEqual (t , c .expectedServices , result )
128+ })
129+ }
130+ }
131+
132+ func makeServices (names ... string ) []swarm.Service {
133+ result := make ([]swarm.Service , len (names ))
134+ for i , n := range names {
135+ result [i ] = swarm.Service {Spec : swarm.ServiceSpec {Annotations : swarm.Annotations {Name : "stack_" + n }}}
136+ }
137+ return result
138+ }
0 commit comments