github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/config_test.go (about) 1 package cmd 2 3 import ( 4 "bytes" 5 "fmt" 6 "net/http" 7 "os" 8 "testing" 9 10 "github.com/drycc/controller-sdk-go/api" 11 "github.com/drycc/workflow-cli/pkg/testutil" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestParseConfig(t *testing.T) { 16 t.Parallel() 17 18 _, err := parseConfig([]string{"FOO=bar", "CAR star"}) 19 assert.NotEqual(t, err, nil, "config") 20 21 actual, err := parseConfig([]string{"FOO=bar"}) 22 assert.NoError(t, err) 23 assert.Equal(t, actual, map[string]interface{}{"FOO": "bar"}, "map") 24 25 actual, err = parseConfig([]string{"FOO="}) 26 assert.NoError(t, err) 27 assert.Equal(t, actual, map[string]interface{}{"FOO": ""}, "map") 28 } 29 30 func TestParseSSHKey(t *testing.T) { 31 t.Parallel() 32 33 _, err := parseSSHKey("foobar") 34 assert.NotEqual(t, err, "bogus key") 35 36 validSSHKey := "-----BEGIN OPENSSH PRIVATE KEY-----" 37 38 actual, err := parseSSHKey(validSSHKey) 39 assert.NoError(t, err) 40 assert.Equal(t, actual, validSSHKey, "plain key") 41 42 encodedSSHKey := "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0=" 43 44 actual, err = parseSSHKey(encodedSSHKey) 45 assert.NoError(t, err) 46 assert.Equal(t, actual, validSSHKey, "base64 key") 47 48 keyFile, err := os.CreateTemp("", "drycc-cli-unit-test-sshkey") 49 assert.NoError(t, err) 50 defer os.Remove(keyFile.Name()) 51 _, err = keyFile.Write([]byte(validSSHKey)) 52 assert.NoError(t, err) 53 keyFile.Close() 54 55 actual, err = parseSSHKey(keyFile.Name()) 56 assert.NoError(t, err) 57 assert.Equal(t, actual, validSSHKey, "key path") 58 } 59 60 func TestFormatConfig(t *testing.T) { 61 t.Parallel() 62 63 testMap := map[string]interface{}{ 64 "TEST": "testing", 65 "NCC": 1701, 66 "TRUE": false, 67 "FLOAT": 12.34, 68 } 69 70 testOut := formatConfig(testMap) 71 assert.Equal(t, testOut, `FLOAT=12.34 72 NCC=1701 73 TEST=testing 74 TRUE=false 75 `, "output") 76 } 77 78 func TestSortKeys(t *testing.T) { 79 test := map[string]interface{}{ 80 "d": nil, 81 "b": nil, 82 "c": nil, 83 "a": nil, 84 } 85 86 assert.Equal(t, *sortKeys(test), []string{"a", "b", "c", "d"}, "map") 87 } 88 89 func TestConfigList(t *testing.T) { 90 t.Parallel() 91 cf, server, err := testutil.NewTestServerAndClient() 92 if err != nil { 93 t.Fatal(err) 94 } 95 defer server.Close() 96 97 server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, _ *http.Request) { 98 testutil.SetHeaders(w) 99 fmt.Fprintf(w, `{ 100 "owner": "jkirk", 101 "app": "foo", 102 "values": { 103 "TEST": "testing", 104 "NCC": "1701", 105 "TRUE": "false", 106 "FLOAT": "12.34" 107 }, 108 "memory": {}, 109 "cpu": {}, 110 "tags": {}, 111 "registry": {}, 112 "created": "2014-01-01T00:00:00UTC", 113 "updated": "2014-01-01T00:00:00UTC", 114 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 115 }`) 116 }) 117 118 var b bytes.Buffer 119 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 120 121 err = cmdr.ConfigList("foo", "") 122 assert.NoError(t, err) 123 124 assert.Equal(t, b.String(), `UUID OWNER NAME VALUE 125 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk FLOAT 12.34 126 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk NCC 1701 127 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk TEST testing 128 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk TRUE false 129 `, "output") 130 b.Reset() 131 132 err = cmdr.ConfigList("foo", "oneline") 133 assert.NoError(t, err) 134 assert.Equal(t, b.String(), "FLOAT=12.34 NCC=1701 TEST=testing TRUE=false\n", "output") 135 136 b.Reset() 137 138 err = cmdr.ConfigList("foo", "diff") 139 assert.NoError(t, err) 140 assert.Equal(t, b.String(), "FLOAT=12.34\nNCC=1701\nTEST=testing\nTRUE=false\n", "output") 141 } 142 143 func TestConfigSet(t *testing.T) { 144 t.Parallel() 145 cf, server, err := testutil.NewTestServerAndClient() 146 if err != nil { 147 t.Fatal(err) 148 } 149 defer server.Close() 150 151 server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) { 152 testutil.SetHeaders(w) 153 if r.Method == "POST" { 154 testutil.AssertBody(t, api.Config{ 155 Values: map[string]interface{}{ 156 "TRUE": "false", 157 "SSH_KEY": "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0=", 158 }, 159 }, r) 160 } 161 162 fmt.Fprintf(w, `{ 163 "owner": "jkirk", 164 "app": "foo", 165 "values": { 166 "TEST": "testing", 167 "NCC": "1701", 168 "TRUE": "false", 169 "SSH_KEY": "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0=", 170 "FLOAT": "12.34" 171 }, 172 "memory": {}, 173 "cpu": {}, 174 "tags": {}, 175 "registry": {}, 176 "created": "2014-01-01T00:00:00UTC", 177 "updated": "2014-01-01T00:00:00UTC", 178 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 179 }`) 180 }) 181 182 var b bytes.Buffer 183 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 184 185 err = cmdr.ConfigSet("foo", []string{"TRUE=false", "SSH_KEY=-----BEGIN OPENSSH PRIVATE KEY-----"}) 186 assert.NoError(t, err) 187 188 assert.Equal(t, testutil.StripProgress(b.String()), `Creating config... done 189 190 UUID OWNER NAME VALUE 191 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk FLOAT 12.34 192 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk NCC 1701 193 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk SSH_KEY LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0= 194 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk TEST testing 195 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk TRUE false 196 `, "output") 197 } 198 199 func TestConfigUnset(t *testing.T) { 200 t.Parallel() 201 cf, server, err := testutil.NewTestServerAndClient() 202 if err != nil { 203 t.Fatal(err) 204 } 205 defer server.Close() 206 207 server.Mux.HandleFunc("/v2/apps/foo/config/", func(w http.ResponseWriter, r *http.Request) { 208 testutil.SetHeaders(w) 209 if r.Method == "POST" { 210 testutil.AssertBody(t, api.Config{ 211 Values: map[string]interface{}{ 212 "FOO": nil, 213 }, 214 }, r) 215 } 216 217 fmt.Fprintf(w, `{ 218 "owner": "jkirk", 219 "app": "foo", 220 "values": { 221 "TEST": "testing", 222 "NCC": "1701", 223 "TRUE": "false", 224 "FLOAT": "12.34" 225 }, 226 "memory": {}, 227 "cpu": {}, 228 "tags": {}, 229 "registry": {}, 230 "created": "2014-01-01T00:00:00UTC", 231 "updated": "2014-01-01T00:00:00UTC", 232 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 233 }`) 234 }) 235 236 var b bytes.Buffer 237 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 238 239 err = cmdr.ConfigUnset("foo", []string{"FOO"}) 240 assert.NoError(t, err) 241 242 assert.Equal(t, testutil.StripProgress(b.String()), `Removing config... done 243 244 UUID OWNER NAME VALUE 245 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk FLOAT 12.34 246 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk NCC 1701 247 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk TEST testing 248 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 jkirk TRUE false 249 `, "output") 250 }