cc1  v2.1
CC1 source code docs
 All Classes Namespaces Files Functions Variables Pages
vm_test.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 # @COPYRIGHT_begin
3 #
4 # Copyright [2010-2014] Institute of Nuclear Physics PAN, Krakow, Poland
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 # @COPYRIGHT_end
19 
20 # -*- coding: utf-8 -*-
21 ##
22 # @package src.wi.tests.vm_test
23 #
24 # @author Piotr Wójcik
25 # @author Krzysztof Danielowski
26 # @date 25.01.2013
27 #
28 
29 from wi.tests import WiTestCase
30 import random
31 import resources_test
32 import unittest
33 
34 
35 class VMTests(WiTestCase, unittest.TestCase):
36  @staticmethod
37  def _test_create_vm(self):
38  driver = self.driver
39  self.base_url = self.TEST_SERVER
40 
41  self.login_testuser(self.TEST_USER)
42 
43  driver.get(self.base_url + "/vm/create_vm/")
44 
45  self.wait_for_text("//div[@id='item-list']/div[2]/table/tbody", ["witest_complete"])
46 
47  self.cell_click("Name", "witest_complete", None, element="a",
48  path_head_tds="//div[@id='item-list']/div[1]/table/tbody/tr/td",
49  path_body_trs="//div[@id='item-list']/div[2]/table/tbody/tr")
50 
51  self.wait_for_text("//div[@id='item-list']/div[2]/table/tbody", ["small"])
52 
53  self.cell_click("Name", "small", None, element="a",
54  path_head_tds="//div[@id='item-list']/div[1]/table/tbody/tr/td",
55  path_body_trs="//div[@id='item-list']/div[2]/table/tbody/tr")
56 
57  self.wait_for_text("//form[@id='wizard-form']/div[2]/fieldset/div/span/label", ["Assign IP address"])
58 
59  driver.find_element_by_xpath("//div[@id='submit-div']/input").click()
60 
61  self.wait_for_text("//form[@id='wizard-form']/div[2]/fieldset/div/span/label", ["Name"])
62 
63  name = "witest_vm" + str(random.randint(1, 100000))
64  driver.find_element_by_id("id_3-name").clear()
65  driver.find_element_by_id("id_3-name").send_keys(name)
66 
67  driver.find_element_by_css_selector("input.big_button").click()
68 
69  self.wait_for_message(["Virtual machine is being created."])
70 
71  driver.find_element_by_link_text("Logout").click()
72 
73  return name
74 
75  def _test_edit_vm(self, name):
76  driver = self.driver
77  self.base_url = self.TEST_SERVER
78 
79  self.login_testuser(self.TEST_USER)
80 
81  driver.get(self.base_url + "/vm/show_vm/")
82 
83  self.wait_for_text("//table[@id='item-list']/tbody", [name])
84 
85  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
86 
87  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[4]/a", ["Edit"])
88 
89  driver.find_element_by_link_text("Edit").click()
90 
91  self.wait_for_text("//div[@id='dialog-div']/form/div/fieldset/div/span", ["Name"])
92 
93  newname = "new_witest_vm" + str(random.randint(1, 100000))
94  driver.find_element_by_id("id_name").clear()
95  driver.find_element_by_id("id_name").send_keys(newname)
96  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
97 
98  self.wait_for_message(["You have successfully edited virtual machine data."])
99 
100  driver.find_element_by_link_text("Logout").click()
101 
102  return newname
103 
104  @staticmethod
105  def _test_destroy_vm(self, name):
106  driver = self.driver
107  self.base_url = self.TEST_SERVER
108 
109  self.login_testuser(self.TEST_USER)
110 
111  driver.get(self.base_url + "/vm/show_vm/")
112 
113  self.wait_for_text("//table[@id='item-list']/tbody", [name])
114 
115  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
116 
117  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[1]/a", ["Destroy"])
118 
119  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[1]/a").click()
120 
121  self.wait_for_text("//div[@id='dialog-div']/p", ["Do you want to destroy virtual machine"])
122 
123  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
124 
125  self.wait_for_message(["successfully destroyed"])
126 
127  driver.find_element_by_link_text("Logout").click()
128 
129  def _test_enable_vnc(self, name):
130  driver = self.driver
131  self.base_url = self.TEST_SERVER
132 
133  self.login_testuser(self.TEST_USER)
134 
135  driver.get(self.base_url + "/vm/show_vm/")
136 
137  self.wait_for_text("//table[@id='item-list']/tbody", [name])
138 
139  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
140 
141  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr[12]/td/div/ul/li/a", ["Enable VNC"])
142 
143  driver.find_element_by_link_text("Enable VNC").click()
144 
145  self.wait_for_text("//div[@id='dialog-div']/p", ["Do you want to enable VNC?"])
146 
147  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
148 
149  self.wait_for_message(["You have successfully enabled VNC."])
150 
151  driver.find_element_by_link_text("Logout").click()
152 
153  def _test_disable_vnc(self, name):
154  driver = self.driver
155  self.base_url = self.TEST_SERVER
156 
157  self.login_testuser(self.TEST_USER)
158 
159  driver.get(self.base_url + "/vm/show_vm/")
160 
161  self.wait_for_text("//table[@id='item-list']/tbody", [name])
162 
163  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
164 
165  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr[12]/td/div/ul/li/a", ["Disable VNC"])
166 
167  driver.find_element_by_link_text("Disable VNC").click()
168 
169  self.wait_for_text("//div[@id='dialog-div']/p", ["Do you want to disable VNC?"])
170 
171  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
172 
173  self.wait_for_message(["You have successfully disabled VNC."])
174 
175  driver.find_element_by_link_text("Logout").click()
176 
177  def _test_reset_vm(self, name):
178  driver = self.driver
179  self.base_url = self.TEST_SERVER
180 
181  self.login_testuser(self.TEST_USER)
182 
183  driver.get(self.base_url + "/vm/show_vm/")
184 
185  self.wait_for_text("//table[@id='item-list']/tbody", [name])
186 
187  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
188 
189  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[3]/a", ["Reset"])
190 
191  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[3]/a").click()
192 
193  self.wait_for_text("//div[@id='dialog-div']/p", ["Do you want to reset virtual machine"])
194 
195  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
196 
197  self.wait_for_message(["successfully rebooted"])
198 
199  driver.find_element_by_link_text("Logout").click()
200 
201  def _test_assign_disk(self, name, diskname):
202  driver = self.driver
203  self.base_url = self.TEST_SERVER
204 
205  self.login_testuser(self.TEST_USER)
206 
207  driver.get(self.base_url + "/vm/show_vm/")
208 
209  self.wait_for_text("//table[@id='item-list']/tbody", [name])
210 
211  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
212 
213  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr[7]/td/div/ul/li/a", ["Assign disk"])
214 
215  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr[7]/td/div/ul/li/a").click()
216 
217  self.wait_for_text("//div[@id='dialog-div']/p", ["Select a disk to assign:"])
218 
219  driver.find_element_by_xpath("//div[@id='dialog-div']/form/div/fieldset/div/span[2]/a/span").click()
220  driver.find_element_by_xpath("//a[contains(text(),'" + diskname + " (10 MB)')]").click()
221 
222  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
223 
224  self.wait_for_message(["Disk has been assigned."])
225 
226  driver.find_element_by_link_text("Logout").click()
227 
228  def _test_revoke_disk(self, name, diskname):
229  driver = self.driver
230  self.base_url = self.TEST_SERVER
231 
232  self.login_testuser(self.TEST_USER)
233 
234  driver.get(self.base_url + "/vm/show_vm/")
235 
236  self.wait_for_text("//table[@id='item-list']/tbody", [name])
237 
238  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
239 
240  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr[7]/td/div/ul/li[2]/a", ["Revoke disk"])
241 
242  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr[7]/td/div/ul/li[2]/a").click()
243 
244  self.wait_for_text("//div[@id='dialog-div']/form/div/fieldset/div/span/label", ["Disk"])
245 
246  driver.find_element_by_xpath("//div[@id='dialog-div']/form/div/fieldset/div/span[2]/a/span").click()
247  driver.find_element_by_xpath("//a[contains(text(),'" + diskname + "')]").click()
248 
249  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
250 
251  self.wait_for_message(["Disk has been revoked."])
252 
253  driver.find_element_by_link_text("Logout").click()
254 
255  def _test_monitoring(self, name):
256  driver = self.driver
257  self.base_url = self.TEST_SERVER
258 
259  self.login_testuser(self.TEST_USER)
260 
261  driver.get(self.base_url + "/vm/show_vm/")
262 
263  self.wait_for_text("//table[@id='item-list']/tbody", [name])
264 
265  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
266 
267  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[5]/a", ["Monitoring"])
268 
269  driver.find_element_by_link_text("Monitoring").click()
270 
271  self.wait_for_text("//form[@id='monitoring-form']/div[2]/div/ul/li", ["CPU time"])
272 
273  driver.get(self.base_url + "/vm/show_vm/")
274 
275  driver.find_element_by_link_text("Logout").click()
276 
277  def _test_assign_ip(self, name):
278  driver = self.driver
279  self.base_url = self.TEST_SERVER
280 
281  self.login_testuser(self.TEST_USER)
282 
283  driver.get(self.base_url + "/vm/show_vm/")
284 
285  self.wait_for_text("//table[@id='item-list']/tbody", [name])
286 
287  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
288 
289  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr[13]/td[4]/ul/a", ["Assign"])
290 
291  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr[13]/td[4]/ul/a").click()
292 
293  driver.find_element_by_xpath("//div[@id='dialog-div']/form/div/fieldset/div/span[2]/a/span").click()
294  driver.find_element_by_xpath("//a[contains(text(),'.')]").click()
295 
296  self.wait_for_text("//div[@id='dialog-div']/p", ["Select an IP address to assign:"])
297 
298  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
299 
300  self.wait_for_message(["You have successfully assigned selected IP address."])
301 
302  driver.find_element_by_link_text("Logout").click()
303 
304  def _test_revoke_ip(self, name):
305  driver = self.driver
306  self.base_url = self.TEST_SERVER
307 
308  self.login_testuser(self.TEST_USER)
309 
310  driver.get(self.base_url + "/vm/show_vm/")
311 
312  self.wait_for_text("//table[@id='item-list']/tbody", [name])
313 
314  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
315 
316  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr[13]/td[4]/ul/a", ["."])
317 
318  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr[13]/td[4]/ul/a").click()
319 
320  self.wait_for_text("//div[@id='dialog-div']/p", ["Do you want to revoke IP address"])
321 
322  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
323 
324  self.wait_for_message(["You have successfully revoked IP address"])
325 
326  driver.find_element_by_link_text("Logout").click()
327 
328  def _test_destroy_multiple_vm(self, vm_list):
329  driver = self.driver
330  self.base_url = self.TEST_SERVER
331 
332  self.login_testuser(self.TEST_USER)
333 
334  driver.get(self.base_url + "/vm/show_vm/")
335 
336  for name in vm_list:
337  self.wait_for_text("//table[@id='item-list']/tbody", [name])
338 
339  self.cell_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"}, "", "input")
340 
341  driver.find_element_by_xpath("//li[@id='group_action']/a").click()
342 
343  self.wait_for_text("//ul[@id='context-menu-list']/li", ["Destroy"])
344 
345  driver.find_element_by_xpath("//ul[@id='context-menu-list']/li[1]").click()
346 
347  self.wait_for_text("//div[@id='dialog-div']/p", ["Do you want to destroy"])
348 
349  driver.find_element_by_css_selector("button.ok-button.mid_button").click()
350 
351  self.wait_for_message(["successfully destroyed"])
352 
353  driver.find_element_by_link_text("Logout").click()
354 
355  def _test_edit_vm_description(self, name, description):
356  driver = self.driver
357  self.base_url = self.TEST_SERVER
358 
359  self.login_testuser(self.TEST_USER)
360 
361  driver.get(self.base_url + "/vm/show_vm/")
362 
363  self.wait_for_text("//table[@id='item-list']/tbody", [name])
364 
365  self.row_click("Name", name, {"dict": {"State": "running"}, "path": "//table[@id='item-list']/tbody"})
366 
367  self.wait_for_text("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[4]/a", ["Edit"])
368 
369  driver.find_element_by_xpath("//div[@id='vm_details']/div[5]/div/table/tbody/tr/td/div/ul/li[4]/a").click()
370 
371  self.wait_for_text("//span[@id='ui-dialog-title-dialog-div']", ["Edit virtual machine"])
372 
373  driver.find_element_by_xpath("//textarea[@id='id_description']").clear()
374  driver.find_element_by_xpath("//textarea[@id='id_description']").send_keys(description)
375  driver.find_element_by_xpath("//button[@type='submit']").click()
376 
377  self.wait_for_message(["You have successfully edited virtual machine data."])
378 
379  driver.find_element_by_link_text("Logout").click()
380 
381  def test_1_simple(self):
382  name = self._test_create_vm(self)
383  newname = self._test_edit_vm(name)
384  self._test_enable_vnc(newname)
385  self._test_disable_vnc(newname)
386  self._test_destroy_vm(self, newname)
387 
388  def test_2_disks(self):
389  diskname = resources_test.ResourcesTests._test_create_disk(self)
390  name = self._test_create_vm(self)
391  self._test_assign_disk(name, diskname)
392  self._test_monitoring(name)
393  self._test_reset_vm(name)
394  self._test_revoke_disk(name, diskname)
395  resources_test.ResourcesTests._test_remove_disk(self, diskname)
396  self._test_destroy_vm(self, name)
397 
398  def test_3_simple(self):
399  name = self._test_create_vm(self)
400  resources_test.ResourcesTests._test_request_ip(self)
401  self._test_assign_ip(name)
402  self._test_revoke_ip(name)
403  resources_test.ResourcesTests._test_release_ip(self)
404  self._test_destroy_vm(self, name)
405 
407  name = self._test_create_vm(self)
408  name2 = self._test_create_vm(self)
409  self._test_destroy_multiple_vm([name2, name])
410 
411  def test_5_utf8_check(self):
412  name = self._test_create_vm(self)
413  self._test_edit_vm_description(name, u'ąęł')
414  self._test_destroy_vm(self, name)
415