1010# License for the specific language governing permissions and limitations
1111# under the License.
1212
13+ import time
1314import uuid
1415
1516from functional .common import test
@@ -19,6 +20,7 @@ class ServerTests(test.TestCase):
1920 """Functional tests for server. """
2021
2122 NAME = uuid .uuid4 ().hex
23+ OTHER_NAME = uuid .uuid4 ().hex
2224 HEADERS = ['"Name"' ]
2325 FIELDS = ['name' ]
2426
@@ -41,7 +43,12 @@ def setUpClass(cls):
4143
4244 @classmethod
4345 def tearDownClass (cls ):
44- raw_output = cls .openstack ('server delete ' + cls .NAME )
46+ # Rename test
47+ raw_output = cls .openstack ('server set --name ' + cls .OTHER_NAME +
48+ ' ' + cls .NAME )
49+ cls .assertOutput ("" , raw_output )
50+ # Delete test
51+ raw_output = cls .openstack ('server delete ' + cls .OTHER_NAME )
4552 cls .assertOutput ('' , raw_output )
4653
4754 def test_server_list (self ):
@@ -53,3 +60,63 @@ def test_server_show(self):
5360 opts = self .get_show_opts (self .FIELDS )
5461 raw_output = self .openstack ('server show ' + self .NAME + opts )
5562 self .assertEqual (self .NAME + "\n " , raw_output )
63+
64+ def wait_for (self , desired , wait = 120 , interval = 5 , failures = ['ERROR' ]):
65+ # TODO(thowe): Add a server wait command to osc
66+ status = "notset"
67+ wait = 120
68+ interval = 5
69+ total_sleep = 0
70+ opts = self .get_show_opts (['status' ])
71+ while total_sleep < wait :
72+ status = self .openstack ('server show ' + self .NAME + opts )
73+ status = status .rstrip ()
74+ print ('Waiting for {} current status: {}' .format (desired , status ))
75+ if status == desired :
76+ break
77+ self .assertNotIn (status , failures )
78+ time .sleep (interval )
79+ total_sleep += interval
80+ self .assertEqual (desired , status )
81+
82+ def test_server_up_test (self ):
83+ self .wait_for ("ACTIVE" )
84+ # give it a little bit more time
85+ time .sleep (5 )
86+ # metadata
87+ raw_output = self .openstack (
88+ 'server set --property a=b --property c=d ' + self .NAME )
89+ opts = self .get_show_opts (["name" , "properties" ])
90+ raw_output = self .openstack ('server show ' + self .NAME + opts )
91+ self .assertEqual (self .NAME + "\n a='b', c='d'\n " , raw_output )
92+ # suspend
93+ raw_output = self .openstack ('server suspend ' + self .NAME )
94+ self .assertEqual ("" , raw_output )
95+ self .wait_for ("SUSPENDED" )
96+ # resume
97+ raw_output = self .openstack ('server resume ' + self .NAME )
98+ self .assertEqual ("" , raw_output )
99+ self .wait_for ("ACTIVE" )
100+ # lock
101+ raw_output = self .openstack ('server lock ' + self .NAME )
102+ self .assertEqual ("" , raw_output )
103+ # unlock
104+ raw_output = self .openstack ('server unlock ' + self .NAME )
105+ self .assertEqual ("" , raw_output )
106+ # pause
107+ raw_output = self .openstack ('server pause ' + self .NAME )
108+ self .assertEqual ("" , raw_output )
109+ self .wait_for ("PAUSED" )
110+ # unpause
111+ raw_output = self .openstack ('server unpause ' + self .NAME )
112+ self .assertEqual ("" , raw_output )
113+ self .wait_for ("ACTIVE" )
114+ # rescue
115+ opts = self .get_show_opts (["adminPass" ])
116+ raw_output = self .openstack ('server rescue ' + self .NAME + opts )
117+ self .assertNotEqual ("" , raw_output )
118+ self .wait_for ("RESCUE" )
119+ # unrescue
120+ raw_output = self .openstack ('server unrescue ' + self .NAME )
121+ self .assertEqual ("" , raw_output )
122+ self .wait_for ("ACTIVE" )
0 commit comments