|
|
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 unexpected!") } } } }
|