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  }