1111# under the License.
1212
1313import time
14- import uuid
1514
15+ from tempest_lib .common .utils import data_utils
1616import testtools
1717
1818from functional .common import test
1919from tempest_lib import exceptions
2020
2121
2222class 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'
23+ """Functional tests for openstack server commands."""
3024
3125 @classmethod
3226 def get_flavor (cls ):
@@ -52,99 +46,196 @@ def get_network(cls):
5246 idx = int (len (ray ) / 2 )
5347 return ' --nic net-id=' + ray [idx ]
5448
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 )
49+ def server_create (self , name = None ):
50+ """Create server. Add cleanup."""
51+ name = name or data_utils .rand_uuid ()
52+ opts = self .get_show_opts (self .FIELDS )
53+ flavor = self .get_flavor ()
54+ image = self .get_image ()
55+ network = self .get_network ()
56+ raw_output = self .openstack ('--debug server create --flavor ' +
57+ flavor +
58+ ' --image ' + image + network + ' ' +
59+ name + opts )
60+ if not raw_output :
61+ self .fail ('Server has not been created!' )
62+ self .addCleanup (self .server_delete , name )
6663
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 )
64+ def server_list (self , params = []):
65+ """List servers."""
66+ opts = self .get_list_opts (params )
67+ return self .openstack ('server list' + opts )
68+
69+ def server_delete (self , name ):
70+ """Delete server by name."""
71+ self .openstack ('server delete ' + name )
72+
73+ def setUp (self ):
74+ """Set necessary variables and create server."""
75+ super (ServerTests , self ).setUp ()
76+ self .NAME = data_utils .rand_name ('TestServer' )
77+ self .OTHER_NAME = data_utils .rand_name ('TestServer' )
78+ self .HEADERS = ['"Name"' ]
79+ self .FIELDS = ['name' ]
80+ self .IP_POOL = 'public'
81+ self .server_create (self .NAME )
82+
83+ def test_server_rename (self ):
84+ """Test server rename command.
85+
86+ Test steps:
87+ 1) Boot server in setUp
88+ 2) Rename server
89+ 3) Check output
90+ 4) Rename server back to original name
91+ """
92+ raw_output = self .openstack ('server set --name ' + self .OTHER_NAME +
93+ ' ' + self .NAME )
94+ self .assertOutput ("" , raw_output )
95+ self .assertNotIn (self .NAME , self .server_list (['Name' ]))
96+ self .assertIn (self .OTHER_NAME , self .server_list (['Name' ]))
97+ self .openstack ('server set --name ' + self .NAME + ' ' +
98+ self .OTHER_NAME )
7699
77100 def test_server_list (self ):
101+ """Test server list command.
102+
103+ Test steps:
104+ 1) Boot server in setUp
105+ 2) List servers
106+ 3) Check output
107+ """
78108 opts = self .get_list_opts (self .HEADERS )
79109 raw_output = self .openstack ('server list' + opts )
80110 self .assertIn (self .NAME , raw_output )
81111
82112 def test_server_show (self ):
113+ """Test server show command.
114+
115+ Test steps:
116+ 1) Boot server in setUp
117+ 2) Show server
118+ 3) Check output
119+ """
83120 opts = self .get_show_opts (self .FIELDS )
84121 raw_output = self .openstack ('server show ' + self .NAME + opts )
85122 self .assertEqual (self .NAME + "\n " , raw_output )
86123
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 )
124+ def test_server_metadata (self ):
125+ """Test command to set server metadata.
102126
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 )
127+ Test steps:
128+ 1) Boot server in setUp
129+ 2) Set properties for server
130+ 3) Check server properties in server show output
131+ """
132+ self .wait_for_status ("ACTIVE" )
108133 # metadata
109134 raw_output = self .openstack (
110135 'server set --property a=b --property c=d ' + self .NAME )
111136 opts = self .get_show_opts (["name" , "properties" ])
112137 raw_output = self .openstack ('server show ' + self .NAME + opts )
113138 self .assertEqual (self .NAME + "\n a='b', c='d'\n " , raw_output )
139+
140+ def test_server_suspend_resume (self ):
141+ """Test server suspend and resume commands.
142+
143+ Test steps:
144+ 1) Boot server in setUp
145+ 2) Suspend server
146+ 3) Check for SUSPENDED server status
147+ 4) Resume server
148+ 5) Check for ACTIVE server status
149+ """
150+ self .wait_for_status ("ACTIVE" )
114151 # suspend
115152 raw_output = self .openstack ('server suspend ' + self .NAME )
116153 self .assertEqual ("" , raw_output )
117- self .wait_for ("SUSPENDED" )
154+ self .wait_for_status ("SUSPENDED" )
118155 # resume
119156 raw_output = self .openstack ('server resume ' + self .NAME )
120157 self .assertEqual ("" , raw_output )
121- self .wait_for ("ACTIVE" )
158+ self .wait_for_status ("ACTIVE" )
159+
160+ def test_server_lock_unlock (self ):
161+ """Test server lock and unlock commands.
162+
163+ Test steps:
164+ 1) Boot server in setUp
165+ 2) Lock server
166+ 3) Check output
167+ 4) Unlock server
168+ 5) Check output
169+ """
170+ self .wait_for_status ("ACTIVE" )
122171 # lock
123172 raw_output = self .openstack ('server lock ' + self .NAME )
124173 self .assertEqual ("" , raw_output )
125174 # unlock
126175 raw_output = self .openstack ('server unlock ' + self .NAME )
127176 self .assertEqual ("" , raw_output )
177+
178+ def test_server_pause_unpause (self ):
179+ """Test server pause and unpause commands.
180+
181+ Test steps:
182+ 1) Boot server in setUp
183+ 2) Pause server
184+ 3) Check for PAUSED server status
185+ 4) Unpause server
186+ 5) Check for ACTIVE server status
187+ """
188+ self .wait_for_status ("ACTIVE" )
128189 # pause
129190 raw_output = self .openstack ('server pause ' + self .NAME )
130191 self .assertEqual ("" , raw_output )
131- self .wait_for ("PAUSED" )
192+ self .wait_for_status ("PAUSED" )
132193 # unpause
133194 raw_output = self .openstack ('server unpause ' + self .NAME )
134195 self .assertEqual ("" , raw_output )
135- self .wait_for ("ACTIVE" )
196+ self .wait_for_status ("ACTIVE" )
197+
198+ def test_server_rescue_unrescue (self ):
199+ """Test server rescue and unrescue commands.
200+
201+ Test steps:
202+ 1) Boot server in setUp
203+ 2) Rescue server
204+ 3) Check for RESCUE server status
205+ 4) Unrescue server
206+ 5) Check for ACTIVE server status
207+ """
208+ self .wait_for_status ("ACTIVE" )
136209 # rescue
137210 opts = self .get_show_opts (["adminPass" ])
138211 raw_output = self .openstack ('server rescue ' + self .NAME + opts )
139212 self .assertNotEqual ("" , raw_output )
140- self .wait_for ("RESCUE" )
213+ self .wait_for_status ("RESCUE" )
141214 # unrescue
142215 raw_output = self .openstack ('server unrescue ' + self .NAME )
143216 self .assertEqual ("" , raw_output )
144- self .wait_for ("ACTIVE" )
217+ self .wait_for_status ("ACTIVE" )
218+
219+ @testtools .skip ('this test needs to be re-worked completely' )
220+ def test_server_attach_detach_floating_ip (self ):
221+ """Test commands to attach and detach floating IP for server.
222+
223+ Test steps:
224+ 1) Boot server in setUp
225+ 2) Create floating IP
226+ 3) Add floating IP to server
227+ 4) Check for floating IP in server show output
228+ 5) Remove floating IP from server
229+ 6) Check that floating IP is not in server show output
230+ 7) Delete floating IP
231+ 8) Check output
232+ """
233+ self .wait_for_status ("ACTIVE" )
145234 # attach ip
146235 opts = self .get_show_opts (["id" , "ip" ])
147- raw_output = self .openstack ('ip floating create ' + self .IP_POOL +
236+ raw_output = self .openstack ('ip floating create '
237+ '--debug ' +
238+ self .IP_POOL +
148239 opts )
149240 ipid , ip , rol = tuple (raw_output .split ('\n ' ))
150241 self .assertNotEqual ("" , ipid )
@@ -153,6 +244,7 @@ def test_server_up_test(self):
153244 self .assertEqual ("" , raw_output )
154245 raw_output = self .openstack ('server show ' + self .NAME )
155246 self .assertIn (ip , raw_output )
247+
156248 # detach ip
157249 raw_output = self .openstack ('ip floating remove ' + ip + ' ' +
158250 self .NAME )
@@ -161,7 +253,40 @@ def test_server_up_test(self):
161253 self .assertNotIn (ip , raw_output )
162254 raw_output = self .openstack ('ip floating delete ' + ipid )
163255 self .assertEqual ("" , raw_output )
256+
257+ def test_server_reboot (self ):
258+ """Test server reboot command.
259+
260+ Test steps:
261+ 1) Boot server in setUp
262+ 2) Reboot server
263+ 3) Check for ACTIVE server status
264+ """
265+ self .wait_for_status ("ACTIVE" )
164266 # reboot
165267 raw_output = self .openstack ('server reboot ' + self .NAME )
166268 self .assertEqual ("" , raw_output )
167- self .wait_for ("ACTIVE" )
269+ self .wait_for_status ("ACTIVE" )
270+
271+ def wait_for_status (self , expected_status = 'ACTIVE' , wait = 600 , interval = 30 ):
272+ """Wait until server reaches expected status."""
273+ # TODO(thowe): Add a server wait command to osc
274+ failures = ['ERROR' ]
275+ total_sleep = 0
276+ opts = self .get_show_opts (['status' ])
277+ while total_sleep < wait :
278+ status = self .openstack ('server show ' + self .NAME + opts )
279+ status = status .rstrip ()
280+ print ('Waiting for {} current status: {}' .format (expected_status ,
281+ status ))
282+ if status == expected_status :
283+ break
284+ self .assertNotIn (status , failures )
285+ time .sleep (interval )
286+ total_sleep += interval
287+
288+ status = self .openstack ('server show ' + self .NAME + opts )
289+ status = status .rstrip ()
290+ self .assertEqual (status , expected_status )
291+ # give it a little bit more time
292+ time .sleep (5 )
0 commit comments