1111# under the License.
1212
1313import time
14- import uuid
1514
15+ from tempest_lib .common .utils import data_utils
1616import testtools
1717
18- from functional .common import exceptions
1918from functional .common import test
2019
2120
2221class 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 + "\n a='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