2 from tests
.baseclass
import *
4 from pykickstart
.base
import *
5 from pykickstart
.errors
import *
6 from pykickstart
.version
import *
7 from pykickstart
.commands
.logvol
import *
9 class FC3_TestCase(CommandTest
):
13 if "--bytes-per-inode" in self
.optionList
:
14 self
.bytesPerInode
= "--bytes-per-inode=4096 "
16 self
.bytesPerInode
= ""
19 self
.assert_parse("logvol / --size=10240 --name=NAME --vgname=VGNAME",
20 "logvol / --size=10240 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
22 self
.assert_parse("logvol / --fstype=\"BLAFS\" --size=10240 --name=NAME --vgname=VGNAME",
23 "logvol / --fstype=\"BLAFS\" --size=10240 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
25 self
.assert_parse("logvol / --grow --size=10240 --name=NAME --vgname=VGNAME",
26 "logvol / --grow --size=10240 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
28 self
.assert_parse("logvol / --size=1024 --name=NAME --vgname=VGNAME",
29 "logvol / --size=1024 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
31 self
.assert_parse("logvol / --maxsize=2048 --size=1024 --name=NAME --vgname=VGNAME",
32 "logvol / --maxsize=2048 --size=1024 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
34 self
.assert_parse("logvol / --maxsize=2048 --recommended --size=1024 --name=NAME --vgname=VGNAME",
35 "logvol / --maxsize=2048 --recommended --size=1024 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
37 self
.assert_parse("logvol / --percent=10 --name=NAME --vgname=VGNAME",
38 "logvol / --percent=10 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
40 # FIXME - should --noformat also be adding --useexisting (seems counter
41 # to posted documentation
42 # http://fedoraproject.org/wiki/Anaconda/Kickstart)
43 self
.assert_parse("logvol / --noformat --name=NAME --vgname=VGNAME",
44 "logvol / --noformat --useexisting %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
46 self
.assert_parse("logvol / --useexisting --name=NAME --vgname=VGNAME",
47 "logvol / --useexisting %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
50 self
.assert_type("logvol", "size", "int")
51 self
.assert_type("logvol", "maxsize", "int")
52 self
.assert_type("logvol", "percent", "int")
54 # fail - incorrect type
55 self
.assert_parse_error("logvol / --name=NAME --vgname=VGNAME --size=SIZE", KickstartParseError
, "option --size: invalid integer value: 'SIZE'")
56 self
.assert_parse_error("logvol / --name=NAME --vgname=VGNAME --maxsize=MAXSIZE", KickstartParseError
, "option --maxsize: invalid integer value: 'MAXSIZE'")
57 self
.assert_parse_error("logvol / --name=NAME --vgname=VGNAME --percent=PCT", KickstartParseError
, "option --percent: invalid integer value: 'PCT'")
59 # assert required options
60 self
.assert_required("logvol", "name")
61 self
.assert_required("logvol", "vgname")
63 # fail - missing required
64 self
.assert_parse_error("logvol / --name=NAME", KickstartValueError
, "Option --vgname is required")
65 self
.assert_parse_error("logvol / --vgname=NAME", KickstartValueError
, "Option --name is required")
67 # fail - missing a mountpoint
68 self
.assert_parse_error("logvol", KickstartValueError
, "Option --name is required")
69 self
.assert_parse_error("logvol --name=NAME", KickstartValueError
, "Option --vgname is required")
70 self
.assert_parse_error("logvol --vgname=NAME", KickstartValueError
, "Option --name is required")
72 class FC4_TestCase(FC3_TestCase
):
75 # run our baseclass tests first ... but add --bytes-per-inode to each
77 FC3_TestCase
.runTest(self
)
80 if "--fsoptions" in self
.optionList
:
81 self
.assert_parse("logvol / --fstype=\"BLAFS\" --size=1024 --fsoptions=\"ABC 123\" --name=NAME --vgname=VGNAME",
82 "logvol / --fstype=\"BLAFS\" --size=1024 %s--fsoptions=\"ABC 123\" --name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
84 if "--bytes-per-inode" in self
.optionList
:
85 # --bytes-per-inode explicit
86 self
.assert_parse("logvol / --bytes-per-inode=123 --name=NAME --vgname=VGNAME",
87 "logvol / --bytes-per-inode=123 --name=NAME --vgname=VGNAME\n")
90 self
.assert_type("logvol", "bytes-per-inode", "int")
92 # fail - incorrect type
93 self
.assert_parse_error("logvol / --bytes-per-inode B --name=NAME --vgname=VGNAME", KickstartParseError
, "option --bytes-per-inode: invalid integer value: 'B'")
95 # fail - missing value
96 self
.assert_parse_error("logvol / --bytes-per-inode --name=NAME --vgname=VGNAME", KickstartParseError
, "option --bytes-per-inode: invalid integer value: '--name=NAME'")
97 self
.assert_parse_error("logvol / --name=NAME --vgname=VGNAME --bytes-per-inode", KickstartParseError
, "--bytes-per-inode option requires an argument")
99 if "--encrypted" in self
.optionList
:
101 self
.assert_parse("logvol / --size=1024 --encrypted --name=NAME --vgname=VGNAME",
102 "logvol / --size=1024 %s--encrypted --name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
104 # Both --encrypted and --passphrase
105 self
.assert_parse("logvol / --size=1024 --encrypted --passphrase PASSPHRASE --name=NAME --vgname=VGNAME",
106 "logvol / --size=1024 %s--encrypted --passphrase=\"PASSPHRASE\" --name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
108 # Using --encrypted with --passphrase=<empty>
109 self
.assert_parse("logvol / --size=1024 --encrypted --passphrase= --name=NAME --vgname=VGNAME",
110 "logvol / --size=1024 %s--encrypted --name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
111 self
.assert_parse("logvol / --size=1024 --encrypted --passphrase=\"\" --name=NAME --vgname=VGNAME",
112 "logvol / --size=1024 %s--encrypted --name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
113 self
.assert_parse("logvol / --size=1024 --encrypted --passphrase \"\" --name=NAME --vgname=VGNAME",
114 "logvol / --size=1024 %s--encrypted --name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
116 # Just --passphrase without --encrypted
117 self
.assert_parse("logvol / --size=1024 --passphrase=\"PASSPHRASE\" --name=NAME --vgname=VGNAME",
118 "logvol / --size=1024 %s--name=NAME --vgname=VGNAME\n" % self
.bytesPerInode
)
120 # fail - missing value
121 self
.assert_parse_error("logvol / --name=NAME --vgname=VGNAME --encrypted --passphrase", KickstartParseError
, "--passphrase option requires an argument")
123 # fail - --encrypted does not take a value
124 self
.assert_parse_error("logvol / --encrypted=1 --name=NAME --vgname=VGNAME", KickstartParseError
, "--encrypted option does not take a value")
126 RHEL5_TestCase
= FC4_TestCase
128 class F9_TestCase(FC4_TestCase
):
130 # Run our baseclass tests first
131 FC4_TestCase
.runTest(self
)
134 self
.assert_type("logvol", "fsprofile", "string")
136 # fail - missing value
137 self
.assert_parse_error("logvol / --name=NAME --vgname=VGNAME --fsprofile", KickstartParseError
, "--fsprofile option requires an argument")
140 self
.assert_parse("logvol / --size=1024 --fsprofile \"FS_PROFILE\" --name=NAME --vgname=VGNAME",
141 "logvol / --size=1024 --fsprofile=\"FS_PROFILE\" --name=NAME --vgname=VGNAME\n")
143 # Ensure --bytes-per-inode has been deprecated
144 self
.assert_deprecated("logvol", "bytes-per-inode")
146 class F12_TestCase(F9_TestCase
):
148 # Run our baseclass tests first
149 F9_TestCase
.runTest(self
)
152 self
.assert_parse("logvol / --size=1024 --name=NAME --vgname=VGNAME "
153 "--escrowcert=\"http://x/y\"",
154 "logvol / --size=1024 --name=NAME --vgname=VGNAME\n")
155 self
.assert_parse("logvol / --size=1024 --encrypted --backuppassphrase --name=NAME "
157 "logvol / --size=1024 --encrypted --name=NAME --vgname=VGNAME\n")
158 self
.assert_parse("logvol / --size=1024 --encrypted --escrowcert=\"http://x/y\" "
159 "--name=NAME --vgname=VGNAME",
160 "logvol / --size=1024 --encrypted --escrowcert=\"http://x/y\" "
161 "--name=NAME --vgname=VGNAME\n")
162 self
.assert_parse("logvol / --size=1024 --encrypted --escrowcert=\"http://x/y\" "
163 "--backuppassphrase --name=NAME --vgname=VGNAME",
164 "logvol / --size=1024 --encrypted --escrowcert=\"http://x/y\" "
165 "--backuppassphrase --name=NAME --vgname=VGNAME\n")
166 self
.assert_parse("logvol / --size=1024 --encrypted --escrowcert=http://x/y "
167 "--name=NAME --vgname=VGNAME",
168 "logvol / --size=1024 --encrypted --escrowcert=\"http://x/y\" "
169 "--name=NAME --vgname=VGNAME\n")
172 self
.assert_parse_error("logvol / --escrowcert --name=NAME "
174 regex
="Option --escrowcert: invalid string value: '--name=NAME'")
175 self
.assert_parse_error("logvol / --escrowcert --backuppassphrase "
176 "--name=NAME --vgname=VGNAME",
177 regex
="Option --escrowcert: invalid string value: '--backuppassphrase'")
178 self
.assert_parse_error("logvol / --encrypted --escrowcert "
179 "--backuppassphrase --name=NAME "
181 regex
="Option --escrowcert: invalid string value: '--backuppassphrase'")
182 self
.assert_parse_error("logvol / --backuppassphrase=False --name=NAME "
184 regex
="--backuppassphrase option does not take a value")
185 self
.assert_parse_error("logvol / --backuppassphrase=True --name=NAME "
187 regex
="--backuppassphrase option does not take a value")
189 class RHEL6_TestCase(F12_TestCase
):
191 F12_TestCase
.runTest(self
)
193 self
.assert_parse("logvol / --encrypted --cipher=3-rot13 --name=NAME --vgname=VGNAME",
194 "logvol / --encrypted --cipher=\"3-rot13\" --name=NAME --vgname=VGNAME\n")
195 # Allowed here, but anaconda should complain. Note how we throw out
196 # cipher from the output if there's no --encrypted.
197 self
.assert_parse("logvol / --cipher=3-rot13 --name=NAME --vgname=VGNAME",
198 "logvol / --name=NAME --vgname=VGNAME\n")
200 self
.assert_parse_error("logvol / --cipher --name=NAME --vgname=VGNAME", regex
="Option --cipher: invalid string value: '--name=NAME'")
202 self
.assert_parse("logvol swap --hibernation "
203 "--name=NAME --vgname=VGNAME")
204 self
.assert_parse("logvol swap --recommended --hibernation "
205 "--name=NAME --vgname=VGNAME")
207 class F14_TestCase(F12_TestCase
):
209 F12_TestCase
.runTest(self
)
210 self
.assert_removed("logvol", "--bytes-per-inode")
212 class F15_TestCase(F14_TestCase
):
214 F14_TestCase
.runTest(self
)
215 self
.assert_parse("logvol / --size=1024 --name=NAME --vgname=VGNAME --label=ROOT",
216 "logvol / --size=1024 --label=\"ROOT\" --name=NAME --vgname=VGNAME\n")
218 class F17_TestCase(F15_TestCase
):
220 F15_TestCase
.runTest(self
)
221 self
.assert_parse("logvol /x --name=NAME --size 1000 --vgname=VGNAME "
222 "--useexisting --resize",
223 "logvol /x --size=1000 --useexisting --resize "
224 "--name=NAME --vgname=VGNAME\n")
225 self
.assert_parse_error("logvol /x --name=NAME --vgname=VGNAME --resize", regex
="--resize can only be used in conjunction with --useexisting")
228 self
.assert_parse_error("logvol /x --name=NAME --vgname=VGNAME --resize --size=500", regex
="--resize can only be used in conjunction with --useexisting")
231 self
.assert_parse_error("logvol /x --name=NAME --vgname=VGNAME --resize --useexisting", regex
="--resize requires --size to indicate new size")
233 class F18_TestCase(F17_TestCase
):
235 F17_TestCase
.runTest(self
)
237 self
.assert_parse("logvol swap --name=NAME --vgname=VGNAME "\
238 "--hibernation --size=1024")
239 self
.assert_parse("logvol swap --name=NAME --vgname=VGNAME "\
240 "--recommended --hibernation --size=1024")
242 self
.assert_parse("logvol / --size=1024 --encrypted --cipher=3-rot13 --name=NAME --vgname=VGNAME",
243 "logvol / --size=1024 --encrypted --cipher=\"3-rot13\" --name=NAME --vgname=VGNAME\n")
244 # Allowed here, but anaconda should complain. Note how we throw out
245 # cipher from the output if there's no --encrypted.
246 self
.assert_parse("logvol / --size=1024 --cipher=3-rot13 --name=NAME --vgname=VGNAME",
247 "logvol / --size=1024 --name=NAME --vgname=VGNAME\n")
249 self
.assert_parse_error("logvol / --cipher --name=NAME --vgname=VGNAME", regex
="Option --cipher: invalid string value: '--name=NAME'")
251 class F20_TestCase(F18_TestCase
):
253 F18_TestCase
.runTest(self
)
255 self
.assert_parse("logvol none --size=1024 --name=pool1 --vgname=vg --thinpool",
256 "logvol none --size=1024 --thinpool --name=pool1 --vgname=vg\n")
257 self
.assert_parse("logvol none --size=1024 --name=pool1 --vgname=vg "
258 "--thinpool --chunksize=512",
259 "logvol none --size=1024 --thinpool --chunksize=512 "
260 "--name=pool1 --vgname=vg\n")
261 self
.assert_parse("logvol none --size=1024 --name=pool1 --vgname=vg "
262 "--thinpool --metadatasize=4 --chunksize=1024",
263 "logvol none --size=1024 --thinpool "
264 "--metadatasize=4 --chunksize=1024 --name=pool1 "
266 self
.assert_parse("logvol /home --size=1024 --name=home --vgname=vg "
267 "--thin --poolname=pool1",
268 "logvol /home --size=1024 --thin --poolname=pool1 "
269 "--name=home --vgname=vg\n")
272 self
.assert_parse_error("logvol /home --name=home --vgname=vg --thin",
273 regex
="--thin requires --poolname to specify pool name")
275 # chunksize is an int
276 self
.assert_parse_error("logvol none --name=pool1 --vgname=vg "
277 "--thinpool --chunksize=foo",
278 regex
="option --chunksize: invalid integer value: 'foo'")
280 # both --thin and --thinpool
281 self
.assert_parse_error("logvol /home --name=home --thin --thinpool --vgname=vg --size=10000", regex
="--thin and --thinpool cannot both be specified for the same logvol")
283 # chunksize and/or metadata size and not thinpool
284 self
.assert_parse_error("logvol none --name=pool1 --vgname=vg "
286 regex
="--chunksize and --metadatasize are for thin pools only")
288 # logvol w/out specified size
289 self
.assert_parse_error("logvol none --name=pool1 --vgname=vg --thinpool",
290 regex
="No size given for logical volume")
292 # use existing logvol, which must have a size
293 self
.assert_parse("logvol none --name=pool1 --vgname=vg --thinpool --useexisting")
295 # logvol with a disallowed percent value
296 self
.assert_parse_error("logvol / --percent=1000 --name=NAME --vgname=VGNAME",
298 "Percentage must be between 0 and 100.")
300 class F21_TestCase(F20_TestCase
):
302 F20_TestCase
.runTest(self
)
304 self
.assert_parse_error("logvol /home --name=home --vgname=vg --size=2 --percent=30")
306 class RHEL7_TestCase(F20_TestCase
):
308 F20_TestCase
.runTest(self
)
310 self
.assert_parse_error("logvol /home --name=home --vgname=vg --size=2 --percent=30")
312 if __name__
== "__main__":