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 }