blob: 53fcd0bbdd73c84a7c73a65eff231b1fd2ac7269 [file] [log] [blame]
kavan-patil2eb350f2012-01-19 11:17:26 +00001from nose.plugins.attrib import attr
2import unittest2 as unittest
3from tempest import openstack
4from tempest.common.utils.data_utils import rand_name
David Kranz5a23d862012-02-14 09:48:55 -05005import tempest.config
6from tempest import exceptions
kavan-patil2eb350f2012-01-19 11:17:26 +00007
8
9class KeyPairsTest(unittest.TestCase):
10
David Kranz5a23d862012-02-14 09:48:55 -050011 release = tempest.config.TempestConfig().env.release_name
12
kavan-patil2eb350f2012-01-19 11:17:26 +000013 @classmethod
14 def setUpClass(cls):
15 cls.os = openstack.Manager()
16 cls.client = cls.os.keypairs_client
17 cls.config = cls.os.config
18
19 @attr(type='smoke')
20 def test_keypairs_create_list_delete(self):
21 """Keypairs created should be available in the response list"""
22 #Create 3 keypairs
23 key_list = list()
24 for i in range(3):
25 k_name = rand_name('keypair-')
26 resp, keypair = self.client.create_keypair(k_name)
27 #Need to pop these keys so that our compare doesn't fail later,
28 #as the keypair dicts from list API doesn't have them.
29 keypair.pop('private_key')
30 keypair.pop('user_id')
31 self.assertEqual(200, resp.status)
32 key_list.append(keypair)
33 #Fetch all keypairs and verify the list
34 #has all created keypairs
35 resp, fetched_list = self.client.list_keypairs()
36 self.assertEqual(200, resp.status)
37 #We need to remove the extra 'keypair' element in the
38 #returned dict. See comment in keypairs_client.list_keypairs()
39 new_list = list()
40 for keypair in fetched_list:
41 new_list.append(keypair['keypair'])
42 fetched_list = new_list
43 #Now check if all the created keypairs are in the fetched list
44 missing_kps = [kp for kp in key_list if kp not in fetched_list]
45 self.assertFalse(missing_kps,
46 "Failed to find keypairs %s in fetched list"
47 % ', '.join(m_key['name'] for m_key in missing_kps))
48 #Delete all the keypairs created
49 for keypair in key_list:
50 resp, _ = self.client.delete_keypair(keypair['name'])
51 self.assertEqual(202, resp.status)
52
53 @attr(type='smoke')
54 def test_keypair_create_delete(self):
55 """Keypair should be created, verified and deleted"""
56 k_name = rand_name('keypair-')
57 resp, keypair = self.client.create_keypair(k_name)
58 self.assertEqual(200, resp.status)
59 private_key = keypair['private_key']
60 key_name = keypair['name']
61 self.assertEqual(key_name, k_name,
62 "The created keypair name is not equal to the requested name")
63 self.assertTrue(private_key is not None,
64 "Field private_key is empty or not found.")
65 resp, _ = self.client.delete_keypair(k_name)
66 self.assertEqual(202, resp.status)
67
68 @attr(type='smoke')
kavan-patil2eb350f2012-01-19 11:17:26 +000069 def test_keypair_create_with_pub_key(self):
70 """Keypair should be created with a given public key"""
71 k_name = rand_name('keypair-')
72 pub_key = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs"
73 "Ne3/1ILNCqFyfYWDeTKLD6jEXC2OQHLmietMWW+/vd"
74 "aZq7KZEwO0jhglaFjU1mpqq4Gz5RX156sCTNM9vRbw"
75 "KAxfsdF9laBYVsex3m3Wmui3uYrKyumsoJn2g9GNnG1P"
76 "I1mrVjZ61i0GY3khna+wzlTpCCmy5HNlrmbj3XLqBUpip"
77 "TOXmsnr4sChzC53KCd8LXuwc1i/CZPvF+3XipvAgFSE53pCt"
78 "LOeB1kYMOBaiUPLQTWXR3JpckqFIQwhIH0zoHlJvZE8hh90"
79 "XcPojYN56tI0OlrGqojbediJYD0rUsJu4weZpbn8vilb3JuDY+jws"
80 "snSA8wzBx3A/8y9Pp1B nova@ubuntu")
81 resp, keypair = self.client.create_keypair(k_name, pub_key)
82 self.assertEqual(200, resp.status)
83 self.assertFalse('private_key' in keypair,
84 "Field private_key is not empty!")
85 key_name = keypair['name']
86 self.assertEqual(key_name, k_name,
87 "The created keypair name is not equal to the requested name!")
88 resp, _ = self.client.delete_keypair(k_name)
89 self.assertEqual(202, resp.status)
90
91 @attr(type='negative')
92 def test_keypair_create_with_invalid_pub_key(self):
93 """Keypair should not be created with a non RSA public key"""
94 k_name = rand_name('keypair-')
95 pub_key = "ssh-rsa JUNK nova@ubuntu"
David Kranz5a23d862012-02-14 09:48:55 -050096 try:
97 resp, _ = self.client.create_keypair(k_name, pub_key)
98 except exceptions.BadRequest:
99 pass
100 else:
101 self.fail('Expected BadRequest for invalid public key')
kavan-patil2eb350f2012-01-19 11:17:26 +0000102
103 @attr(type='negative')
104 def test_keypair_delete_nonexistant_key(self):
105 """Non-existant key deletion should throw a proper error"""
106 k_name = rand_name("keypair-non-existant-")
David Kranz5a23d862012-02-14 09:48:55 -0500107 try:
108 resp, _ = self.client.delete_keypair(k_name)
109 except exceptions.NotFound:
110 pass
111 else:
112 self.fail('nonexistent key')
kavan-patil2eb350f2012-01-19 11:17:26 +0000113
114 @attr(type='negative')
115 def test_create_keypair_with_duplicate_name(self):
116 """Keypairs with duplicate names should not be created"""
117 k_name = rand_name('keypair-')
118 resp, _ = self.client.create_keypair(k_name)
119 self.assertEqual(200, resp.status)
120 #Now try the same keyname to ceate another key
David Kranz5a23d862012-02-14 09:48:55 -0500121 try:
122 resp, _ = self.client.create_keypair(k_name)
123 #Expect a HTTP 409 Conflict Error
124 except exceptions.Duplicate:
125 pass
126 else:
127 self.fail('duplicate name')
128 resp, _ = self.client.delete_keypair(k_name)
129 self.assertEqual(202, resp.status)
kavan-patil2eb350f2012-01-19 11:17:26 +0000130
131 @attr(type='negative')
132 def test_create_keypair_with_empty_name_string(self):
133 """Keypairs with name being an empty string should not be created"""
David Kranz5a23d862012-02-14 09:48:55 -0500134 try:
135 resp, _ = self.client.create_keypair('')
136 except exceptions.BadRequest:
137 pass
138 else:
139 self.fail('empty string')
kavan-patil2eb350f2012-01-19 11:17:26 +0000140
David Kranz5a23d862012-02-14 09:48:55 -0500141 @unittest.skipIf(release == 'diablo', 'bug in diablo')
kavan-patil2eb350f2012-01-19 11:17:26 +0000142 @attr(type='negative')
143 def test_create_keypair_with_long_keynames(self):
144 """Keypairs with name longer than 255 chars should not be created"""
145 k_name = 'keypair-'.ljust(260, '0')
David Kranz5a23d862012-02-14 09:48:55 -0500146 try:
147 resp, _ = self.client.create_keypair(k_name)
148 except exceptions.BadRequest:
149 pass
150 else:
151 self.fail('too long')