Skip to content

Commit 0e8c78c

Browse files
kromanenkoSteve Martinelli
authored andcommitted
Update tests for server
Make testcases separate instances of test class. Use setUp with addCleanup methods for every test case. Add more descriptive docstrings for tests. Closes-Bug: #1483422 Partial-Bug: #1566962 Change-Id: I1a16b5bad1dafd19fd7dc94794c0bd4587b7f516
1 parent 4b4349e commit 0e8c78c

1 file changed

Lines changed: 181 additions & 57 deletions

File tree

functional/tests/compute/v2/test_server.py

Lines changed: 181 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,15 @@
1111
# under the License.
1212

1313
import time
14-
import uuid
1514

15+
from tempest_lib.common.utils import data_utils
1616
import testtools
1717

18-
from functional.common import exceptions
1918
from functional.common import test
2019

2120

2221
class ServerTests(test.TestCase):
23-
"""Functional tests for server."""
24-
25-
NAME = uuid.uuid4().hex
26-
OTHER_NAME = uuid.uuid4().hex
27-
HEADERS = ['"Name"']
28-
FIELDS = ['name']
29-
IP_POOL = 'public'
22+
"""Functional tests for openstack server commands."""
3023

3124
@classmethod
3225
def get_flavor(cls):
@@ -52,99 +45,196 @@ def get_network(cls):
5245
idx = int(len(ray) / 2)
5346
return ' --nic net-id=' + ray[idx]
5447

55-
@classmethod
56-
def setUpClass(cls):
57-
opts = cls.get_show_opts(cls.FIELDS)
58-
flavor = cls.get_flavor()
59-
image = cls.get_image()
60-
network = cls.get_network()
61-
raw_output = cls.openstack('server create --flavor ' + flavor +
62-
' --image ' + image + network + ' ' +
63-
cls.NAME + opts)
64-
expected = cls.NAME + '\n'
65-
cls.assertOutput(expected, raw_output)
48+
def server_create(self, name=None):
49+
"""Create server. Add cleanup."""
50+
name = name or data_utils.rand_uuid()
51+
opts = self.get_show_opts(self.FIELDS)
52+
flavor = self.get_flavor()
53+
image = self.get_image()
54+
network = self.get_network()
55+
raw_output = self.openstack('--debug server create --flavor ' +
56+
flavor +
57+
' --image ' + image + network + ' ' +
58+
name + opts)
59+
if not raw_output:
60+
self.fail('Server has not been created!')
61+
self.addCleanup(self.server_delete, name)
6662

67-
@classmethod
68-
def tearDownClass(cls):
69-
# Rename test
70-
raw_output = cls.openstack('server set --name ' + cls.OTHER_NAME +
71-
' ' + cls.NAME)
72-
cls.assertOutput("", raw_output)
73-
# Delete test
74-
raw_output = cls.openstack('server delete ' + cls.OTHER_NAME)
75-
cls.assertOutput('', raw_output)
63+
def server_list(self, params=[]):
64+
"""List servers."""
65+
opts = self.get_list_opts(params)
66+
return self.openstack('server list' + opts)
67+
68+
def server_delete(self, name):
69+
"""Delete server by name."""
70+
self.openstack('server delete ' + name)
71+
72+
def setUp(self):
73+
"""Set necessary variables and create server."""
74+
super(ServerTests, self).setUp()
75+
self.NAME = data_utils.rand_name('TestServer')
76+
self.OTHER_NAME = data_utils.rand_name('TestServer')
77+
self.HEADERS = ['"Name"']
78+
self.FIELDS = ['name']
79+
self.IP_POOL = 'public'
80+
self.server_create(self.NAME)
81+
82+
def test_server_rename(self):
83+
"""Test server rename command.
84+
85+
Test steps:
86+
1) Boot server in setUp
87+
2) Rename server
88+
3) Check output
89+
4) Rename server back to original name
90+
"""
91+
raw_output = self.openstack('server set --name ' + self.OTHER_NAME +
92+
' ' + self.NAME)
93+
self.assertOutput("", raw_output)
94+
self.assertNotIn(self.NAME, self.server_list(['Name']))
95+
self.assertIn(self.OTHER_NAME, self.server_list(['Name']))
96+
self.openstack('server set --name ' + self.NAME + ' ' +
97+
self.OTHER_NAME)
7698

7799
def test_server_list(self):
100+
"""Test server list command.
101+
102+
Test steps:
103+
1) Boot server in setUp
104+
2) List servers
105+
3) Check output
106+
"""
78107
opts = self.get_list_opts(self.HEADERS)
79108
raw_output = self.openstack('server list' + opts)
80109
self.assertIn(self.NAME, raw_output)
81110

82111
def test_server_show(self):
112+
"""Test server show command.
113+
114+
Test steps:
115+
1) Boot server in setUp
116+
2) Show server
117+
3) Check output
118+
"""
83119
opts = self.get_show_opts(self.FIELDS)
84120
raw_output = self.openstack('server show ' + self.NAME + opts)
85121
self.assertEqual(self.NAME + "\n", raw_output)
86122

87-
def wait_for(self, desired, wait=120, interval=5, failures=['ERROR']):
88-
# TODO(thowe): Add a server wait command to osc
89-
status = "notset"
90-
total_sleep = 0
91-
opts = self.get_show_opts(['status'])
92-
while total_sleep < wait:
93-
status = self.openstack('server show ' + self.NAME + opts)
94-
status = status.rstrip()
95-
print('Waiting for {} current status: {}'.format(desired, status))
96-
if status == desired:
97-
break
98-
self.assertNotIn(status, failures)
99-
time.sleep(interval)
100-
total_sleep += interval
101-
self.assertEqual(desired, status)
123+
def test_server_metadata(self):
124+
"""Test command to set server metadata.
102125
103-
@testtools.skip('skipping due to bug 1483422')
104-
def test_server_up_test(self):
105-
self.wait_for("ACTIVE")
106-
# give it a little bit more time
107-
time.sleep(5)
126+
Test steps:
127+
1) Boot server in setUp
128+
2) Set properties for server
129+
3) Check server properties in server show output
130+
"""
131+
self.wait_for_status("ACTIVE")
108132
# metadata
109133
raw_output = self.openstack(
110134
'server set --property a=b --property c=d ' + self.NAME)
111135
opts = self.get_show_opts(["name", "properties"])
112136
raw_output = self.openstack('server show ' + self.NAME + opts)
113137
self.assertEqual(self.NAME + "\na='b', c='d'\n", raw_output)
138+
139+
def test_server_suspend_resume(self):
140+
"""Test server suspend and resume commands.
141+
142+
Test steps:
143+
1) Boot server in setUp
144+
2) Suspend server
145+
3) Check for SUSPENDED server status
146+
4) Resume server
147+
5) Check for ACTIVE server status
148+
"""
149+
self.wait_for_status("ACTIVE")
114150
# suspend
115151
raw_output = self.openstack('server suspend ' + self.NAME)
116152
self.assertEqual("", raw_output)
117-
self.wait_for("SUSPENDED")
153+
self.wait_for_status("SUSPENDED")
118154
# resume
119155
raw_output = self.openstack('server resume ' + self.NAME)
120156
self.assertEqual("", raw_output)
121-
self.wait_for("ACTIVE")
157+
self.wait_for_status("ACTIVE")
158+
159+
def test_server_lock_unlock(self):
160+
"""Test server lock and unlock commands.
161+
162+
Test steps:
163+
1) Boot server in setUp
164+
2) Lock server
165+
3) Check output
166+
4) Unlock server
167+
5) Check output
168+
"""
169+
self.wait_for_status("ACTIVE")
122170
# lock
123171
raw_output = self.openstack('server lock ' + self.NAME)
124172
self.assertEqual("", raw_output)
125173
# unlock
126174
raw_output = self.openstack('server unlock ' + self.NAME)
127175
self.assertEqual("", raw_output)
176+
177+
def test_server_pause_unpause(self):
178+
"""Test server pause and unpause commands.
179+
180+
Test steps:
181+
1) Boot server in setUp
182+
2) Pause server
183+
3) Check for PAUSED server status
184+
4) Unpause server
185+
5) Check for ACTIVE server status
186+
"""
187+
self.wait_for_status("ACTIVE")
128188
# pause
129189
raw_output = self.openstack('server pause ' + self.NAME)
130190
self.assertEqual("", raw_output)
131-
self.wait_for("PAUSED")
191+
self.wait_for_status("PAUSED")
132192
# unpause
133193
raw_output = self.openstack('server unpause ' + self.NAME)
134194
self.assertEqual("", raw_output)
135-
self.wait_for("ACTIVE")
195+
self.wait_for_status("ACTIVE")
196+
197+
def test_server_rescue_unrescue(self):
198+
"""Test server rescue and unrescue commands.
199+
200+
Test steps:
201+
1) Boot server in setUp
202+
2) Rescue server
203+
3) Check for RESCUE server status
204+
4) Unrescue server
205+
5) Check for ACTIVE server status
206+
"""
207+
self.wait_for_status("ACTIVE")
136208
# rescue
137209
opts = self.get_show_opts(["adminPass"])
138210
raw_output = self.openstack('server rescue ' + self.NAME + opts)
139211
self.assertNotEqual("", raw_output)
140-
self.wait_for("RESCUE")
212+
self.wait_for_status("RESCUE")
141213
# unrescue
142214
raw_output = self.openstack('server unrescue ' + self.NAME)
143215
self.assertEqual("", raw_output)
144-
self.wait_for("ACTIVE")
216+
self.wait_for_status("ACTIVE")
217+
218+
@testtools.skip('this test needs to be re-worked completely')
219+
def test_server_attach_detach_floating_ip(self):
220+
"""Test commands to attach and detach floating IP for server.
221+
222+
Test steps:
223+
1) Boot server in setUp
224+
2) Create floating IP
225+
3) Add floating IP to server
226+
4) Check for floating IP in server show output
227+
5) Remove floating IP from server
228+
6) Check that floating IP is not in server show output
229+
7) Delete floating IP
230+
8) Check output
231+
"""
232+
self.wait_for_status("ACTIVE")
145233
# attach ip
146234
opts = self.get_show_opts(["id", "ip"])
147-
raw_output = self.openstack('ip floating create ' + self.IP_POOL +
235+
raw_output = self.openstack('ip floating create '
236+
'--debug ' +
237+
self.IP_POOL +
148238
opts)
149239
ipid, ip, rol = tuple(raw_output.split('\n'))
150240
self.assertNotEqual("", ipid)
@@ -153,6 +243,7 @@ def test_server_up_test(self):
153243
self.assertEqual("", raw_output)
154244
raw_output = self.openstack('server show ' + self.NAME)
155245
self.assertIn(ip, raw_output)
246+
156247
# detach ip
157248
raw_output = self.openstack('ip floating remove ' + ip + ' ' +
158249
self.NAME)
@@ -161,7 +252,40 @@ def test_server_up_test(self):
161252
self.assertNotIn(ip, raw_output)
162253
raw_output = self.openstack('ip floating delete ' + ipid)
163254
self.assertEqual("", raw_output)
255+
256+
def test_server_reboot(self):
257+
"""Test server reboot command.
258+
259+
Test steps:
260+
1) Boot server in setUp
261+
2) Reboot server
262+
3) Check for ACTIVE server status
263+
"""
264+
self.wait_for_status("ACTIVE")
164265
# reboot
165266
raw_output = self.openstack('server reboot ' + self.NAME)
166267
self.assertEqual("", raw_output)
167-
self.wait_for("ACTIVE")
268+
self.wait_for_status("ACTIVE")
269+
270+
def wait_for_status(self, expected_status='ACTIVE', wait=600, interval=30):
271+
"""Wait until server reaches expected status."""
272+
# TODO(thowe): Add a server wait command to osc
273+
failures = ['ERROR']
274+
total_sleep = 0
275+
opts = self.get_show_opts(['status'])
276+
while total_sleep < wait:
277+
status = self.openstack('server show ' + self.NAME + opts)
278+
status = status.rstrip()
279+
print('Waiting for {} current status: {}'.format(expected_status,
280+
status))
281+
if status == expected_status:
282+
break
283+
self.assertNotIn(status, failures)
284+
time.sleep(interval)
285+
total_sleep += interval
286+
287+
status = self.openstack('server show ' + self.NAME + opts)
288+
status = status.rstrip()
289+
self.assertEqual(status, expected_status)
290+
# give it a little bit more time
291+
time.sleep(5)

0 commit comments

Comments
 (0)