github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/registry_test.go (about) 1 package cmd 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 "testing" 8 9 "github.com/drycc/controller-sdk-go/api" 10 "github.com/drycc/workflow-cli/pkg/testutil" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 type parseInfoCase struct { 15 Input string 16 Key string 17 Value string 18 ExpectedError bool 19 ExpectedMsg string 20 } 21 22 func TestParseInfo(t *testing.T) { 23 t.Parallel() 24 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.NoError(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`}, 63 } 64 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.NoError(t, err) 71 assert.Equal(t, actual, check.ExpectedMap, "map") 72 } 73 } 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, _ *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 := DryccCmd{WOut: &b, ConfigFile: cf} 105 106 err = cmdr.RegistryList("enterprise") 107 assert.NoError(t, err) 108 assert.Equal(t, b.String(), `UUID OWNER KEY VALUE 109 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk password ncc1701 110 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk 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 := DryccCmd{WOut: &b, ConfigFile: cf} 152 153 err = cmdr.RegistrySet("foo", []string{"username=jkirk", "password=ncc1701"}) 154 assert.NoError(t, err) 155 156 assert.Equal(t, testutil.StripProgress(b.String()), `Applying registry information... done 157 158 UUID OWNER KEY VALUE 159 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk password ncc1701 160 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk 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) 169 } 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 := DryccCmd{WOut: &b, ConfigFile: cf} 199 200 err = cmdr.RegistryUnset("foo", []string{"username", "password"}) 201 assert.NoError(t, err) 202 203 assert.Equal(t, testutil.StripProgress(b.String()), `Applying registry information... done 204 205 No registrys found in foo app. 206 `, "output") 207 }