root / test / py / ganeti.ovf_unittest.py @ 4869595d
History | View | Annotate | Download (30.1 kB)
1 | 1e6fab60 | Agata Murawska | #!/usr/bin/python
|
---|---|---|---|
2 | 1e6fab60 | Agata Murawska | #
|
3 | 1e6fab60 | Agata Murawska | |
4 | 6e8091f9 | Dimitris Aragiorgis | # Copyright (C) 2011, 2012 Google Inc.
|
5 | 1e6fab60 | Agata Murawska | #
|
6 | 1e6fab60 | Agata Murawska | # This program is free software; you can redistribute it and/or modify
|
7 | 1e6fab60 | Agata Murawska | # it under the terms of the GNU General Public License as published by
|
8 | 1e6fab60 | Agata Murawska | # the Free Software Foundation; either version 2 of the License, or
|
9 | 1e6fab60 | Agata Murawska | # (at your option) any later version.
|
10 | 1e6fab60 | Agata Murawska | #
|
11 | 1e6fab60 | Agata Murawska | # This program is distributed in the hope that it will be useful, but
|
12 | 1e6fab60 | Agata Murawska | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 1e6fab60 | Agata Murawska | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | 1e6fab60 | Agata Murawska | # General Public License for more details.
|
15 | 1e6fab60 | Agata Murawska | #
|
16 | 1e6fab60 | Agata Murawska | # You should have received a copy of the GNU General Public License
|
17 | 1e6fab60 | Agata Murawska | # along with this program; if not, write to the Free Software
|
18 | 1e6fab60 | Agata Murawska | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
19 | 1e6fab60 | Agata Murawska | # 02110-1301, USA.
|
20 | 1e6fab60 | Agata Murawska | |
21 | 1e6fab60 | Agata Murawska | |
22 | 1e6fab60 | Agata Murawska | """Script for testing ganeti.ovf.
|
23 | 1e6fab60 | Agata Murawska |
|
24 | 1e6fab60 | Agata Murawska | """
|
25 | 1e6fab60 | Agata Murawska | |
26 | 1e6fab60 | Agata Murawska | import optparse |
27 | 1e6fab60 | Agata Murawska | import os |
28 | 1e6fab60 | Agata Murawska | import os.path |
29 | 1e6fab60 | Agata Murawska | import re |
30 | 1e6fab60 | Agata Murawska | import shutil |
31 | 1e6fab60 | Agata Murawska | import sys |
32 | 1e6fab60 | Agata Murawska | import tempfile |
33 | 1e6fab60 | Agata Murawska | import unittest |
34 | 1e6fab60 | Agata Murawska | |
35 | d92518d3 | Agata Murawska | try:
|
36 | d92518d3 | Agata Murawska | import xml.etree.ElementTree as ET |
37 | d92518d3 | Agata Murawska | except ImportError: |
38 | d92518d3 | Agata Murawska | import elementtree.ElementTree as ET |
39 | d92518d3 | Agata Murawska | |
40 | 1e6fab60 | Agata Murawska | from ganeti import constants |
41 | 1e6fab60 | Agata Murawska | from ganeti import errors |
42 | 1e6fab60 | Agata Murawska | from ganeti import ovf |
43 | 1e6fab60 | Agata Murawska | from ganeti import utils |
44 | a56625a2 | Michael Hanselmann | from ganeti import pathutils |
45 | 1e6fab60 | Agata Murawska | |
46 | 1e6fab60 | Agata Murawska | import testutils |
47 | 1e6fab60 | Agata Murawska | |
48 | 1e6fab60 | Agata Murawska | OUTPUT_DIR = "newdir"
|
49 | 1e6fab60 | Agata Murawska | |
50 | 1e6fab60 | Agata Murawska | GANETI_DISKS = { |
51 | 1e6fab60 | Agata Murawska | "disk_count": "1", |
52 | 1e6fab60 | Agata Murawska | "disk0_dump": "new_disk.raw", |
53 | 1e6fab60 | Agata Murawska | "disk0_size": "0", |
54 | 1e6fab60 | Agata Murawska | "disk0_ivname": "disk/0", |
55 | 1e6fab60 | Agata Murawska | } |
56 | 1e6fab60 | Agata Murawska | GANETI_NETWORKS = { |
57 | 1e6fab60 | Agata Murawska | "nic_count": "1", |
58 | 1e6fab60 | Agata Murawska | "nic0_mode": "bridged", |
59 | 1e6fab60 | Agata Murawska | "nic0_ip": "none", |
60 | 1e6fab60 | Agata Murawska | "nic0_mac": "aa:00:00:d8:2c:1e", |
61 | 1e6fab60 | Agata Murawska | "nic0_link": "xen-br0", |
62 | 6e8091f9 | Dimitris Aragiorgis | "nic0_network": "auto", |
63 | 1e6fab60 | Agata Murawska | } |
64 | 1e6fab60 | Agata Murawska | GANETI_HYPERVISOR = { |
65 | 1e6fab60 | Agata Murawska | "hypervisor_name": "xen-pvm", |
66 | 1e6fab60 | Agata Murawska | "root-path": "/dev/sda", |
67 | 1e6fab60 | Agata Murawska | "kernel_args": "ro", |
68 | 1e6fab60 | Agata Murawska | } |
69 | 1e6fab60 | Agata Murawska | GANETI_OS = {"os_name": "lenny-image"} |
70 | 1e6fab60 | Agata Murawska | GANETI_BACKEND = { |
71 | 1e6fab60 | Agata Murawska | "vcpus": "1", |
72 | 1e6fab60 | Agata Murawska | "memory" : "2048", |
73 | 1e6fab60 | Agata Murawska | "auto_balance": "False", |
74 | 1e6fab60 | Agata Murawska | } |
75 | 1e6fab60 | Agata Murawska | GANETI_NAME = "ganeti-test-xen"
|
76 | 1e6fab60 | Agata Murawska | GANETI_TEMPLATE = "plain"
|
77 | 1e6fab60 | Agata Murawska | GANETI_TAGS = None
|
78 | 1e6fab60 | Agata Murawska | GANETI_VERSION = "0"
|
79 | 1e6fab60 | Agata Murawska | |
80 | 1e6fab60 | Agata Murawska | VIRTUALBOX_DISKS = { |
81 | 1e6fab60 | Agata Murawska | "disk_count": "2", |
82 | 1e6fab60 | Agata Murawska | "disk0_ivname": "disk/0", |
83 | 1e6fab60 | Agata Murawska | "disk0_dump": "new_disk.raw", |
84 | 1e6fab60 | Agata Murawska | "disk0_size": "0", |
85 | 1e6fab60 | Agata Murawska | "disk1_ivname": "disk/1", |
86 | 1e6fab60 | Agata Murawska | "disk1_dump": "second_disk.raw", |
87 | 1e6fab60 | Agata Murawska | "disk1_size": "0", |
88 | 1e6fab60 | Agata Murawska | } |
89 | 1e6fab60 | Agata Murawska | VIRTUALBOX_NETWORKS = { |
90 | 1e6fab60 | Agata Murawska | "nic_count": "1", |
91 | 1e6fab60 | Agata Murawska | "nic0_mode": "bridged", |
92 | 1e6fab60 | Agata Murawska | "nic0_ip": "none", |
93 | 1e6fab60 | Agata Murawska | "nic0_link": "auto", |
94 | 1e6fab60 | Agata Murawska | "nic0_mac": "auto", |
95 | 6e8091f9 | Dimitris Aragiorgis | "nic0_network": "auto", |
96 | 1e6fab60 | Agata Murawska | } |
97 | 1e6fab60 | Agata Murawska | VIRTUALBOX_HYPERVISOR = {"hypervisor_name": "auto"} |
98 | 1e6fab60 | Agata Murawska | VIRTUALBOX_OS = {"os_name": None} |
99 | 1e6fab60 | Agata Murawska | VIRTUALBOX_BACKEND = { |
100 | 1e6fab60 | Agata Murawska | "vcpus": "1", |
101 | 1e6fab60 | Agata Murawska | "memory" : "2048", |
102 | 1e6fab60 | Agata Murawska | "auto_balance": "auto", |
103 | 1e6fab60 | Agata Murawska | } |
104 | 1e6fab60 | Agata Murawska | VIRTUALBOX_NAME = None
|
105 | 1e6fab60 | Agata Murawska | VIRTUALBOX_TEMPLATE = None
|
106 | 1e6fab60 | Agata Murawska | VIRTUALBOX_TAGS = None
|
107 | 1e6fab60 | Agata Murawska | VIRTUALBOX_VERSION = None
|
108 | 1e6fab60 | Agata Murawska | |
109 | 1e6fab60 | Agata Murawska | EMPTY_DISKS = {} |
110 | 1e6fab60 | Agata Murawska | EMPTY_NETWORKS = {} |
111 | 1e6fab60 | Agata Murawska | EMPTY_HYPERVISOR = {"hypervisor_name": "auto"} |
112 | 1e6fab60 | Agata Murawska | EMPTY_OS = {} |
113 | 1e6fab60 | Agata Murawska | EMPTY_BACKEND = { |
114 | 1e6fab60 | Agata Murawska | "vcpus": "auto", |
115 | 1e6fab60 | Agata Murawska | "memory" : "auto", |
116 | 1e6fab60 | Agata Murawska | "auto_balance": "auto", |
117 | 1e6fab60 | Agata Murawska | } |
118 | 1e6fab60 | Agata Murawska | EMPTY_NAME = None
|
119 | 1e6fab60 | Agata Murawska | EMPTY_TEMPLATE = None
|
120 | 1e6fab60 | Agata Murawska | EMPTY_TAGS = None
|
121 | 1e6fab60 | Agata Murawska | EMPTY_VERSION = None
|
122 | 1e6fab60 | Agata Murawska | |
123 | 1e6fab60 | Agata Murawska | CMDARGS_DISKS = { |
124 | 1e6fab60 | Agata Murawska | "disk_count": "1", |
125 | 1e6fab60 | Agata Murawska | "disk0_ivname": "disk/0", |
126 | 1e6fab60 | Agata Murawska | "disk0_dump": "disk0.raw", |
127 | 1e6fab60 | Agata Murawska | "disk0_size": "8", |
128 | 1e6fab60 | Agata Murawska | } |
129 | 1e6fab60 | Agata Murawska | CMDARGS_NETWORKS = { |
130 | 1e6fab60 | Agata Murawska | "nic0_link": "auto", |
131 | 1e6fab60 | Agata Murawska | "nic0_mode": "bridged", |
132 | 1e6fab60 | Agata Murawska | "nic0_ip": "none", |
133 | 1e6fab60 | Agata Murawska | "nic0_mac": "auto", |
134 | 1e6fab60 | Agata Murawska | "nic_count": "1", |
135 | 6e8091f9 | Dimitris Aragiorgis | "nic0_network": "auto", |
136 | 1e6fab60 | Agata Murawska | } |
137 | 1e6fab60 | Agata Murawska | CMDARGS_HYPERVISOR = { |
138 | 1e6fab60 | Agata Murawska | "hypervisor_name": "xen-pvm" |
139 | 1e6fab60 | Agata Murawska | } |
140 | 1e6fab60 | Agata Murawska | CMDARGS_OS = {"os_name": "lenny-image"} |
141 | 1e6fab60 | Agata Murawska | CMDARGS_BACKEND = { |
142 | 1e6fab60 | Agata Murawska | "auto_balance": False, |
143 | 1e6fab60 | Agata Murawska | "vcpus": "1", |
144 | 1e6fab60 | Agata Murawska | "memory": "256", |
145 | 1e6fab60 | Agata Murawska | } |
146 | 1e6fab60 | Agata Murawska | CMDARGS_NAME = "test-instance"
|
147 | 1e6fab60 | Agata Murawska | CMDARGS_TEMPLATE = "plain"
|
148 | 1e6fab60 | Agata Murawska | CMDARGS_TAGS = "test-tag-1,test-tag-2"
|
149 | 1e6fab60 | Agata Murawska | |
150 | 1e6fab60 | Agata Murawska | ARGS_EMPTY = { |
151 | 1e6fab60 | Agata Murawska | "output_dir": None, |
152 | 1e6fab60 | Agata Murawska | "nics": [],
|
153 | 1e6fab60 | Agata Murawska | "disks": [],
|
154 | 1e6fab60 | Agata Murawska | "name": "test-instance", |
155 | d92518d3 | Agata Murawska | "ova_package": False, |
156 | d92518d3 | Agata Murawska | "ext_usage": False, |
157 | d92518d3 | Agata Murawska | "disk_format": "cow", |
158 | d92518d3 | Agata Murawska | "compression": False, |
159 | 1e6fab60 | Agata Murawska | } |
160 | 1e6fab60 | Agata Murawska | ARGS_EXPORT_DIR = dict(ARGS_EMPTY, **{
|
161 | 1e6fab60 | Agata Murawska | "output_dir": OUTPUT_DIR,
|
162 | 1e6fab60 | Agata Murawska | "name": None, |
163 | 1e6fab60 | Agata Murawska | "hypervisor": None, |
164 | 1e6fab60 | Agata Murawska | "os": None, |
165 | 1e6fab60 | Agata Murawska | "beparams": {},
|
166 | 1e6fab60 | Agata Murawska | "no_nics": False, |
167 | 1e6fab60 | Agata Murawska | "disk_template": None, |
168 | 1e6fab60 | Agata Murawska | "tags": None, |
169 | 1e6fab60 | Agata Murawska | }) |
170 | 1e6fab60 | Agata Murawska | ARGS_VBOX = dict(ARGS_EXPORT_DIR, **{
|
171 | 1e6fab60 | Agata Murawska | "output_dir": OUTPUT_DIR,
|
172 | 1e6fab60 | Agata Murawska | "name": "test-instance", |
173 | 1e6fab60 | Agata Murawska | "os": "lenny-image", |
174 | 1e6fab60 | Agata Murawska | "hypervisor": ("xen-pvm", {}), |
175 | 1e6fab60 | Agata Murawska | "osparams":{},
|
176 | 1e6fab60 | Agata Murawska | "disks": [],
|
177 | 1e6fab60 | Agata Murawska | }) |
178 | 1e6fab60 | Agata Murawska | ARGS_COMPLETE = dict(ARGS_VBOX, **{
|
179 | 1e6fab60 | Agata Murawska | "beparams": {"vcpus":"1", "memory":"256", "auto_balance": False}, |
180 | 1e6fab60 | Agata Murawska | "disks": [(0,{"size":"5mb"})], |
181 | 1e6fab60 | Agata Murawska | "nics": [("0",{"mode":"bridged"})], |
182 | 1e6fab60 | Agata Murawska | "disk_template": "plain", |
183 | 1e6fab60 | Agata Murawska | "tags": "test-tag-1,test-tag-2", |
184 | 1e6fab60 | Agata Murawska | }) |
185 | 1e6fab60 | Agata Murawska | ARGS_BROKEN = dict(ARGS_EXPORT_DIR , **{
|
186 | 1e6fab60 | Agata Murawska | "no_nics": True, |
187 | 1e6fab60 | Agata Murawska | "disk_template": "diskless", |
188 | 1e6fab60 | Agata Murawska | "name": "test-instance", |
189 | 1e6fab60 | Agata Murawska | "os": "lenny-image", |
190 | 1e6fab60 | Agata Murawska | "osparams": {},
|
191 | 1e6fab60 | Agata Murawska | }) |
192 | 1e6fab60 | Agata Murawska | |
193 | d92518d3 | Agata Murawska | EXP_ARGS_COMPRESSED = dict(ARGS_EXPORT_DIR, **{
|
194 | d92518d3 | Agata Murawska | "compression": True, |
195 | d92518d3 | Agata Murawska | }) |
196 | d92518d3 | Agata Murawska | |
197 | d92518d3 | Agata Murawska | EXP_DISKS_LIST = [ |
198 | d92518d3 | Agata Murawska | { |
199 | d92518d3 | Agata Murawska | "format": "vmdk", |
200 | d92518d3 | Agata Murawska | "compression": "gzip", |
201 | d92518d3 | Agata Murawska | "virt-size": 90000, |
202 | d92518d3 | Agata Murawska | "real-size": 203, |
203 | d92518d3 | Agata Murawska | "path": "new_disk.cow.gz", |
204 | d92518d3 | Agata Murawska | }, |
205 | d92518d3 | Agata Murawska | { |
206 | d92518d3 | Agata Murawska | "format": "cow", |
207 | d92518d3 | Agata Murawska | "virt-size": 15, |
208 | d92518d3 | Agata Murawska | "real-size": 15, |
209 | d92518d3 | Agata Murawska | "path": "new_disk.cow", |
210 | d92518d3 | Agata Murawska | }, |
211 | d92518d3 | Agata Murawska | ] |
212 | d92518d3 | Agata Murawska | EXP_NETWORKS_LIST = [ |
213 | 6e8091f9 | Dimitris Aragiorgis | {"mac": "aa:00:00:d8:2c:1e", "ip":"None", "link":"br0", |
214 | 6e8091f9 | Dimitris Aragiorgis | "mode":"routed", "network": "test"}, |
215 | d92518d3 | Agata Murawska | ] |
216 | d92518d3 | Agata Murawska | EXP_PARTIAL_GANETI_DICT = { |
217 | d92518d3 | Agata Murawska | "hypervisor": {"name": "xen-kvm"}, |
218 | d92518d3 | Agata Murawska | "os": {"name": "lenny-image"}, |
219 | d92518d3 | Agata Murawska | "auto_balance": "True", |
220 | d92518d3 | Agata Murawska | "version": "0", |
221 | d92518d3 | Agata Murawska | } |
222 | d92518d3 | Agata Murawska | EXP_GANETI_DICT = { |
223 | 8c114acd | Michael Hanselmann | "tags": None, |
224 | 8c114acd | Michael Hanselmann | "auto_balance": "False", |
225 | 8c114acd | Michael Hanselmann | "hypervisor": {
|
226 | 8c114acd | Michael Hanselmann | "root-path": "/dev/sda", |
227 | 8c114acd | Michael Hanselmann | "name": "xen-pvm", |
228 | 8c114acd | Michael Hanselmann | "kernel_args": "ro" |
229 | d92518d3 | Agata Murawska | }, |
230 | 8c114acd | Michael Hanselmann | "version": "0", |
231 | 8c114acd | Michael Hanselmann | "disk_template": None, |
232 | 8c114acd | Michael Hanselmann | "os": {"name": "lenny-image"} |
233 | d92518d3 | Agata Murawska | } |
234 | d92518d3 | Agata Murawska | EXP_NAME ="xen-dev-i1"
|
235 | d92518d3 | Agata Murawska | EXP_VCPUS = 1
|
236 | d92518d3 | Agata Murawska | EXP_MEMORY = 512
|
237 | d92518d3 | Agata Murawska | |
238 | d92518d3 | Agata Murawska | EXPORT_EMPTY = ("<Envelope xml:lang=\"en-US\" xmlns=\"http://schemas.dmtf.org/"
|
239 | d92518d3 | Agata Murawska | "ovf/envelope/1\" xmlns:gnt=\"http://ganeti\" xmlns:ovf=\""
|
240 | d92518d3 | Agata Murawska | "http://schemas.dmtf.org/ovf/envelope/1\" xmlns:rasd=\""
|
241 | d92518d3 | Agata Murawska | "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_Resource"
|
242 | d92518d3 | Agata Murawska | "AllocationSettingData\" xmlns:vssd=\"http://schemas.dmtf.org"
|
243 | d92518d3 | Agata Murawska | "/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData\""
|
244 | d92518d3 | Agata Murawska | " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" />")
|
245 | fa337742 | Agata Murawska | EXPORT_DISKS_EMPTY = ("<References /><DiskSection><Info>Virtual disk"
|
246 | fa337742 | Agata Murawska | " information</Info></DiskSection>")
|
247 | d92518d3 | Agata Murawska | EXPORT_DISKS = ("<References><File ovf:compression=\"gzip\" ovf:href=\"new_disk"
|
248 | d92518d3 | Agata Murawska | ".cow.gz\" ovf:id=\"file0\" ovf:size=\"203\" /><File ovf:href="
|
249 | d92518d3 | Agata Murawska | "\"new_disk.cow\" ovf:id=\"file1\" ovf:size=\"15\" />"
|
250 | fa337742 | Agata Murawska | "</References><DiskSection><Info>Virtual disk information"
|
251 | fa337742 | Agata Murawska | "</Info><Disk ovf:capacity=\"90000\" ovf:diskId=\"disk0\" ovf"
|
252 | fa337742 | Agata Murawska | ":fileRef=\"file0\" ovf:format=\"http://www.vmware.com/"
|
253 | fa337742 | Agata Murawska | "interfaces/specifications/vmdk.html#monolithicSparse\" /><Disk"
|
254 | fa337742 | Agata Murawska | " ovf:capacity=\"15\" ovf:diskId=\"disk1\" ovf:fileRef"
|
255 | fa337742 | Agata Murawska | "=\"file1\" ovf:format=\"http://www.gnome.org/~markmc/qcow"
|
256 | fa337742 | Agata Murawska | "-image-format.html\" /></DiskSection>")
|
257 | fa337742 | Agata Murawska | EXPORT_NETWORKS_EMPTY = ("<NetworkSection><Info>List of logical networks</Info>"
|
258 | fa337742 | Agata Murawska | "</NetworkSection>")
|
259 | fa337742 | Agata Murawska | EXPORT_NETWORKS = ("<NetworkSection><Info>List of logical networks</Info>"
|
260 | fa337742 | Agata Murawska | "<Network ovf:name=\"routed0\" /></NetworkSection>")
|
261 | d92518d3 | Agata Murawska | EXPORT_GANETI_INCOMPLETE = ("<gnt:GanetiSection><gnt:Version>0</gnt:Version>"
|
262 | d92518d3 | Agata Murawska | "<gnt:AutoBalance>True</gnt:AutoBalance><gnt:"
|
263 | d92518d3 | Agata Murawska | "OperatingSystem><gnt:Name>lenny-image</gnt:Name>"
|
264 | d92518d3 | Agata Murawska | "<gnt:Parameters /></gnt:OperatingSystem><gnt:"
|
265 | d92518d3 | Agata Murawska | "Hypervisor><gnt:Name>xen-kvm</gnt:Name><gnt:"
|
266 | d92518d3 | Agata Murawska | "Parameters /></gnt:Hypervisor><gnt:Network><gnt:"
|
267 | d92518d3 | Agata Murawska | "Nic ovf:name=\"routed0\"><gnt:Mode>routed</gnt:"
|
268 | d92518d3 | Agata Murawska | "Mode><gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:"
|
269 | d92518d3 | Agata Murawska | "MACAddress><gnt:IPAddress>None</gnt:IPAddress>"
|
270 | 6e8091f9 | Dimitris Aragiorgis | "<gnt:Link>br0</gnt:Link><gnt:Net>test</gnt:Net>"
|
271 | 6e8091f9 | Dimitris Aragiorgis | "</gnt:Nic></gnt:Network></gnt:GanetiSection>")
|
272 | d92518d3 | Agata Murawska | EXPORT_GANETI = ("<gnt:GanetiSection><gnt:Version>0</gnt:Version><gnt:"
|
273 | d92518d3 | Agata Murawska | "AutoBalance>False</gnt:AutoBalance><gnt:OperatingSystem>"
|
274 | d92518d3 | Agata Murawska | "<gnt:Name>lenny-image</gnt:Name><gnt:Parameters /></gnt:"
|
275 | d92518d3 | Agata Murawska | "OperatingSystem><gnt:Hypervisor><gnt:Name>xen-pvm</gnt:Name>"
|
276 | d92518d3 | Agata Murawska | "<gnt:Parameters><gnt:root-path>/dev/sda</gnt:root-path><gnt:"
|
277 | d92518d3 | Agata Murawska | "kernel_args>ro</gnt:kernel_args></gnt:Parameters></gnt:"
|
278 | d92518d3 | Agata Murawska | "Hypervisor><gnt:Network><gnt:Nic ovf:name=\"routed0\"><gnt:"
|
279 | d92518d3 | Agata Murawska | "Mode>routed</gnt:Mode><gnt:MACAddress>aa:00:00:d8:2c:1e</gnt:"
|
280 | d92518d3 | Agata Murawska | "MACAddress><gnt:IPAddress>None</gnt:IPAddress><gnt:Link>br0"
|
281 | 6e8091f9 | Dimitris Aragiorgis | "</gnt:Link><gnt:Net>test</gnt:Net></gnt:Nic></gnt:Network>"
|
282 | 6e8091f9 | Dimitris Aragiorgis | "</gnt:GanetiSection>")
|
283 | d92518d3 | Agata Murawska | EXPORT_SYSTEM = ("<References><File ovf:compression=\"gzip\" ovf:href=\"new_"
|
284 | d92518d3 | Agata Murawska | "disk.cow.gz\" ovf:id=\"file0\" ovf:size=\"203\" /><File ovf:"
|
285 | d92518d3 | Agata Murawska | "href=\"new_disk.cow\" ovf:id=\"file1\" ovf:size=\"15\" />"
|
286 | fa337742 | Agata Murawska | "</References><DiskSection><Info>Virtual disk information"
|
287 | fa337742 | Agata Murawska | "</Info><Disk ovf:capacity=\"90000\" ovf:diskId=\"disk0\""
|
288 | fa337742 | Agata Murawska | " ovf:fileRef=\"file0\" ovf:format=\"http://www.vmware.com"
|
289 | fa337742 | Agata Murawska | "/interfaces/specifications/vmdk.html#monolithicSparse\" />"
|
290 | fa337742 | Agata Murawska | "<Disk ovf:capacity=\"15\" ovf:diskId=\"disk1\" ovf:fileRef"
|
291 | fa337742 | Agata Murawska | "=\"file1\" ovf:format=\"http://www.gnome.org/~markmc/qcow"
|
292 | fa337742 | Agata Murawska | "-image-format.html\" /></DiskSection><NetworkSection><Info>"
|
293 | fa337742 | Agata Murawska | "List of logical networks</Info><Network ovf:name=\"routed0\""
|
294 | fa337742 | Agata Murawska | " /></NetworkSection><VirtualSystem ovf:id=\"xen-dev-i1\">"
|
295 | fa337742 | Agata Murawska | "<Info>A virtual machine</Info><Name>xen-dev-i1</Name>"
|
296 | fa337742 | Agata Murawska | "<OperatingSystemSection ovf:id=\"0\"><Info>Installed guest"
|
297 | fa337742 | Agata Murawska | " operating system</Info></OperatingSystemSection><Virtual"
|
298 | fa337742 | Agata Murawska | "HardwareSection><Info>Virtual hardware requirements</Info>"
|
299 | fa337742 | Agata Murawska | "<System><vssd:ElementName>Virtual Hardware Family"
|
300 | fa337742 | Agata Murawska | "</vssd:ElementName><vssd:InstanceID>0</vssd:InstanceID><vssd:"
|
301 | d92518d3 | Agata Murawska | "VirtualSystemIdentifier>xen-dev-i1</vssd:VirtualSystem"
|
302 | d92518d3 | Agata Murawska | "Identifier><vssd:VirtualSystemType>ganeti-ovf</vssd:Virtual"
|
303 | d92518d3 | Agata Murawska | "SystemType></System><Item><rasd:ElementName>1 virtual CPU(s)"
|
304 | d92518d3 | Agata Murawska | "</rasd:ElementName><rasd:InstanceID>1</rasd:InstanceID><rasd:"
|
305 | d92518d3 | Agata Murawska | "ResourceType>3</rasd:ResourceType><rasd:VirtualQuantity>1"
|
306 | d92518d3 | Agata Murawska | "</rasd:VirtualQuantity></Item><Item><rasd:AllocationUnits>"
|
307 | d92518d3 | Agata Murawska | "byte * 2^20</rasd:AllocationUnits><rasd:ElementName>512MB of"
|
308 | d92518d3 | Agata Murawska | " memory</rasd:ElementName><rasd:InstanceID>2</rasd:"
|
309 | d92518d3 | Agata Murawska | "InstanceID><rasd:ResourceType>4</rasd:ResourceType><rasd:"
|
310 | d92518d3 | Agata Murawska | "VirtualQuantity>512</rasd:VirtualQuantity></Item><Item>"
|
311 | d92518d3 | Agata Murawska | "<rasd:Address>0</rasd:Address><rasd:ElementName>scsi"
|
312 | fa337742 | Agata Murawska | "_controller0</rasd:ElementName><rasd:InstanceID>3"
|
313 | fa337742 | Agata Murawska | "</rasd:InstanceID><rasd:ResourceSubType>lsilogic</rasd"
|
314 | fa337742 | Agata Murawska | ":ResourceSubType><rasd:ResourceType>6</rasd:ResourceType>"
|
315 | fa337742 | Agata Murawska | "</Item><Item><rasd:ElementName>disk0</rasd:ElementName><rasd"
|
316 | fa337742 | Agata Murawska | ":HostResource>ovf:/disk/disk0</rasd:HostResource><rasd"
|
317 | fa337742 | Agata Murawska | ":InstanceID>4</rasd:InstanceID><rasd:Parent>3</rasd:Parent>"
|
318 | fa337742 | Agata Murawska | "<rasd:ResourceType>17</rasd:ResourceType></Item><Item><rasd:"
|
319 | fa337742 | Agata Murawska | "ElementName>disk1</rasd:ElementName><rasd:HostResource>ovf:/"
|
320 | fa337742 | Agata Murawska | "disk/disk1</rasd:HostResource><rasd:InstanceID>5</rasd"
|
321 | fa337742 | Agata Murawska | ":InstanceID><rasd:Parent>3</rasd:Parent><rasd:ResourceType>17"
|
322 | fa337742 | Agata Murawska | "</rasd:ResourceType></Item><Item><rasd:Address>aa:00"
|
323 | fa337742 | Agata Murawska | ":00:d8:2c:1e</rasd:Address><rasd:Connection>routed0</rasd"
|
324 | fa337742 | Agata Murawska | ":Connection><rasd:ElementName>routed0</rasd:ElementName><rasd"
|
325 | fa337742 | Agata Murawska | ":InstanceID>6</rasd:InstanceID><rasd:ResourceType>10</rasd"
|
326 | fa337742 | Agata Murawska | ":ResourceType></Item></VirtualHardwareSection>"
|
327 | fa337742 | Agata Murawska | "</VirtualSystem>")
|
328 | d92518d3 | Agata Murawska | |
329 | 1e6fab60 | Agata Murawska | |
330 | 1e6fab60 | Agata Murawska | def _GetArgs(args, with_name=False): |
331 | 1e6fab60 | Agata Murawska | options = optparse.Values() |
332 | 1e6fab60 | Agata Murawska | needed = args |
333 | 1e6fab60 | Agata Murawska | if with_name:
|
334 | 1e6fab60 | Agata Murawska | needed["name"] = "test-instance" |
335 | 1e6fab60 | Agata Murawska | options._update_loose(needed) |
336 | 1e6fab60 | Agata Murawska | return options
|
337 | 1e6fab60 | Agata Murawska | |
338 | 1e6fab60 | Agata Murawska | |
339 | 1e6fab60 | Agata Murawska | OPTS_EMPTY = _GetArgs(ARGS_EMPTY) |
340 | 1e6fab60 | Agata Murawska | OPTS_EXPORT_NO_NAME = _GetArgs(ARGS_EXPORT_DIR) |
341 | 1e6fab60 | Agata Murawska | OPTS_EXPORT = _GetArgs(ARGS_EXPORT_DIR, with_name=True)
|
342 | d92518d3 | Agata Murawska | |
343 | d92518d3 | Agata Murawska | EXP_OPTS = OPTS_EXPORT_NO_NAME |
344 | d92518d3 | Agata Murawska | EXP_OPTS_COMPRESSED = _GetArgs(EXP_ARGS_COMPRESSED) |
345 | d92518d3 | Agata Murawska | |
346 | 1e6fab60 | Agata Murawska | OPTS_VBOX = _GetArgs(ARGS_VBOX) |
347 | 1e6fab60 | Agata Murawska | OPTS_COMPLETE = _GetArgs(ARGS_COMPLETE) |
348 | 1e6fab60 | Agata Murawska | OPTS_NONIC_NODISK = _GetArgs(ARGS_BROKEN) |
349 | 1e6fab60 | Agata Murawska | |
350 | 1e6fab60 | Agata Murawska | |
351 | 1e6fab60 | Agata Murawska | def _GetFullFilename(file_name): |
352 | 1e6fab60 | Agata Murawska | file_path = "%s/test/data/ovfdata/%s" % (testutils.GetSourceDir(),
|
353 | 1e6fab60 | Agata Murawska | file_name) |
354 | 1e6fab60 | Agata Murawska | file_path = os.path.abspath(file_path) |
355 | 1e6fab60 | Agata Murawska | return file_path
|
356 | 1e6fab60 | Agata Murawska | |
357 | 1e6fab60 | Agata Murawska | |
358 | 1e6fab60 | Agata Murawska | class BetterUnitTest(unittest.TestCase): |
359 | 1e6fab60 | Agata Murawska | def assertRaisesRegexp(self, exception, regexp_val, function, *args): |
360 | 1e6fab60 | Agata Murawska | try:
|
361 | 1e6fab60 | Agata Murawska | function(*args) |
362 | 1e6fab60 | Agata Murawska | self.fail("Expected raising %s" % exception) |
363 | 1e6fab60 | Agata Murawska | except exception, err:
|
364 | 1e6fab60 | Agata Murawska | regexp = re.compile(regexp_val) |
365 | 1e6fab60 | Agata Murawska | if re.search(regexp, str(err)) == None: |
366 | 1e6fab60 | Agata Murawska | self.fail("Expected matching '%s', got '%s'" % |
367 | 1e6fab60 | Agata Murawska | (regexp_val, str(err)))
|
368 | 1e6fab60 | Agata Murawska | |
369 | 1e6fab60 | Agata Murawska | |
370 | 1e6fab60 | Agata Murawska | class TestOVFImporter(BetterUnitTest): |
371 | 1e6fab60 | Agata Murawska | def setUp(self): |
372 | 1e6fab60 | Agata Murawska | self.non_existing_file = _GetFullFilename("not_the_file.ovf") |
373 | 1e6fab60 | Agata Murawska | self.ganeti_ovf = _GetFullFilename("ganeti.ovf") |
374 | 1e6fab60 | Agata Murawska | self.virtualbox_ovf = _GetFullFilename("virtualbox.ovf") |
375 | 1e6fab60 | Agata Murawska | self.ova_package = _GetFullFilename("ova.ova") |
376 | 1e6fab60 | Agata Murawska | self.empty_ovf = _GetFullFilename("empty.ovf") |
377 | 1e6fab60 | Agata Murawska | self.wrong_extension = _GetFullFilename("wrong_extension.ovd") |
378 | 1e6fab60 | Agata Murawska | self.wrong_ova_archive = _GetFullFilename("wrong_ova.ova") |
379 | 1e6fab60 | Agata Murawska | self.no_ovf_in_ova = _GetFullFilename("no_ovf.ova") |
380 | 1e6fab60 | Agata Murawska | self.importer = None |
381 | 1e6fab60 | Agata Murawska | |
382 | 1e6fab60 | Agata Murawska | def tearDown(self): |
383 | 1e6fab60 | Agata Murawska | if self.importer: |
384 | 1e6fab60 | Agata Murawska | self.importer.Cleanup()
|
385 | 1e6fab60 | Agata Murawska | del_dir = os.path.abspath(OUTPUT_DIR) |
386 | 1e6fab60 | Agata Murawska | try:
|
387 | 1e6fab60 | Agata Murawska | shutil.rmtree(del_dir) |
388 | 1e6fab60 | Agata Murawska | except OSError: |
389 | 1e6fab60 | Agata Murawska | pass
|
390 | 1e6fab60 | Agata Murawska | |
391 | 1e6fab60 | Agata Murawska | def testFileDoesNotExistError(self): |
392 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "does not exist", |
393 | 1e6fab60 | Agata Murawska | ovf.OVFImporter, self.non_existing_file, None) |
394 | 1e6fab60 | Agata Murawska | |
395 | 1e6fab60 | Agata Murawska | def testWrongInputFileExtensionError(self): |
396 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
397 | 1e6fab60 | Agata Murawska | "Unknown file extension", ovf.OVFImporter,
|
398 | 1e6fab60 | Agata Murawska | self.wrong_extension, None) |
399 | 1e6fab60 | Agata Murawska | |
400 | 1e6fab60 | Agata Murawska | def testOVAUnpackingDirectories(self): |
401 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.ova_package, OPTS_EMPTY) |
402 | 1e6fab60 | Agata Murawska | self.assertTrue(self.importer.input_dir != None) |
403 | a56625a2 | Michael Hanselmann | self.assertEquals(self.importer.output_dir , pathutils.EXPORT_DIR) |
404 | 1e6fab60 | Agata Murawska | self.assertTrue(self.importer.temp_dir != None) |
405 | 1e6fab60 | Agata Murawska | |
406 | 1e6fab60 | Agata Murawska | def testOVFUnpackingDirectories(self): |
407 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.virtualbox_ovf, |
408 | 1e6fab60 | Agata Murawska | OPTS_EMPTY) |
409 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.input_dir , _GetFullFilename("")) |
410 | a56625a2 | Michael Hanselmann | self.assertEquals(self.importer.output_dir , pathutils.EXPORT_DIR) |
411 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.temp_dir , None) |
412 | 1e6fab60 | Agata Murawska | |
413 | 1e6fab60 | Agata Murawska | def testOVFSetOutputDirDirectories(self): |
414 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT) |
415 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.input_dir , _GetFullFilename("")) |
416 | 1e6fab60 | Agata Murawska | self.assertTrue(OUTPUT_DIR in self.importer.output_dir) |
417 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.temp_dir , None) |
418 | 1e6fab60 | Agata Murawska | |
419 | 1e6fab60 | Agata Murawska | def testWrongOVAArchiveError(self): |
420 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "not a proper tar", |
421 | 1e6fab60 | Agata Murawska | ovf.OVFImporter, self.wrong_ova_archive, None) |
422 | 1e6fab60 | Agata Murawska | |
423 | 1e6fab60 | Agata Murawska | def testNoOVFFileInOVAPackageError(self): |
424 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "No .ovf file", |
425 | 1e6fab60 | Agata Murawska | ovf.OVFImporter, self.no_ovf_in_ova, None) |
426 | 1e6fab60 | Agata Murawska | |
427 | 1e6fab60 | Agata Murawska | def testParseGanetiOvf(self): |
428 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT_NO_NAME) |
429 | 1e6fab60 | Agata Murawska | self.importer.Parse()
|
430 | 1e6fab60 | Agata Murawska | self.assertTrue("%s/ganeti-test-xen" % OUTPUT_DIR in |
431 | 1e6fab60 | Agata Murawska | self.importer.output_dir)
|
432 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_disk, GANETI_DISKS) |
433 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_network, GANETI_NETWORKS) |
434 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_hypervisor, GANETI_HYPERVISOR) |
435 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_os, GANETI_OS) |
436 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_backend, GANETI_BACKEND) |
437 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_name, GANETI_NAME) |
438 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_template, GANETI_TEMPLATE) |
439 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_tags, GANETI_TAGS) |
440 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_version, GANETI_VERSION) |
441 | 1e6fab60 | Agata Murawska | |
442 | 1e6fab60 | Agata Murawska | def testParseVirtualboxOvf(self): |
443 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.virtualbox_ovf, OPTS_VBOX) |
444 | 1e6fab60 | Agata Murawska | self.importer.Parse()
|
445 | 1e6fab60 | Agata Murawska | self.assertTrue("%s/test-instance" % OUTPUT_DIR in self.importer.output_dir) |
446 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_disk, VIRTUALBOX_DISKS) |
447 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_network, VIRTUALBOX_NETWORKS) |
448 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_hypervisor, CMDARGS_HYPERVISOR) |
449 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_os, CMDARGS_OS) |
450 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_backend, VIRTUALBOX_BACKEND) |
451 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_name, CMDARGS_NAME) |
452 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_template, VIRTUALBOX_TEMPLATE) |
453 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_tags, VIRTUALBOX_TAGS) |
454 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_version, constants.EXPORT_VERSION) |
455 | 1e6fab60 | Agata Murawska | |
456 | 1e6fab60 | Agata Murawska | def testParseEmptyOvf(self): |
457 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
458 | 1e6fab60 | Agata Murawska | self.importer.Parse()
|
459 | 1e6fab60 | Agata Murawska | self.assertTrue("%s/test-instance" % OUTPUT_DIR in self.importer.output_dir) |
460 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_disk, CMDARGS_DISKS) |
461 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_network, CMDARGS_NETWORKS) |
462 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_hypervisor, CMDARGS_HYPERVISOR) |
463 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_os, CMDARGS_OS) |
464 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_backend, CMDARGS_BACKEND) |
465 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_name, CMDARGS_NAME) |
466 | 1e6fab60 | Agata Murawska | self.assertEquals(self.importer.results_template, CMDARGS_TEMPLATE) |
467 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_tags, CMDARGS_TAGS) |
468 | 1e6fab60 | Agata Murawska | self.assertEqual(self.importer.results_version, constants.EXPORT_VERSION) |
469 | 1e6fab60 | Agata Murawska | |
470 | 1e6fab60 | Agata Murawska | def testParseNameOptions(self): |
471 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
472 | 1e6fab60 | Agata Murawska | results = self.importer._ParseNameOptions()
|
473 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_NAME)
|
474 | 1e6fab60 | Agata Murawska | |
475 | 1e6fab60 | Agata Murawska | def testParseHypervisorOptions(self): |
476 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
477 | 1e6fab60 | Agata Murawska | results = self.importer._ParseHypervisorOptions()
|
478 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_HYPERVISOR)
|
479 | 1e6fab60 | Agata Murawska | |
480 | 1e6fab60 | Agata Murawska | def testParseOSOptions(self): |
481 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
482 | 1e6fab60 | Agata Murawska | results = self.importer._ParseOSOptions()
|
483 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_OS)
|
484 | 1e6fab60 | Agata Murawska | |
485 | 1e6fab60 | Agata Murawska | def testParseBackendOptions(self): |
486 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
487 | 1e6fab60 | Agata Murawska | results = self.importer._ParseBackendOptions()
|
488 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_BACKEND)
|
489 | 1e6fab60 | Agata Murawska | |
490 | 1e6fab60 | Agata Murawska | def testParseTags(self): |
491 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
492 | 1e6fab60 | Agata Murawska | results = self.importer._ParseTags()
|
493 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_TAGS)
|
494 | 1e6fab60 | Agata Murawska | |
495 | 1e6fab60 | Agata Murawska | def testParseNicOptions(self): |
496 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
497 | 1e6fab60 | Agata Murawska | results = self.importer._ParseNicOptions()
|
498 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_NETWORKS)
|
499 | 1e6fab60 | Agata Murawska | |
500 | 1e6fab60 | Agata Murawska | def testParseDiskOptionsFromGanetiOVF(self): |
501 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT) |
502 | 1e6fab60 | Agata Murawska | os.mkdir(OUTPUT_DIR) |
503 | 1e6fab60 | Agata Murawska | results = self.importer._GetDiskInfo()
|
504 | 1e6fab60 | Agata Murawska | self.assertEquals(results, GANETI_DISKS)
|
505 | 1e6fab60 | Agata Murawska | |
506 | 1e6fab60 | Agata Murawska | def testParseTemplateOptions(self): |
507 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
508 | 1e6fab60 | Agata Murawska | results = self.importer._ParseTemplateOptions()
|
509 | 1e6fab60 | Agata Murawska | self.assertEquals(results, GANETI_TEMPLATE)
|
510 | 1e6fab60 | Agata Murawska | |
511 | 1e6fab60 | Agata Murawska | def testParseDiskOptionsFromCmdLine(self): |
512 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_COMPLETE) |
513 | 1e6fab60 | Agata Murawska | os.mkdir(OUTPUT_DIR) |
514 | 1e6fab60 | Agata Murawska | results = self.importer._ParseDiskOptions()
|
515 | 1e6fab60 | Agata Murawska | self.assertEquals(results, CMDARGS_DISKS)
|
516 | 1e6fab60 | Agata Murawska | |
517 | 1e6fab60 | Agata Murawska | def testGetDiskFormat(self): |
518 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.ganeti_ovf, OPTS_EXPORT) |
519 | 1e6fab60 | Agata Murawska | disks_list = self.importer.ovf_reader.GetDisksNames()
|
520 | 1e6fab60 | Agata Murawska | results = [self.importer._GetDiskQemuInfo("%s/%s" % |
521 | 1e6fab60 | Agata Murawska | (self.importer.input_dir, path), "file format: (\S+)") |
522 | 1e6fab60 | Agata Murawska | for (path, _) in disks_list] |
523 | 1e6fab60 | Agata Murawska | self.assertEqual(results, ["vmdk"]) |
524 | 1e6fab60 | Agata Murawska | |
525 | 1e6fab60 | Agata Murawska | def testNoInstanceNameOVF(self): |
526 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_EXPORT_NO_NAME) |
527 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "Name of instance", |
528 | 1e6fab60 | Agata Murawska | self.importer.Parse)
|
529 | 1e6fab60 | Agata Murawska | |
530 | 1e6fab60 | Agata Murawska | def testErrorNoOSNameOVF(self): |
531 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.virtualbox_ovf, OPTS_EXPORT) |
532 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "OS name", |
533 | 1e6fab60 | Agata Murawska | self.importer.Parse)
|
534 | 1e6fab60 | Agata Murawska | |
535 | 1e6fab60 | Agata Murawska | def testErrorNoDiskAndNoNetwork(self): |
536 | 1e6fab60 | Agata Murawska | self.importer = ovf.OVFImporter(self.empty_ovf, OPTS_NONIC_NODISK) |
537 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
538 | 1e6fab60 | Agata Murawska | "Either disk specification or network"
|
539 | 1e6fab60 | Agata Murawska | " description", self.importer.Parse) |
540 | 1e6fab60 | Agata Murawska | |
541 | 1e6fab60 | Agata Murawska | |
542 | d92518d3 | Agata Murawska | class TestOVFExporter(BetterUnitTest): |
543 | d92518d3 | Agata Murawska | def setUp(self): |
544 | d92518d3 | Agata Murawska | self.exporter = None |
545 | d92518d3 | Agata Murawska | self.wrong_config_file = _GetFullFilename("wrong_config.ini") |
546 | d92518d3 | Agata Murawska | self.unsafe_path_to_disk = _GetFullFilename("unsafe_path.ini") |
547 | d92518d3 | Agata Murawska | self.disk_image_not_exist = _GetFullFilename("no_disk.ini") |
548 | d92518d3 | Agata Murawska | self.empty_config = _GetFullFilename("empty.ini") |
549 | d92518d3 | Agata Murawska | self.standard_export = _GetFullFilename("config.ini") |
550 | d92518d3 | Agata Murawska | self.wrong_network_mode = self.disk_image_not_exist |
551 | d92518d3 | Agata Murawska | self.no_memory = self.disk_image_not_exist |
552 | d92518d3 | Agata Murawska | self.no_vcpus = self.disk_image_not_exist |
553 | d92518d3 | Agata Murawska | self.no_os = _GetFullFilename("no_os.ini") |
554 | d92518d3 | Agata Murawska | self.no_hypervisor = self.disk_image_not_exist |
555 | d92518d3 | Agata Murawska | |
556 | d92518d3 | Agata Murawska | def tearDown(self): |
557 | d92518d3 | Agata Murawska | if self.exporter: |
558 | d92518d3 | Agata Murawska | self.exporter.Cleanup()
|
559 | d92518d3 | Agata Murawska | del_dir = os.path.abspath(OUTPUT_DIR) |
560 | d92518d3 | Agata Murawska | try:
|
561 | d92518d3 | Agata Murawska | shutil.rmtree(del_dir) |
562 | d92518d3 | Agata Murawska | except OSError: |
563 | d92518d3 | Agata Murawska | pass
|
564 | d92518d3 | Agata Murawska | |
565 | d92518d3 | Agata Murawska | def testErrorWrongConfigFile(self): |
566 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
567 | d92518d3 | Agata Murawska | "Error when trying to read", ovf.OVFExporter,
|
568 | d92518d3 | Agata Murawska | self.wrong_config_file, EXP_OPTS)
|
569 | d92518d3 | Agata Murawska | |
570 | d92518d3 | Agata Murawska | def testErrorPathToTheDiskIncorrect(self): |
571 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.unsafe_path_to_disk, EXP_OPTS) |
572 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "contains a directory name", |
573 | d92518d3 | Agata Murawska | self.exporter._ParseDisks)
|
574 | d92518d3 | Agata Murawska | |
575 | d92518d3 | Agata Murawska | def testErrorDiskImageNotExist(self): |
576 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.disk_image_not_exist, EXP_OPTS) |
577 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "Disk image does not exist", |
578 | d92518d3 | Agata Murawska | self.exporter._ParseDisks)
|
579 | d92518d3 | Agata Murawska | |
580 | d92518d3 | Agata Murawska | def testParseNetworks(self): |
581 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.standard_export, EXP_OPTS) |
582 | d92518d3 | Agata Murawska | results = self.exporter._ParseNetworks()
|
583 | d92518d3 | Agata Murawska | self.assertEqual(results, EXP_NETWORKS_LIST)
|
584 | d92518d3 | Agata Murawska | |
585 | d92518d3 | Agata Murawska | def testErrorWrongNetworkMode(self): |
586 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.wrong_network_mode, EXP_OPTS) |
587 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
588 | d92518d3 | Agata Murawska | "Network mode nic not recognized", self.exporter._ParseNetworks) |
589 | d92518d3 | Agata Murawska | |
590 | d92518d3 | Agata Murawska | def testParseVCPusMem(self): |
591 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.standard_export, EXP_OPTS) |
592 | d92518d3 | Agata Murawska | vcpus = self.exporter._ParseVCPUs()
|
593 | d92518d3 | Agata Murawska | memory = self.exporter._ParseMemory()
|
594 | d92518d3 | Agata Murawska | self.assertEqual(vcpus, EXP_VCPUS)
|
595 | d92518d3 | Agata Murawska | self.assertEqual(memory, EXP_MEMORY)
|
596 | d92518d3 | Agata Murawska | |
597 | d92518d3 | Agata Murawska | def testErrorNoVCPUs(self): |
598 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.no_vcpus, EXP_OPTS) |
599 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "No CPU information found", |
600 | d92518d3 | Agata Murawska | self.exporter._ParseVCPUs)
|
601 | d92518d3 | Agata Murawska | |
602 | d92518d3 | Agata Murawska | def testErrorNoMemory(self): |
603 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.no_memory, EXP_OPTS) |
604 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "No memory information found", |
605 | d92518d3 | Agata Murawska | self.exporter._ParseMemory)
|
606 | d92518d3 | Agata Murawska | |
607 | d92518d3 | Agata Murawska | def testParseGaneti(self): |
608 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.standard_export, EXP_OPTS) |
609 | d92518d3 | Agata Murawska | results = self.exporter._ParseGaneti()
|
610 | d92518d3 | Agata Murawska | self.assertEqual(results, EXP_GANETI_DICT)
|
611 | d92518d3 | Agata Murawska | |
612 | d92518d3 | Agata Murawska | def testErrorNoHypervisor(self): |
613 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.no_hypervisor, EXP_OPTS) |
614 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
615 | d92518d3 | Agata Murawska | "No hypervisor information found", self.exporter._ParseGaneti) |
616 | d92518d3 | Agata Murawska | |
617 | d92518d3 | Agata Murawska | def testErrorNoOS(self): |
618 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.no_os, EXP_OPTS) |
619 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
620 | d92518d3 | Agata Murawska | "No operating system information found", self.exporter._ParseGaneti) |
621 | d92518d3 | Agata Murawska | |
622 | d92518d3 | Agata Murawska | def testErrorParseNoInstanceName(self): |
623 | d92518d3 | Agata Murawska | self.exporter = ovf.OVFExporter(self.empty_config, EXP_OPTS) |
624 | d92518d3 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "No instance name found", |
625 | d92518d3 | Agata Murawska | self.exporter.Parse)
|
626 | d92518d3 | Agata Murawska | |
627 | d92518d3 | Agata Murawska | |
628 | 1e6fab60 | Agata Murawska | class TestOVFReader(BetterUnitTest): |
629 | 1e6fab60 | Agata Murawska | def setUp(self): |
630 | 1e6fab60 | Agata Murawska | self.wrong_xml_file = _GetFullFilename("wrong_xml.ovf") |
631 | 1e6fab60 | Agata Murawska | self.ganeti_ovf = _GetFullFilename("ganeti.ovf") |
632 | 1e6fab60 | Agata Murawska | self.virtualbox_ovf = _GetFullFilename("virtualbox.ovf") |
633 | 1e6fab60 | Agata Murawska | self.corrupted_ovf = _GetFullFilename("corrupted_resources.ovf") |
634 | 1e6fab60 | Agata Murawska | self.wrong_manifest_ovf = _GetFullFilename("wrong_manifest.ovf") |
635 | 1e6fab60 | Agata Murawska | self.no_disk_in_ref_ovf = _GetFullFilename("no_disk_in_ref.ovf") |
636 | 1e6fab60 | Agata Murawska | self.empty_ovf = _GetFullFilename("empty.ovf") |
637 | 1e6fab60 | Agata Murawska | self.compressed_disk = _GetFullFilename("gzip_disk.ovf") |
638 | 1e6fab60 | Agata Murawska | |
639 | 1e6fab60 | Agata Murawska | def tearDown(self): |
640 | 1e6fab60 | Agata Murawska | pass
|
641 | 1e6fab60 | Agata Murawska | |
642 | 1e6fab60 | Agata Murawska | def testXMLParsingError(self): |
643 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
644 | 1e6fab60 | Agata Murawska | "Error while reading .ovf", ovf.OVFReader, self.wrong_xml_file) |
645 | 1e6fab60 | Agata Murawska | |
646 | 1e6fab60 | Agata Murawska | def testFileInResourcesDoesNotExistError(self): |
647 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError, "does not exist", |
648 | 1e6fab60 | Agata Murawska | ovf.OVFReader, self.corrupted_ovf)
|
649 | 1e6fab60 | Agata Murawska | |
650 | 1e6fab60 | Agata Murawska | def testWrongManifestChecksumError(self): |
651 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.wrong_manifest_ovf)
|
652 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
653 | 1e6fab60 | Agata Murawska | "does not match the value in manifest file", reader.VerifyManifest)
|
654 | 1e6fab60 | Agata Murawska | |
655 | 1e6fab60 | Agata Murawska | def testGoodManifestChecksum(self): |
656 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
657 | 1e6fab60 | Agata Murawska | self.assertEqual(reader.VerifyManifest(), None) |
658 | 1e6fab60 | Agata Murawska | |
659 | 1e6fab60 | Agata Murawska | def testGetDisksNamesOVFCorruptedError(self): |
660 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.no_disk_in_ref_ovf)
|
661 | 1e6fab60 | Agata Murawska | self.assertRaisesRegexp(errors.OpPrereqError,
|
662 | 1e6fab60 | Agata Murawska | "not found in references", reader.GetDisksNames)
|
663 | 1e6fab60 | Agata Murawska | |
664 | 1e6fab60 | Agata Murawska | def testGetDisksNamesVirtualbox(self): |
665 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.virtualbox_ovf)
|
666 | 1e6fab60 | Agata Murawska | disk_names = reader.GetDisksNames() |
667 | 1e6fab60 | Agata Murawska | expected_names = [ |
668 | 1e6fab60 | Agata Murawska | ("new_disk.vmdk", None) , |
669 | 1e6fab60 | Agata Murawska | ("second_disk.vmdk", None), |
670 | 1e6fab60 | Agata Murawska | ] |
671 | 1e6fab60 | Agata Murawska | self.assertEqual(sorted(disk_names), sorted(expected_names)) |
672 | 1e6fab60 | Agata Murawska | |
673 | 1e6fab60 | Agata Murawska | def testGetDisksNamesEmpty(self): |
674 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
675 | 1e6fab60 | Agata Murawska | disk_names = reader.GetDisksNames() |
676 | 1e6fab60 | Agata Murawska | self.assertEqual(disk_names, [])
|
677 | 1e6fab60 | Agata Murawska | |
678 | 1e6fab60 | Agata Murawska | def testGetDisksNamesCompressed(self): |
679 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.compressed_disk)
|
680 | 1e6fab60 | Agata Murawska | disk_names = reader.GetDisksNames() |
681 | 1e6fab60 | Agata Murawska | self.assertEqual(disk_names, [("compr_disk.vmdk.gz", "gzip")]) |
682 | 1e6fab60 | Agata Murawska | |
683 | 1e6fab60 | Agata Murawska | def testGetNetworkDataGaneti(self): |
684 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
685 | 1e6fab60 | Agata Murawska | networks = reader.GetNetworkData() |
686 | 1e6fab60 | Agata Murawska | self.assertEqual(networks, GANETI_NETWORKS)
|
687 | 1e6fab60 | Agata Murawska | |
688 | 1e6fab60 | Agata Murawska | def testGetNetworkDataVirtualbox(self): |
689 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.virtualbox_ovf)
|
690 | 1e6fab60 | Agata Murawska | networks = reader.GetNetworkData() |
691 | 1e6fab60 | Agata Murawska | self.assertEqual(networks, VIRTUALBOX_NETWORKS)
|
692 | 1e6fab60 | Agata Murawska | |
693 | 1e6fab60 | Agata Murawska | def testGetNetworkDataEmpty(self): |
694 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
695 | 1e6fab60 | Agata Murawska | networks = reader.GetNetworkData() |
696 | 1e6fab60 | Agata Murawska | self.assertEqual(networks, EMPTY_NETWORKS)
|
697 | 1e6fab60 | Agata Murawska | |
698 | 1e6fab60 | Agata Murawska | def testGetHypervisorDataGaneti(self): |
699 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
700 | 1e6fab60 | Agata Murawska | hypervisor = reader.GetHypervisorData() |
701 | 1e6fab60 | Agata Murawska | self.assertEqual(hypervisor, GANETI_HYPERVISOR)
|
702 | 1e6fab60 | Agata Murawska | |
703 | 1e6fab60 | Agata Murawska | def testGetHypervisorDataEmptyOvf(self): |
704 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
705 | 1e6fab60 | Agata Murawska | hypervisor = reader.GetHypervisorData() |
706 | 1e6fab60 | Agata Murawska | self.assertEqual(hypervisor, EMPTY_HYPERVISOR)
|
707 | 1e6fab60 | Agata Murawska | |
708 | 1e6fab60 | Agata Murawska | def testGetOSDataGaneti(self): |
709 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
710 | 1e6fab60 | Agata Murawska | osys = reader.GetOSData() |
711 | 1e6fab60 | Agata Murawska | self.assertEqual(osys, GANETI_OS)
|
712 | 1e6fab60 | Agata Murawska | |
713 | 1e6fab60 | Agata Murawska | def testGetOSDataEmptyOvf(self): |
714 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
715 | 1e6fab60 | Agata Murawska | osys = reader.GetOSData() |
716 | 1e6fab60 | Agata Murawska | self.assertEqual(osys, EMPTY_OS)
|
717 | 1e6fab60 | Agata Murawska | |
718 | 1e6fab60 | Agata Murawska | def testGetBackendDataGaneti(self): |
719 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
720 | 1e6fab60 | Agata Murawska | backend = reader.GetBackendData() |
721 | 1e6fab60 | Agata Murawska | self.assertEqual(backend, GANETI_BACKEND)
|
722 | 1e6fab60 | Agata Murawska | |
723 | 1e6fab60 | Agata Murawska | def testGetBackendDataVirtualbox(self): |
724 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.virtualbox_ovf)
|
725 | 1e6fab60 | Agata Murawska | backend = reader.GetBackendData() |
726 | 1e6fab60 | Agata Murawska | self.assertEqual(backend, VIRTUALBOX_BACKEND)
|
727 | 1e6fab60 | Agata Murawska | |
728 | 1e6fab60 | Agata Murawska | def testGetBackendDataEmptyOvf(self): |
729 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
730 | 1e6fab60 | Agata Murawska | backend = reader.GetBackendData() |
731 | 1e6fab60 | Agata Murawska | self.assertEqual(backend, EMPTY_BACKEND)
|
732 | 1e6fab60 | Agata Murawska | |
733 | 1e6fab60 | Agata Murawska | def testGetInstanceNameGaneti(self): |
734 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
735 | 1e6fab60 | Agata Murawska | name = reader.GetInstanceName() |
736 | 1e6fab60 | Agata Murawska | self.assertEqual(name, GANETI_NAME)
|
737 | 1e6fab60 | Agata Murawska | |
738 | 1e6fab60 | Agata Murawska | def testGetInstanceNameDataEmptyOvf(self): |
739 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
740 | 1e6fab60 | Agata Murawska | name = reader.GetInstanceName() |
741 | 1e6fab60 | Agata Murawska | self.assertEqual(name, EMPTY_NAME)
|
742 | 1e6fab60 | Agata Murawska | |
743 | 1e6fab60 | Agata Murawska | def testGetDiskTemplateGaneti(self): |
744 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
745 | 1e6fab60 | Agata Murawska | name = reader.GetDiskTemplate() |
746 | 1e6fab60 | Agata Murawska | self.assertEqual(name, GANETI_TEMPLATE)
|
747 | 1e6fab60 | Agata Murawska | |
748 | 1e6fab60 | Agata Murawska | def testGetDiskTemplateEmpty(self): |
749 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
750 | 1e6fab60 | Agata Murawska | name = reader.GetDiskTemplate() |
751 | 1e6fab60 | Agata Murawska | self.assertEqual(name, EMPTY_TEMPLATE)
|
752 | 1e6fab60 | Agata Murawska | |
753 | 1e6fab60 | Agata Murawska | def testGetTagsGaneti(self): |
754 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
755 | 1e6fab60 | Agata Murawska | tags = reader.GetTagsData() |
756 | 1e6fab60 | Agata Murawska | self.assertEqual(tags, GANETI_TAGS)
|
757 | 1e6fab60 | Agata Murawska | |
758 | 1e6fab60 | Agata Murawska | def testGetTagsEmpty(self): |
759 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
760 | 1e6fab60 | Agata Murawska | tags = reader.GetTagsData() |
761 | 1e6fab60 | Agata Murawska | self.assertEqual(tags, EMPTY_TAGS)
|
762 | 1e6fab60 | Agata Murawska | |
763 | 1e6fab60 | Agata Murawska | def testGetVersionGaneti(self): |
764 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.ganeti_ovf)
|
765 | 1e6fab60 | Agata Murawska | version = reader.GetVersionData() |
766 | 1e6fab60 | Agata Murawska | self.assertEqual(version, GANETI_VERSION)
|
767 | 1e6fab60 | Agata Murawska | |
768 | 1e6fab60 | Agata Murawska | def testGetVersionEmpty(self): |
769 | 1e6fab60 | Agata Murawska | reader = ovf.OVFReader(self.empty_ovf)
|
770 | 1e6fab60 | Agata Murawska | version = reader.GetVersionData() |
771 | 1e6fab60 | Agata Murawska | self.assertEqual(version, EMPTY_VERSION)
|
772 | 1e6fab60 | Agata Murawska | |
773 | 1e6fab60 | Agata Murawska | |
774 | d92518d3 | Agata Murawska | class TestOVFWriter(BetterUnitTest): |
775 | d92518d3 | Agata Murawska | def setUp(self): |
776 | d92518d3 | Agata Murawska | self.writer = ovf.OVFWriter(True) |
777 | d92518d3 | Agata Murawska | |
778 | d92518d3 | Agata Murawska | def tearDown(self): |
779 | d92518d3 | Agata Murawska | pass
|
780 | d92518d3 | Agata Murawska | |
781 | d92518d3 | Agata Murawska | def testOVFWriterInit(self): |
782 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
783 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_EMPTY in result) |
784 | d92518d3 | Agata Murawska | |
785 | d92518d3 | Agata Murawska | def testSaveDisksDataEmpty(self): |
786 | d92518d3 | Agata Murawska | self.writer.SaveDisksData([])
|
787 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
788 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_DISKS_EMPTY in result) |
789 | d92518d3 | Agata Murawska | |
790 | d92518d3 | Agata Murawska | def testSaveDisksData(self): |
791 | d92518d3 | Agata Murawska | self.writer.SaveDisksData(EXP_DISKS_LIST)
|
792 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
793 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_DISKS in result) |
794 | d92518d3 | Agata Murawska | |
795 | d92518d3 | Agata Murawska | def testSaveNetworkDataEmpty(self): |
796 | d92518d3 | Agata Murawska | self.writer.SaveNetworksData([])
|
797 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
798 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_NETWORKS_EMPTY in result) |
799 | d92518d3 | Agata Murawska | |
800 | d92518d3 | Agata Murawska | def testSaveNetworksData(self): |
801 | d92518d3 | Agata Murawska | self.writer.SaveNetworksData(EXP_NETWORKS_LIST)
|
802 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
803 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_NETWORKS in result) |
804 | d92518d3 | Agata Murawska | |
805 | d92518d3 | Agata Murawska | def testSaveGanetiDataIncomplete(self): |
806 | d92518d3 | Agata Murawska | self.writer.SaveGanetiData(EXP_PARTIAL_GANETI_DICT, EXP_NETWORKS_LIST)
|
807 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
808 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_GANETI_INCOMPLETE in result) |
809 | d92518d3 | Agata Murawska | |
810 | d92518d3 | Agata Murawska | def testSaveGanetiDataComplete(self): |
811 | d92518d3 | Agata Murawska | self.writer.SaveGanetiData(EXP_GANETI_DICT, EXP_NETWORKS_LIST)
|
812 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
813 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_GANETI in result) |
814 | d92518d3 | Agata Murawska | |
815 | d92518d3 | Agata Murawska | def testSaveVirtualSystem(self): |
816 | d92518d3 | Agata Murawska | self.writer.SaveDisksData(EXP_DISKS_LIST)
|
817 | d92518d3 | Agata Murawska | self.writer.SaveNetworksData(EXP_NETWORKS_LIST)
|
818 | d92518d3 | Agata Murawska | self.writer.SaveVirtualSystemData(EXP_NAME, EXP_VCPUS, EXP_MEMORY)
|
819 | d92518d3 | Agata Murawska | result = ET.tostring(self.writer.tree)
|
820 | d92518d3 | Agata Murawska | self.assertTrue(EXPORT_SYSTEM in result) |
821 | d92518d3 | Agata Murawska | |
822 | d92518d3 | Agata Murawska | |
823 | 1e6fab60 | Agata Murawska | if __name__ == "__main__": |
824 | 1e6fab60 | Agata Murawska | testutils.GanetiTestProgram() |