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  }