+ else:
+ raise AssertionError("Unknown mode %s" % mode)
+ _SetupTempOs(node, dirname, variant, valid)
+
+ # TODO: Use Python 2.6's itertools.permutations
+ for (hidden, blacklisted) in [(False, False), (True, False),
+ (False, True), (True, True)]:
+ # Change OS' visibility
+ cmd = ["gnt-os", "modify", "--hidden", ["no", "yes"][int(hidden)],
+ "--blacklisted", ["no", "yes"][int(blacklisted)], name]
+ AssertCommand(cmd)
+
+ # Diagnose, checking exit status
+ AssertCommand(["gnt-os", "diagnose"], fail=(mode != _ALL_VALID))
+
+ # Diagnose again, ignoring exit status
+ output = qa_utils.GetCommandOutput(master.primary,
+ "gnt-os diagnose || :")
+ for line in output.splitlines():
+ if line.startswith("OS: %s [global status:" % name):
+ break
+ else:
+ raise qa_error.Error("Didn't find OS '%s' in 'gnt-os diagnose'" % name)
+
+ # Check info for all
+ cmd = ["gnt-os", "info"]
+ output = qa_utils.GetCommandOutput(master.primary,
+ utils.ShellQuoteArgs(cmd))
+ AssertIn("%s:" % name, output.splitlines())
+
+ # Check info for OS
+ cmd = ["gnt-os", "info", name]
+ output = qa_utils.GetCommandOutput(master.primary,
+ utils.ShellQuoteArgs(cmd)).splitlines()
+ AssertIn("%s:" % name, output)
+ for (field, value) in [("valid", mode == _ALL_VALID),
+ ("hidden", hidden),
+ ("blacklisted", blacklisted)]:
+ AssertIn(" - %s: %s" % (field, value), output)
+
+ # Only valid OSes should be listed
+ cmd = ["gnt-os", "list", "--no-headers"]
+ output = qa_utils.GetCommandOutput(master.primary,
+ utils.ShellQuoteArgs(cmd))
+ if mode == _ALL_VALID and not (hidden or blacklisted):
+ assert_fn = AssertIn
+ else:
+ assert_fn = AssertNotIn
+ assert_fn(fullname, output.splitlines())
+
+ # Check via RAPI
+ if rapi_cb:
+ assert_fn(fullname, rapi_cb())