aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_s3_circuitbreaker_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/shell/command_s3_circuitbreaker_test.go')
-rw-r--r--weed/shell/command_s3_circuitbreaker_test.go292
1 files changed, 292 insertions, 0 deletions
diff --git a/weed/shell/command_s3_circuitbreaker_test.go b/weed/shell/command_s3_circuitbreaker_test.go
new file mode 100644
index 000000000..3d0b4ac6e
--- /dev/null
+++ b/weed/shell/command_s3_circuitbreaker_test.go
@@ -0,0 +1,292 @@
+package shell
+
+import (
+ "bytes"
+ "encoding/json"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+type Case struct {
+ args []string
+ result string
+}
+
+var (
+ TestCases = []*Case{
+ //add circuit breaker config for global
+ {
+ args: strings.Split("-global -type Count -actions Read,Write -values 500,200", " "),
+ result: `{
+ "global": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ }
+ }`,
+ },
+
+ //disable global config
+ {
+ args: strings.Split("-global -disable", " "),
+ result: `{
+ "global": {
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ }
+ }`,
+ },
+
+ //add circuit breaker config for buckets x,y,z
+ {
+ args: strings.Split("-buckets x,y,z -type Count -actions Read,Write -values 200,100", " "),
+ result: `{
+ "global": {
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ },
+ "buckets": {
+ "x": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "y": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "z": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ }
+ }
+ }`,
+ },
+
+ //disable circuit breaker config of x
+ {
+ args: strings.Split("-buckets x -disable", " "),
+ result: `{
+ "global": {
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ },
+ "buckets": {
+ "x": {
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "y": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "z": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ }
+ }
+ }`,
+ },
+
+ //delete circuit breaker config of x
+ {
+ args: strings.Split("-buckets x -delete", " "),
+ result: `{
+ "global": {
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ },
+ "buckets": {
+ "y": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "z": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ }
+ }
+ }`,
+ },
+
+ //configure the circuit breaker for the size of the uploaded file for bucket x,y
+ {
+ args: strings.Split("-buckets x,y -type MB -actions Write -values 1024", " "),
+ result: `{
+ "global": {
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ },
+ "buckets": {
+ "x": {
+ "enabled": true,
+ "actions": {
+ "Write:MB": "1073741824"
+ }
+ },
+ "y": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100",
+ "Write:MB": "1073741824"
+ }
+ },
+ "z": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ }
+ }
+ }`,
+ },
+
+ //delete the circuit breaker configuration for the size of the uploaded file of bucket x,y
+ {
+ args: strings.Split("-buckets x,y -type MB -actions Write -delete", " "),
+ result: `{
+ "global": {
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ },
+ "buckets": {
+ "x": {
+ "enabled": true
+ },
+ "y": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "z": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ }
+ }
+ }`,
+ },
+
+ //enable global circuit breaker config (without -disable flag)
+ {
+ args: strings.Split("-global", " "),
+ result: `{
+ "global": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "500",
+ "Write:Count": "200"
+ }
+ },
+ "buckets": {
+ "x": {
+ "enabled": true
+ },
+ "y": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ },
+ "z": {
+ "enabled": true,
+ "actions": {
+ "Read:Count": "200",
+ "Write:Count": "100"
+ }
+ }
+ }
+ }`,
+ },
+
+ //clear all circuit breaker config
+ {
+ args: strings.Split("-delete", " "),
+ result: `{
+
+ }`,
+ },
+ }
+)
+
+func TestCircuitBreakerShell(t *testing.T) {
+ var writeBuf bytes.Buffer
+ cmd := &commandS3CircuitBreaker{}
+ LoadConfig = func(commandEnv *CommandEnv, dir string, file string, buf *bytes.Buffer) error {
+ _, err := buf.Write(writeBuf.Bytes())
+ if err != nil {
+ return err
+ }
+ writeBuf.Reset()
+ return nil
+ }
+
+ for i, tc := range TestCases {
+ err := cmd.Do(tc.args, nil, &writeBuf)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if i != 0 {
+ result := writeBuf.String()
+
+ actual := make(map[string]interface{})
+ err := json.Unmarshal([]byte(result), &actual)
+ if err != nil {
+ t.Error(err)
+ }
+
+ expect := make(map[string]interface{})
+ err = json.Unmarshal([]byte(result), &expect)
+ if err != nil {
+ t.Error(err)
+ }
+ if !reflect.DeepEqual(actual, expect) {
+ t.Fatal("result of s3 circuit breaker shell command is unexpect!")
+ }
+ }
+ }
+}