/Godeps/_workspace/src/github.com/rackspace/gophercloud/acceptance/openstack/compute/v2/keypairs_test.go
Go | 74 lines | 57 code | 16 blank | 1 comment | 4 complexity | 11ce6788e0b28bb6015e71948861d6d3 MD5 | raw file
1// +build acceptance
2
3package v2
4
5import (
6 "crypto/rand"
7 "crypto/rsa"
8 "testing"
9
10 "github.com/rackspace/gophercloud/acceptance/tools"
11 "github.com/rackspace/gophercloud/openstack/compute/v2/extensions/keypairs"
12 "github.com/rackspace/gophercloud/openstack/compute/v2/servers"
13 th "github.com/rackspace/gophercloud/testhelper"
14
15 "code.google.com/p/go.crypto/ssh"
16)
17
18const keyName = "gophercloud_test_key_pair"
19
20func TestCreateServerWithKeyPair(t *testing.T) {
21 client, err := newClient()
22 th.AssertNoErr(t, err)
23
24 if testing.Short() {
25 t.Skip("Skipping test that requires server creation in short mode.")
26 }
27
28 privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
29 publicKey := privateKey.PublicKey
30 pub, err := ssh.NewPublicKey(&publicKey)
31 th.AssertNoErr(t, err)
32 pubBytes := ssh.MarshalAuthorizedKey(pub)
33 pk := string(pubBytes)
34
35 kp, err := keypairs.Create(client, keypairs.CreateOpts{
36 Name: keyName,
37 PublicKey: pk,
38 }).Extract()
39 th.AssertNoErr(t, err)
40 t.Logf("Created key pair: %s\n", kp)
41
42 choices, err := ComputeChoicesFromEnv()
43 th.AssertNoErr(t, err)
44
45 name := tools.RandomString("Gophercloud-", 8)
46 t.Logf("Creating server [%s] with key pair.", name)
47
48 serverCreateOpts := servers.CreateOpts{
49 Name: name,
50 FlavorRef: choices.FlavorID,
51 ImageRef: choices.ImageID,
52 }
53
54 server, err := servers.Create(client, keypairs.CreateOptsExt{
55 serverCreateOpts,
56 keyName,
57 }).Extract()
58 th.AssertNoErr(t, err)
59 defer servers.Delete(client, server.ID)
60 if err = waitForStatus(client, server, "ACTIVE"); err != nil {
61 t.Fatalf("Unable to wait for server: %v", err)
62 }
63
64 server, err = servers.Get(client, server.ID).Extract()
65 t.Logf("Created server: %+v\n", server)
66 th.AssertNoErr(t, err)
67 th.AssertEquals(t, server.KeyName, keyName)
68
69 t.Logf("Deleting key pair [%s]...", kp.Name)
70 err = keypairs.Delete(client, keyName).ExtractErr()
71 th.AssertNoErr(t, err)
72
73 t.Logf("Deleting server [%s]...", name)
74}