61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package parameter
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestIntOrStringSupportedValues(t *testing.T) {
|
|
//valueStr := "{LEAST(DBInstanceClassMemory/1048576*128, 262144)}"
|
|
//valueStr := "{DBInstanceClassMemory*3/4}"
|
|
valueStr := "{GREATEST(DBInstanceClassMemory/1048576/128, 262144)}"
|
|
|
|
memory := 1024 * 1024 * 1024 * 4
|
|
cpu := 2
|
|
storage := 1024 * 1024 * 1024
|
|
|
|
r := strings.NewReplacer("{", "", "}", "", "(", "", ")", "", " ", "")
|
|
valueStr = r.Replace(valueStr)
|
|
|
|
if strings.Contains(valueStr, "DBInstanceClassMemory") {
|
|
valueStr = strings.Replace(valueStr, "DBInstanceClassMemory", strconv.Itoa(memory), -1)
|
|
} else if strings.Contains(valueStr, "DBInstanceClassCPU") {
|
|
valueStr = strings.Replace(valueStr, "DBInstanceClassCPU", strconv.Itoa(cpu), -1)
|
|
} else if strings.Contains(valueStr, "AllocatedStorage") {
|
|
valueStr = strings.Replace(valueStr, "AllocatedStorage", strconv.Itoa(storage), -1)
|
|
} else {
|
|
panic(fmt.Errorf("error format"))
|
|
}
|
|
|
|
numsCalculate := strings.Split(valueStr, ",")
|
|
|
|
var result int
|
|
var err error
|
|
if len(numsCalculate) > 1 {
|
|
exists := false
|
|
for k, v := range funcs {
|
|
if strings.Contains(valueStr, k) {
|
|
nums := make([]int, 0)
|
|
for _, numStr := range numsCalculate {
|
|
nums = append(nums, calculate(strings.ReplaceAll(numStr, k, "")))
|
|
}
|
|
result, err = v.(func([]int) (int, error))(nums)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
exists = true
|
|
}
|
|
}
|
|
if !exists {
|
|
panic(fmt.Errorf("error format"))
|
|
}
|
|
} else {
|
|
result = calculate(numsCalculate[0])
|
|
}
|
|
|
|
fmt.Println("result: ", result)
|
|
|
|
}
|