Skip to content

Commit 3b57aa9

Browse files
tests(config): add test for config commands (#192)
1 parent 8e26692 commit 3b57aa9

3 files changed

Lines changed: 208 additions & 10 deletions

File tree

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
Dockerfile
2+
vendor

cmd/config.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,16 @@ func (d DeisCmd) ConfigList(appID string, oneLine bool) error {
2929
return err
3030
}
3131

32-
var keys []string
33-
for k := range config.Values {
34-
keys = append(keys, k)
35-
}
36-
sort.Strings(keys)
32+
keys := sortKeys(config.Values)
3733

3834
if oneLine {
39-
for _, key := range keys {
40-
d.Printf("%s=%s ", key, config.Values[key])
35+
for i, key := range keys {
36+
sep := " "
37+
if i == len(keys)-1 {
38+
sep = "\n"
39+
}
40+
d.Printf("%s=%s%s", key, config.Values[key], sep)
4141
}
42-
d.Println()
4342
} else {
4443
d.Printf("=== %s Config\n", appID)
4544

@@ -285,9 +284,19 @@ func parseConfig(configVars []string) (map[string]interface{}, error) {
285284
func formatConfig(configVars map[string]interface{}) string {
286285
var formattedConfig string
287286

288-
for key, value := range configVars {
289-
formattedConfig += fmt.Sprintf("%s=%s\n", key, value)
287+
keys := sortKeys(configVars)
288+
for _, key := range keys {
289+
formattedConfig += fmt.Sprintf("%s=%v\n", key, configVars[key])
290290
}
291291

292292
return formattedConfig
293293
}
294+
295+
func sortKeys(kv map[string]interface{}) []string {
296+
var keys []string
297+
for k := range kv {
298+
keys = append(keys, k)
299+
}
300+
sort.Strings(keys)
301+
return keys
302+
}

cmd/config_test.go

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package cmd
22

33
import (
4+
"bytes"
5+
"fmt"
6+
"net/http"
47
"testing"
58

69
"github.com/arschles/assert"
10+
"github.com/deis/controller-sdk-go/api"
11+
"github.com/deis/workflow-cli/pkg/testutil"
712
)
813

914
func TestParseConfig(t *testing.T) {
@@ -16,3 +21,186 @@ func TestParseConfig(t *testing.T) {
1621
assert.NoErr(t, err)
1722
assert.Equal(t, actual, map[string]interface{}{"FOO": "bar"}, "map")
1823
}
24+
25+
func TestFormatConfig(t *testing.T) {
26+
t.Parallel()
27+
28+
testMap := map[string]interface{}{
29+
"TEST": "testing",
30+
"NCC": 1701,
31+
"TRUE": false,
32+
"FLOAT": 12.34,
33+
}
34+
35+
testOut := formatConfig(testMap)
36+
assert.Equal(t, testOut, `FLOAT=12.34
37+
NCC=1701
38+
TEST=testing
39+
TRUE=false
40+
`, "output")
41+
}
42+
43+
func TestSortKeys(t *testing.T) {
44+
test := map[string]interface{}{
45+
"d": nil,
46+
"b": nil,
47+
"c": nil,
48+
"a": nil,
49+
}
50+
51+
assert.Equal(t, sortKeys(test), []string{"a", "b", "c", "d"}, "map")
52+
}
53+
54+
func TestConfigList(t *testing.T) {
55+
t.Parallel()
56+
cf, server, err := testutil.NewTestServerAndClient()
57+
if err != nil {
58+
t.Fatal(err)
59+
}
60+
defer server.Close()
61+
62+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
63+
testutil.SetHeaders(w)
64+
fmt.Fprintf(w, `{
65+
"owner": "jkirk",
66+
"app": "foo",
67+
"values": {
68+
"TEST": "testing",
69+
"NCC": "1701",
70+
"TRUE": "false",
71+
"FLOAT": "12.34"
72+
},
73+
"memory": {},
74+
"cpu": {},
75+
"tags": {},
76+
"registry": {},
77+
"created": "2014-01-01T00:00:00UTC",
78+
"updated": "2014-01-01T00:00:00UTC",
79+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
80+
}`)
81+
})
82+
83+
var b bytes.Buffer
84+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
85+
86+
err = cmdr.ConfigList("foo", false)
87+
assert.NoErr(t, err)
88+
89+
assert.Equal(t, b.String(), `=== foo Config
90+
FLOAT 12.34
91+
NCC 1701
92+
TEST testing
93+
TRUE false
94+
`, "output")
95+
b.Reset()
96+
97+
err = cmdr.ConfigList("foo", true)
98+
assert.NoErr(t, err)
99+
assert.Equal(t, b.String(), "FLOAT=12.34 NCC=1701 TEST=testing TRUE=false\n", "output")
100+
}
101+
102+
func TestConfigSet(t *testing.T) {
103+
t.Parallel()
104+
cf, server, err := testutil.NewTestServerAndClient()
105+
if err != nil {
106+
t.Fatal(err)
107+
}
108+
defer server.Close()
109+
110+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
111+
testutil.SetHeaders(w)
112+
if r.Method == "POST" {
113+
testutil.AssertBody(t, api.Config{
114+
Values: map[string]interface{}{
115+
"TRUE": "false",
116+
},
117+
}, r)
118+
}
119+
120+
fmt.Fprintf(w, `{
121+
"owner": "jkirk",
122+
"app": "foo",
123+
"values": {
124+
"TEST": "testing",
125+
"NCC": "1701",
126+
"TRUE": "false",
127+
"FLOAT": "12.34"
128+
},
129+
"memory": {},
130+
"cpu": {},
131+
"tags": {},
132+
"registry": {},
133+
"created": "2014-01-01T00:00:00UTC",
134+
"updated": "2014-01-01T00:00:00UTC",
135+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
136+
}`)
137+
})
138+
139+
var b bytes.Buffer
140+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
141+
142+
err = cmdr.ConfigSet("foo", []string{"TRUE=false"})
143+
assert.NoErr(t, err)
144+
145+
assert.Equal(t, testutil.StripProgress(b.String()), `Creating config... done
146+
147+
=== foo Config
148+
FLOAT 12.34
149+
NCC 1701
150+
TEST testing
151+
TRUE false
152+
`, "output")
153+
}
154+
155+
func TestConfigUnset(t *testing.T) {
156+
t.Parallel()
157+
cf, server, err := testutil.NewTestServerAndClient()
158+
if err != nil {
159+
t.Fatal(err)
160+
}
161+
defer server.Close()
162+
163+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
164+
testutil.SetHeaders(w)
165+
if r.Method == "POST" {
166+
testutil.AssertBody(t, api.Config{
167+
Values: map[string]interface{}{
168+
"FOO": nil,
169+
},
170+
}, r)
171+
}
172+
173+
fmt.Fprintf(w, `{
174+
"owner": "jkirk",
175+
"app": "foo",
176+
"values": {
177+
"TEST": "testing",
178+
"NCC": "1701",
179+
"TRUE": "false",
180+
"FLOAT": "12.34"
181+
},
182+
"memory": {},
183+
"cpu": {},
184+
"tags": {},
185+
"registry": {},
186+
"created": "2014-01-01T00:00:00UTC",
187+
"updated": "2014-01-01T00:00:00UTC",
188+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
189+
}`)
190+
})
191+
192+
var b bytes.Buffer
193+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
194+
195+
err = cmdr.ConfigUnset("foo", []string{"FOO"})
196+
assert.NoErr(t, err)
197+
198+
assert.Equal(t, testutil.StripProgress(b.String()), `Removing config... done
199+
200+
=== foo Config
201+
FLOAT 12.34
202+
NCC 1701
203+
TEST testing
204+
TRUE false
205+
`, "output")
206+
}

0 commit comments

Comments
 (0)