sqlboiler/templates_test/singleton/helper_funcs.tpl
2016-07-09 02:39:36 +10:00

60 lines
1.3 KiB
Smarty

var dbNameRand *rand.Rand
func initDBNameRand(input string) {
sum := md5.Sum([]byte(input))
var sumInt string
for _, v := range sum {
sumInt = sumInt + strconv.Itoa(int(v))
}
// Cut integer to 18 digits to ensure no int64 overflow.
sumInt = sumInt[:18]
sumTmp := sumInt
for i, v := range sumInt {
if v == '0' {
sumTmp = sumInt[i+1:]
continue
}
break
}
sumInt = sumTmp
randSeed, err := strconv.ParseInt(sumInt, 0, 64)
if err != nil {
fmt.Printf("Unable to parse sumInt: %s", err)
os.Exit(-1)
}
dbNameRand = rand.New(rand.NewSource(randSeed))
}
var alphabetChars = "abcdefghijklmnopqrstuvwxyz"
func randStr(length int) string {
c := len(alphabetChars)
output := make([]rune, length)
for i := 0; i < length; i++ {
output[i] = rune(alphabetChars[dbNameRand.Intn(c)])
}
return string(output)
}
// getDBNameHash takes a database name in, and generates
// a random string using the database name as the rand Seed.
// getDBNameHash is used to generate unique test database names.
func getDBNameHash(input string) string {
initDBNameRand(input)
return randStr(40)
}
// byteSliceEqual calls bytes.Equal to check that two
// byte slices are equal. bytes.Equal is not used directly
// to avoid an unecessary conditional type import.
func byteSliceEqual(a []byte, b []byte) bool {
return bytes.Equal(a, b)
}