blob: baedbb69a0951abe47cb6f9c38004a15545420a8 [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
11 @classmethod
12 def setUpClass(cls):
13 cls.os = openstack.Manager()
14 cls.client = cls.os.keypairs_client
15 cls.config = cls.os.config
16
17 @attr(type='smoke')
18 def test_keypairs_create_list_delete(self):
19 """Keypairs created should be available in the response list"""
20 #Create 3 keypairs
21 key_list = list()
22 for i in range(3):
23 k_name = rand_name('keypair-')
24 resp, keypair = self.client.create_keypair(k_name)
25 #Need to pop these keys so that our compare doesn't fail later,
26 #as the keypair dicts from list API doesn't have them.
27 keypair.pop('private_key')
28 keypair.pop('user_id')
29 self.assertEqual(200, resp.status)
30 key_list.append(keypair)
31 #Fetch all keypairs and verify the list
32 #has all created keypairs
33 resp, fetched_list = self.client.list_keypairs()
34 self.assertEqual(200, resp.status)
35 #We need to remove the extra 'keypair' element in the
36 #returned dict. See comment in keypairs_client.list_keypairs()
37 new_list = list()
38 for keypair in fetched_list:
39 new_list.append(keypair['keypair'])
40 fetched_list = new_list
41 #Now check if all the created keypairs are in the fetched list
42 missing_kps = [kp for kp in key_list if kp not in fetched_list]
43 self.assertFalse(missing_kps,
44 "Failed to find keypairs %s in fetched list"
45 % ', '.join(m_key['name'] for m_key in missing_kps))
46 #Delete all the keypairs created
47 for keypair in key_list:
48 resp, _ = self.client.delete_keypair(keypair['name'])
49 self.assertEqual(202, resp.status)
50
51 @attr(type='smoke')
52 def test_keypair_create_delete(self):
53 """Keypair should be created, verified and deleted"""
54 k_name = rand_name('keypair-')
55 resp, keypair = self.client.create_keypair(k_name)
56 self.assertEqual(200, resp.status)
57 private_key = keypair['private_key']
58 key_name = keypair['name']
59 self.assertEqual(key_name, k_name,
60 "The created keypair name is not equal to the requested name")
61 self.assertTrue(private_key is not None,
62 "Field private_key is empty or not found.")
63 resp, _ = self.client.delete_keypair(k_name)
64 self.assertEqual(202, resp.status)
65
66 @attr(type='smoke')
kavan-patil2eb350f2012-01-19 11:17:26 +000067 def test_keypair_create_with_pub_key(self):
68 """Keypair should be created with a given public key"""
69 k_name = rand_name('keypair-')
70 pub_key = ("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs"
71 "Ne3/1ILNCqFyfYWDeTKLD6jEXC2OQHLmietMWW+/vd"
72 "aZq7KZEwO0jhglaFjU1mpqq4Gz5RX156sCTNM9vRbw"
73 "KAxfsdF9laBYVsex3m3Wmui3uYrKyumsoJn2g9GNnG1P"
74 "I1mrVjZ61i0GY3khna+wzlTpCCmy5HNlrmbj3XLqBUpip"
75 "TOXmsnr4sChzC53KCd8LXuwc1i/CZPvF+3XipvAgFSE53pCt"
76 "LOeB1kYMOBaiUPLQTWXR3JpckqFIQwhIH0zoHlJvZE8hh90"
77 "XcPojYN56tI0OlrGqojbediJYD0rUsJu4weZpbn8vilb3JuDY+jws"
78 "snSA8wzBx3A/8y9Pp1B nova@ubuntu")
79 resp, keypair = self.client.create_keypair(k_name, pub_key)
80 self.assertEqual(200, resp.status)
81 self.assertFalse('private_key' in keypair,
82 "Field private_key is not empty!")
83 key_name = keypair['name']
84 self.assertEqual(key_name, k_name,
85 "The created keypair name is not equal to the requested name!")
86 resp, _ = self.client.delete_keypair(k_name)
87 self.assertEqual(202, resp.status)
88
89 @attr(type='negative')
90 def test_keypair_create_with_invalid_pub_key(self):
91 """Keypair should not be created with a non RSA public key"""
92 k_name = rand_name('keypair-')
93 pub_key = "ssh-rsa JUNK nova@ubuntu"
David Kranz5a23d862012-02-14 09:48:55 -050094 try:
95 resp, _ = self.client.create_keypair(k_name, pub_key)
96 except exceptions.BadRequest:
97 pass
98 else:
99 self.fail('Expected BadRequest for invalid public key')
kavan-patil2eb350f2012-01-19 11:17:26 +0000100
101 @attr(type='negative')
102 def test_keypair_delete_nonexistant_key(self):
103 """Non-existant key deletion should throw a proper error"""
104 k_name = rand_name("keypair-non-existant-")
David Kranz5a23d862012-02-14 09:48:55 -0500105 try:
106 resp, _ = self.client.delete_keypair(k_name)
107 except exceptions.NotFound:
108 pass
109 else:
110 self.fail('nonexistent key')
kavan-patil2eb350f2012-01-19 11:17:26 +0000111
112 @attr(type='negative')
113 def test_create_keypair_with_duplicate_name(self):
114 """Keypairs with duplicate names should not be created"""
115 k_name = rand_name('keypair-')
116 resp, _ = self.client.create_keypair(k_name)
117 self.assertEqual(200, resp.status)
118 #Now try the same keyname to ceate another key
David Kranz5a23d862012-02-14 09:48:55 -0500119 try:
120 resp, _ = self.client.create_keypair(k_name)
121 #Expect a HTTP 409 Conflict Error
122 except exceptions.Duplicate:
123 pass
124 else:
125 self.fail('duplicate name')
126 resp, _ = self.client.delete_keypair(k_name)
127 self.assertEqual(202, resp.status)
kavan-patil2eb350f2012-01-19 11:17:26 +0000128
129 @attr(type='negative')
130 def test_create_keypair_with_empty_name_string(self):
131 """Keypairs with name being an empty string should not be created"""
David Kranz5a23d862012-02-14 09:48:55 -0500132 try:
133 resp, _ = self.client.create_keypair('')
134 except exceptions.BadRequest:
135 pass
136 else:
137 self.fail('empty string')
kavan-patil2eb350f2012-01-19 11:17:26 +0000138
139 @attr(type='negative')
140 def test_create_keypair_with_long_keynames(self):
141 """Keypairs with name longer than 255 chars should not be created"""
142 k_name = 'keypair-'.ljust(260, '0')
David Kranz5a23d862012-02-14 09:48:55 -0500143 try:
144 resp, _ = self.client.create_keypair(k_name)
145 except exceptions.BadRequest:
146 pass
147 else:
148 self.fail('too long')