15 "golang.org/x/crypto/ssh"
18 // Helpers for generating random tidbits for use in identifiers to prevent
19 // collisions in acceptance tests.
21 // RandInt generates a random integer
24 return rand.New(rand.NewSource(time.Now().UnixNano())).Int()
27 // RandomWithPrefix is used to generate a unique name with a prefix, for
28 // randomizing names in acceptance tests
29 func RandomWithPrefix(name string) string {
31 return fmt.Sprintf("%s-%d", name, rand.New(rand.NewSource(time.Now().UnixNano())).Int())
34 func RandIntRange(min int, max int) int {
36 source := rand.New(rand.NewSource(time.Now().UnixNano()))
39 return int(source.Int31n(int32(rangeMax)))
42 // RandString generates a random alphanumeric string of the length specified
43 func RandString(strlen int) string {
44 return RandStringFromCharSet(strlen, CharSetAlphaNum)
47 // RandStringFromCharSet generates a random string by selecting characters from
48 // the charset provided
49 func RandStringFromCharSet(strlen int, charSet string) string {
51 result := make([]byte, strlen)
52 for i := 0; i < strlen; i++ {
53 result[i] = charSet[rand.Intn(len(charSet))]
58 // RandSSHKeyPair generates a public and private SSH key pair. The public key is
59 // returned in OpenSSH format, and the private key is PEM encoded.
60 func RandSSHKeyPair(comment string) (string, string, error) {
61 privateKey, err := rsa.GenerateKey(crand.Reader, 1024)
66 var privateKeyBuffer bytes.Buffer
67 privateKeyPEM := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)}
68 if err := pem.Encode(bufio.NewWriter(&privateKeyBuffer), privateKeyPEM); err != nil {
72 publicKey, err := ssh.NewPublicKey(&privateKey.PublicKey)
76 keyMaterial := strings.TrimSpace(string(ssh.MarshalAuthorizedKey(publicKey)))
77 return fmt.Sprintf("%s %s", keyMaterial, comment), privateKeyBuffer.String(), nil
80 // Seeds random with current timestamp
82 rand.Seed(time.Now().UTC().UnixNano())
86 // CharSetAlphaNum is the alphanumeric character set for use with
87 // RandStringFromCharSet
88 CharSetAlphaNum = "abcdefghijklmnopqrstuvwxyz012346789"
90 // CharSetAlpha is the alphabetical character set for use with
91 // RandStringFromCharSet
92 CharSetAlpha = "abcdefghijklmnopqrstuvwxyz"