Skip to content

Commit 8e26692

Browse files
test(registry): add tests to registry (#202)
1 parent da92e75 commit 8e26692

2 files changed

Lines changed: 195 additions & 14 deletions

File tree

cmd/registry.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func parseInfos(items []string) (map[string]interface{}, error) {
120120
func parseInfo(item string) (string, string, error) {
121121
parts := strings.SplitN(item, "=", 2)
122122

123-
if len(parts) != 2 {
123+
if len(parts) != 2 || parts[0] == "" || parts[1] == "" {
124124
return "", "", fmt.Errorf(`%s is invalid. Must be in format key=value
125125
Examples: username=bob password=s3cur3pw1`, item)
126126
}

cmd/registry_test.go

Lines changed: 194 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,207 @@
11
package cmd
22

3-
import "testing"
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 parseInfoCase struct {
15+
Input string
16+
Key string
17+
Value string
18+
ExpectedError bool
19+
ExpectedMsg string
20+
}
421

522
func TestParseInfo(t *testing.T) {
623
t.Parallel()
724

8-
// keys can only be username or password
9-
goodKeys := []string{
10-
"username=bob",
11-
"password=isyouruncle",
12-
// regression test for passwords with equals signs, such as a gcr.io token
13-
"password=ihaveanequalssign=",
25+
cases := []parseInfoCase{
26+
{"username=test", "username", "test", false, ""},
27+
{"password=test=", "password", "test=", false, ""},
28+
{"test=1", "", "", true, `test is invalid. Valid keys are "username" or "password"`},
29+
{"test", "", "", true, `test is invalid. Must be in format key=value
30+
Examples: username=bob password=s3cur3pw1`},
31+
{"test=", "", "", true, `test= is invalid. Must be in format key=value
32+
Examples: username=bob password=s3cur3pw1`},
33+
{"=test", "", "", true, `=test is invalid. Must be in format key=value
34+
Examples: username=bob password=s3cur3pw1`},
35+
}
36+
37+
for _, check := range cases {
38+
key, value, err := parseInfo(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 parseInfosCase struct {
50+
Input []string
51+
ExpectedMap map[string]interface{}
52+
ExpectedError bool
53+
ExpectedMsg string
54+
}
55+
56+
func TestParseInfos(t *testing.T) {
57+
t.Parallel()
58+
59+
cases := []parseInfosCase{
60+
{[]string{"username=test", "password=abc123"}, map[string]interface{}{"username": "test", "password": "abc123"}, false, ""},
61+
{[]string{"foo=", "true=false"}, nil, true, `foo= is invalid. Must be in format key=value
62+
Examples: username=bob password=s3cur3pw1`},
1463
}
1564

16-
for _, key := range goodKeys {
17-
if _, _, err := parseInfo(key); err != nil {
18-
t.Errorf("failed parsing valid keys, got (%s)", err)
65+
for _, check := range cases {
66+
actual, err := parseInfos(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")
1972
}
2073
}
74+
}
75+
76+
func TestRegistryList(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+
"cpu": {},
92+
"tags": {},
93+
"registry": {
94+
"username": "jkirk",
95+
"password": "ncc1701"
96+
},
97+
"created": "2014-01-01T00:00:00UTC",
98+
"updated": "2014-01-01T00:00:00UTC",
99+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
100+
}`)
101+
})
102+
103+
var b bytes.Buffer
104+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
105+
106+
err = cmdr.RegistryList("enterprise")
107+
assert.NoErr(t, err)
108+
assert.Equal(t, b.String(), `=== enterprise Registry
109+
password ncc1701
110+
username jkirk
111+
`, "output")
112+
}
113+
114+
func TestRegistrySet(t *testing.T) {
115+
t.Parallel()
116+
cf, server, err := testutil.NewTestServerAndClient()
117+
if err != nil {
118+
t.Fatal(err)
119+
}
120+
defer server.Close()
121+
122+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
123+
testutil.SetHeaders(w)
124+
if r.Method == "POST" {
125+
testutil.AssertBody(t, api.Config{
126+
Registry: map[string]interface{}{
127+
"username": "jkirk",
128+
"password": "ncc1701",
129+
},
130+
}, r)
131+
}
132+
133+
fmt.Fprintf(w, `{
134+
"owner": "jkirk",
135+
"app": "foo",
136+
"values": {},
137+
"memory": {},
138+
"cpu": {},
139+
"registry": {
140+
"username": "jkirk",
141+
"password": "ncc1701"
142+
},
143+
"registry": {},
144+
"created": "2014-01-01T00:00:00UTC",
145+
"updated": "2014-01-01T00:00:00UTC",
146+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
147+
}`)
148+
})
149+
150+
var b bytes.Buffer
151+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
152+
153+
err = cmdr.RegistrySet("foo", []string{"username=jkirk", "password=ncc1701"})
154+
assert.NoErr(t, err)
155+
156+
assert.Equal(t, testutil.StripProgress(b.String()), `Applying registry information... done
21157
22-
badKey := "usrname=bob"
23-
if _, _, err := parseInfo(badKey); err == nil {
24-
t.Errorf("failed erroring on bad key '%s'", badKey)
158+
=== foo Registry
159+
password ncc1701
160+
username jkirk
161+
`, "output")
162+
}
163+
164+
func TestRegistryUnset(t *testing.T) {
165+
t.Parallel()
166+
cf, server, err := testutil.NewTestServerAndClient()
167+
if err != nil {
168+
t.Fatal(err)
25169
}
170+
defer server.Close()
171+
172+
server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) {
173+
testutil.SetHeaders(w)
174+
if r.Method == "POST" {
175+
testutil.AssertBody(t, api.Config{
176+
Registry: map[string]interface{}{
177+
"username": nil,
178+
"password": nil,
179+
},
180+
}, r)
181+
}
182+
183+
fmt.Fprintf(w, `{
184+
"owner": "jkirk",
185+
"app": "foo",
186+
"values": {},
187+
"memory": {},
188+
"cpu": {},
189+
"tags": {},
190+
"registry": {},
191+
"created": "2014-01-01T00:00:00UTC",
192+
"updated": "2014-01-01T00:00:00UTC",
193+
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
194+
}`)
195+
})
196+
197+
var b bytes.Buffer
198+
cmdr := DeisCmd{WOut: &b, ConfigFile: cf}
199+
200+
err = cmdr.RegistryUnset("foo", []string{"username", "password"})
201+
assert.NoErr(t, err)
202+
203+
assert.Equal(t, testutil.StripProgress(b.String()), `Applying registry information... done
204+
205+
=== foo Registry
206+
`, "output")
26207
}

0 commit comments

Comments
 (0)