Skip to content

Commit 3028fd8

Browse files
test(limits): add tests for limits (#206)
1 parent f4e515f commit 3028fd8

2 files changed

Lines changed: 334 additions & 1 deletion

File tree

cmd/limits.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func parseLimits(limits []string) (map[string]interface{}, error) {
135135
key, value, err := parseLimit(limit)
136136

137137
if err != nil {
138-
return nil, fmt.Errorf("Error parsing limit %s: %s", limit, err)
138+
return nil, err
139139
}
140140

141141
limitsMap[key] = value

cmd/limits_test.go

Lines changed: 333 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,333 @@
1+
package cmd
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"net/http"
7+
"testing"
8+
9+
"github.com/arschles/assert"
10+
"github.com/deis/controller-sdk-go/api"
11+
"github.com/deis/workflow-cli/pkg/testutil"
12+
)
13+
14+
type parseLimitCase struct {
15+
Input string
16+
Key string
17+
Value string
18+
ExpectedError bool
19+
ExpectedMsg string
20+
}
21+
22+
func TestParseLimit(t *testing.T) {
23+
t.Parallel()
24+
25+
cases := []parseLimitCase{
26+
{"web=2G", "web", "2G", false, ""},
27+
{"=1", "", "", true, `=1 doesn't fit format type=#unit or type=#
28+
Examples: web=2G worker=500M web=300`},
29+
{"web=", "", "", true, `web= doesn't fit format type=#unit or type=#
30+
Examples: web=2G worker=500M web=300`},
31+
{"1=", "", "", true, `1= doesn't fit format type=#unit or type=#
32+
Examples: web=2G worker=500M web=300`},
33+
{"web=G", "", "", true, `web=G doesn't fit format type=#unit or type=#
34+
Examples: web=2G worker=500M web=300`},
35+
}
36+
37+
for _, check := range cases {
38+
key, value, err := parseLimit(check.Input)
39+
if check.ExpectedError {
40+
assert.Equal(t, err.Error(), check.ExpectedMsg, "error")
41+
} else {
42+
assert.NoErr(t, err)
43+
assert.Equal(t, key, check.Key, "key")
44+
assert.Equal(t, value, check.Value, "value")
45+
}
46+
}
47+
}
48+
49+
type parseLimitsCase struct {
50+
Input []string
51+
ExpectedMap map[string]interface{}
52+
ExpectedError bool
53+
ExpectedMsg string
54+
}
55+
56+
func TestLimitTags(t *testing.T) {
57+
t.Parallel()
58+
59+
cases := []parseLimitsCase{
60+
{[]string{"web=1G", "worker=2"}, map[string]interface{}{"web": "1G", "worker": "2"}, false, ""},
61+
{[]string{"foo=", "web=1G"}, nil, true, `foo= doesn't fit format type=#unit or type=#
62+
Examples: web=2G worker=500M web=300`},
63+
}
64+
65+
for _, check := range cases {
66+
actual, err := parseLimits(check.Input)
67+
if check.ExpectedError {
68+
assert.Equal(t, err.Error(), check.ExpectedMsg, "error")
69+
} else {
70+
assert.NoErr(t, err)
71+
assert.Equal(t, actual, check.ExpectedMap, "map")
72+
}
73+
}
74+
}
75+
76+
func TestLimitsList(t *testing.T) {
77+
t.Parallel()
78+
cf, server, err := testutil.NewTestServerAndClient()
79+
if err != nil {
80+
t.Fatal(err)
81+
}
82+
defer server.Close()
83+
84+
server.Mux.HandleFunc("/v2/apps/enterprise/config/", func(w http.ResponseWriter, r *http.Request) {
85+
testutil.SetHeaders(w)
86+
fmt.Fprintf(w, `{
87+
"owner": "jkirk",
88+
"app": "enterprise",
89+
"values": {},
90+
"memory": {
91+
"web": "2G"
92+
},
93+
"cpu": {
94+
"web": "2",
95+
"worker": "1"
96+
},
97+
"tags": {},
98+
"registry": {},
99+
"created": "2014-01-01T00:00:00UTC",
100+
"updated": "2014-01-01T00:00:00UTC",
101+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
102+
}`)
103+
})
104+
105+
var b bytes.Buffer
106+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
107+
108+
err = cmdr.LimitsList("enterprise")
109+
assert.NoErr(t, err)
110+
assert.Equal(t, b.String(), `=== enterprise Limits
111+
112+
--- Memory
113+
web 2G
114+
115+
--- CPU
116+
web 2
117+
worker 1
118+
`, "output")
119+
120+
server.Mux.HandleFunc("/v2/apps/franklin/config/", func(w http.ResponseWriter, r *http.Request) {
121+
testutil.SetHeaders(w)
122+
fmt.Fprintf(w, `{
123+
"owner": "bedison",
124+
"app": "franklin",
125+
"values": {},
126+
"memory": {},
127+
"cpu": {},
128+
"tags": {},
129+
"registry": {},
130+
"created": "2014-01-01T00:00:00UTC",
131+
"updated": "2014-01-01T00:00:00UTC",
132+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
133+
}`)
134+
})
135+
b.Reset()
136+
137+
err = cmdr.LimitsList("franklin")
138+
assert.NoErr(t, err)
139+
assert.Equal(t, b.String(), `=== franklin Limits
140+
141+
--- Memory
142+
Unlimited
143+
144+
--- CPU
145+
Unlimited
146+
`, "output")
147+
}
148+
149+
func TestLimitsSet(t *testing.T) {
150+
t.Parallel()
151+
cf, server, err := testutil.NewTestServerAndClient()
152+
if err != nil {
153+
t.Fatal(err)
154+
}
155+
defer server.Close()
156+
157+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
158+
testutil.SetHeaders(w)
159+
if r.Method == "POST" {
160+
testutil.AssertBody(t, api.Config{
161+
CPU: map[string]interface{}{
162+
"web": "100m",
163+
},
164+
}, r)
165+
}
166+
167+
fmt.Fprintf(w, `{
168+
"owner": "jkirk",
169+
"app": "foo",
170+
"values": {},
171+
"memory": {},
172+
"cpu": {
173+
"web": "100m"
174+
},
175+
"tags": {},
176+
"registry": {},
177+
"created": "2014-01-01T00:00:00UTC",
178+
"updated": "2014-01-01T00:00:00UTC",
179+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
180+
}`)
181+
})
182+
183+
var b bytes.Buffer
184+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
185+
186+
err = cmdr.LimitsSet("foo", []string{"web=100m"}, "cpu")
187+
assert.NoErr(t, err)
188+
189+
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
190+
191+
=== foo Limits
192+
193+
--- Memory
194+
Unlimited
195+
196+
--- CPU
197+
web 100m
198+
`, "output")
199+
200+
server.Mux.HandleFunc("/v2/apps/franklin/config/", func(w http.ResponseWriter, r *http.Request) {
201+
testutil.SetHeaders(w)
202+
if r.Method == "POST" {
203+
testutil.AssertBody(t, api.Config{
204+
Memory: map[string]interface{}{
205+
"web": "1G",
206+
},
207+
}, r)
208+
}
209+
210+
fmt.Fprintf(w, `{
211+
"owner": "bedison",
212+
"app": "franklin",
213+
"values": {},
214+
"memory": {
215+
"web": "1G"
216+
},
217+
"cpu": {},
218+
"tags": {},
219+
"registry": {},
220+
"created": "2014-01-01T00:00:00UTC",
221+
"updated": "2014-01-01T00:00:00UTC",
222+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
223+
}`)
224+
})
225+
b.Reset()
226+
227+
err = cmdr.LimitsSet("franklin", []string{"web=1G"}, "memory")
228+
assert.NoErr(t, err)
229+
230+
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
231+
232+
=== franklin Limits
233+
234+
--- Memory
235+
web 1G
236+
237+
--- CPU
238+
Unlimited
239+
`, "output")
240+
}
241+
242+
func TestLimitsUnset(t *testing.T) {
243+
t.Parallel()
244+
cf, server, err := testutil.NewTestServerAndClient()
245+
if err != nil {
246+
t.Fatal(err)
247+
}
248+
defer server.Close()
249+
250+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
251+
testutil.SetHeaders(w)
252+
if r.Method == "POST" {
253+
testutil.AssertBody(t, api.Config{
254+
Memory: map[string]interface{}{
255+
"web": nil,
256+
},
257+
}, r)
258+
}
259+
260+
fmt.Fprintf(w, `{
261+
"owner": "jkirk",
262+
"app": "foo",
263+
"values": {},
264+
"memory": {},
265+
"cpu": {
266+
"web": "100m"
267+
},
268+
"tags": {},
269+
"registry": {},
270+
"created": "2014-01-01T00:00:00UTC",
271+
"updated": "2014-01-01T00:00:00UTC",
272+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
273+
}`)
274+
})
275+
276+
var b bytes.Buffer
277+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
278+
279+
err = cmdr.LimitsUnset("foo", []string{"web"}, "memory")
280+
assert.NoErr(t, err)
281+
282+
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
283+
284+
=== foo Limits
285+
286+
--- Memory
287+
Unlimited
288+
289+
--- CPU
290+
web 100m
291+
`, "output")
292+
293+
server.Mux.HandleFunc("/v2/apps/franklin/config/", func(w http.ResponseWriter, r *http.Request) {
294+
testutil.SetHeaders(w)
295+
if r.Method == "POST" {
296+
testutil.AssertBody(t, api.Config{
297+
CPU: map[string]interface{}{
298+
"web": nil,
299+
},
300+
}, r)
301+
}
302+
303+
fmt.Fprintf(w, `{
304+
"owner": "bedison",
305+
"app": "franklin",
306+
"values": {},
307+
"memory": {
308+
"web": "1G"
309+
},
310+
"cpu": {},
311+
"tags": {},
312+
"registry": {},
313+
"created": "2014-01-01T00:00:00UTC",
314+
"updated": "2014-01-01T00:00:00UTC",
315+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
316+
}`)
317+
})
318+
b.Reset()
319+
320+
err = cmdr.LimitsUnset("franklin", []string{"web"}, "cpu")
321+
assert.NoErr(t, err)
322+
323+
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
324+
325+
=== franklin Limits
326+
327+
--- Memory
328+
web 1G
329+
330+
--- CPU
331+
Unlimited
332+
`, "output")
333+
}

0 commit comments

Comments
 (0)