github.com/drycc/workflow-cli@v1.5.3-0.20240322092846-d4ee25983af9/cmd/canary_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 TestCanaryInfo(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  			"canaries": ["cmd"],
    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.CanaryInfo("rivendell")
    37  	assert.NoError(t, err)
    38  	assert.Equal(t, b.String(), `UUID                                    OWNER     PTYPE    CREATED                   UPDATED                
    39  de1bf5b5-4a72-4f94-a10c-d2a3741cdf75    elrond    cmd      2014-01-01T00:00:00UTC    2014-01-01T00:00:00UTC    
    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.CanaryInfo("mordor")
    55  	assert.NoError(t, err)
    56  	assert.Equal(t, b.String(), "No canaries found in mordor app.\n", "output")
    57  }
    58  
    59  func TestCanaryCreate(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 := []string{"cmd"}
    72  		testutil.AssertBody(t, api.AppSettings{Canaries: data}, r)
    73  		fmt.Fprintf(w, `{}`)
    74  	})
    75  
    76  	err = cmdr.CanaryCreate("lothlorien", []string{"cmd"})
    77  	assert.NoError(t, err)
    78  	assert.Equal(t, testutil.StripProgress(b.String()), "Applying canary settings for process type cmd on lothlorien... done\n", "output")
    79  }
    80  
    81  func TestCanaryRemove(t *testing.T) {
    82  	t.Parallel()
    83  	cf, server, err := testutil.NewTestServerAndClient()
    84  	if err != nil {
    85  		t.Fatal(err)
    86  	}
    87  	defer server.Close()
    88  	var b bytes.Buffer
    89  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
    90  
    91  	server.Mux.HandleFunc("/v2/apps/bree/settings/", func(w http.ResponseWriter, r *http.Request) {
    92  		testutil.SetHeaders(w)
    93  		data := []string{"cmd"}
    94  		testutil.AssertBody(t, api.AppSettings{Canaries: data}, r)
    95  		w.WriteHeader(http.StatusNoContent)
    96  	})
    97  
    98  	err = cmdr.CanaryRemove("bree", []string{"cmd"})
    99  	assert.NoError(t, err)
   100  	assert.Equal(t, testutil.StripProgress(b.String()), "Removing canary for process type cmd on bree... done\n", "output")
   101  }
   102  
   103  func TestCanaryRelease(t *testing.T) {
   104  	t.Parallel()
   105  	cf, server, err := testutil.NewTestServerAndClient()
   106  	if err != nil {
   107  		t.Fatal(err)
   108  	}
   109  	defer server.Close()
   110  	var b bytes.Buffer
   111  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   112  
   113  	server.Mux.HandleFunc("/v2/apps/bree/canary/release/", func(w http.ResponseWriter, _ *http.Request) {
   114  		testutil.SetHeaders(w)
   115  		w.WriteHeader(http.StatusNoContent)
   116  	})
   117  
   118  	err = cmdr.CanaryRelease("bree")
   119  	assert.NoError(t, err)
   120  	assert.Equal(t, testutil.StripProgress(b.String()), "Release canary for bree... done\n", "output")
   121  }
   122  
   123  func TestCanaryRollback(t *testing.T) {
   124  	t.Parallel()
   125  	cf, server, err := testutil.NewTestServerAndClient()
   126  	if err != nil {
   127  		t.Fatal(err)
   128  	}
   129  	defer server.Close()
   130  	var b bytes.Buffer
   131  	cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
   132  
   133  	server.Mux.HandleFunc("/v2/apps/bree/canary/rollback/", func(w http.ResponseWriter, _ *http.Request) {
   134  		testutil.SetHeaders(w)
   135  		w.WriteHeader(http.StatusNoContent)
   136  	})
   137  
   138  	err = cmdr.CanaryRollback("bree")
   139  	assert.NoError(t, err)
   140  	assert.Equal(t, testutil.StripProgress(b.String()), "Rollback canary for bree... done\n", "output")
   141  }