You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							292 lines
						
					
					
						
							5.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							292 lines
						
					
					
						
							5.1 KiB
						
					
					
				| 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!") | |
| 			} | |
| 		} | |
| 	} | |
| }
 |