github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/autoscale_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 func TestAutoscaleList(t *testing.T) { 15 t.Parallel() 16 cf, server, err := testutil.NewTestServerAndClient() 17 if err != nil { 18 t.Fatal(err) 19 } 20 defer server.Close() 21 var b bytes.Buffer 22 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 23 24 server.Mux.HandleFunc("/v2/apps/rivendell/settings/", func(w http.ResponseWriter, _ *http.Request) { 25 testutil.SetHeaders(w) 26 fmt.Fprintf(w, `{ 27 "owner": "elrond", 28 "app": "rivendell", 29 "autoscale": {"cmd": {"min": 3, "max": 8, "cpu_percent": 40}}, 30 "created": "2014-01-01T00:00:00UTC", 31 "updated": "2014-01-01T00:00:00UTC", 32 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 33 }`) 34 }) 35 36 err = cmdr.AutoscaleList("rivendell") 37 assert.NoError(t, err) 38 assert.Equal(t, b.String(), `UUID PTYPE PERCENT MIN MAX 39 de1bf5b5-4a72-4f94-a10c-d2a3741cdf75 cmd 40 3 8 40 `, "output") 41 42 server.Mux.HandleFunc("/v2/apps/mordor/settings/", func(w http.ResponseWriter, _ *http.Request) { 43 testutil.SetHeaders(w) 44 fmt.Fprintf(w, `{ 45 "owner": "sauron", 46 "app": "mordor", 47 "created": "2014-01-01T00:00:00UTC", 48 "updated": "2014-01-01T00:00:00UTC", 49 "uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75" 50 }`) 51 }) 52 b.Reset() 53 54 err = cmdr.AutoscaleList("mordor") 55 assert.NoError(t, err) 56 assert.Equal(t, b.String(), "No autoscale rules found.\n", "output") 57 } 58 59 func TestAutoscaleSet(t *testing.T) { 60 t.Parallel() 61 cf, server, err := testutil.NewTestServerAndClient() 62 if err != nil { 63 t.Fatal(err) 64 } 65 defer server.Close() 66 var b bytes.Buffer 67 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 68 69 server.Mux.HandleFunc("/v2/apps/lothlorien/settings/", func(w http.ResponseWriter, r *http.Request) { 70 testutil.SetHeaders(w) 71 data := map[string]*api.Autoscale{ 72 "cmd": { 73 Min: 3, 74 Max: 8, 75 CPUPercent: 40, 76 }, 77 } 78 testutil.AssertBody(t, api.AppSettings{Autoscale: data}, r) 79 fmt.Fprintf(w, `{}`) 80 }) 81 82 err = cmdr.AutoscaleSet("lothlorien", "cmd", 3, 8, 40) 83 assert.NoError(t, err) 84 assert.Equal(t, testutil.StripProgress(b.String()), "Applying autoscale settings for process type cmd on lothlorien... done\n", "output") 85 } 86 87 func TestAutoscaleUnset(t *testing.T) { 88 t.Parallel() 89 cf, server, err := testutil.NewTestServerAndClient() 90 if err != nil { 91 t.Fatal(err) 92 } 93 defer server.Close() 94 var b bytes.Buffer 95 cmdr := DryccCmd{WOut: &b, ConfigFile: cf} 96 97 server.Mux.HandleFunc("/v2/apps/bree/settings/", func(w http.ResponseWriter, r *http.Request) { 98 testutil.SetHeaders(w) 99 testutil.AssertBody(t, api.AppSettings{Autoscale: map[string]*api.Autoscale{"cmd": nil}}, r) 100 fmt.Fprintf(w, `{"autoscale":{"cmd":null}}`) 101 }) 102 103 err = cmdr.AutoscaleUnset("bree", "cmd") 104 assert.NoError(t, err) 105 assert.Equal(t, testutil.StripProgress(b.String()), "Removing autoscale for process type cmd on bree... done\n", "output") 106 }