def test_sag_26(self): ''' Create an empty tree, so that commit can raise an exception. (The commit is done in tearDown) ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimEmptyTreeError, mim_obj.commit)
def test_sag_25(self): ''' Try to get an attribute from a missing element ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimMatchError, mim_obj.get, "/auto_install/ai_instance/software@name") mim_obj.commit(validate=False)
def test_sag_23(self): ''' Try to get an element that doesn't exist. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimMatchError, mim_obj.get, "/auto_install/ai_instance/target") mim_obj.commit(validate=False)
def test_sag_15(self): ''' Specify ambiguous element path to get(). ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimMatchError, mim_obj.get, "/auto_install/ai_instance/target/disk/") mim_obj.commit(validate=False)
def test_sag_26(self): ''' Try to create a like-tagged leaf element where not allowed ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimInvalidError, mim_obj.add, "/auto_install/ai_instance", "second") mim_obj.commit(validate=False)
def test_sag_16(self): ''' Try to set an element value but specify an ambiguity in mid path ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimMatchError, mim_obj.set, "/auto_install/ai_instance/" "target/disk", "disk3") mim_obj.commit(validate=False)
def test_sag_11(self): ''' Change value of an existing element. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.set_and_check_node(mim_obj, "/auto_install/ai_instance", "newval", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_5(self): ''' Set same attribute again, but to a different value. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.set_and_check_node(mim_obj, "/auto_install/ai_instance/" "software@name", "newname1", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_22(self): ''' Add element where the parent would have to be created. (non-simple path) Value in quotes. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.add_and_check_node( mim_obj, "/auto_install/ai_instance/target/" "disk=\"disk1\"/disk_name@name", "c0t0d0s0", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_1(self): ''' Add first set of nodes. Specify attribute value for leaf node ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.add_and_check_node( mim_obj, "/auto_install/ai_instance/target/" + "disk/disk_name@name", "disk1", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_10(self): ''' Change existing attribute's value. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.set_and_check_node( mim_obj, "/auto_install/ai_instance/target/" + "disk@name", "disk3", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_20(self): ''' Try to add a like-tagged element where such elements are not allowed. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimInvalidError, mim_obj.add, "/auto_install/ai_instance/add_drivers/search_all", "true") mim_obj.commit(validate=False)
def test_sag_4(self): ''' Set attribute to a node that is unambiguously determined ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.set_and_check_node( mim_obj, "/auto_install/ai_instance/" "software[@name=\"sw1\"]@type", "IPS", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_3(self): ''' Attempt to set an attribute when path is not deterministic (error) ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) # Generates "Ambiguity error: Path matches more than one element" self.assertRaises(milib.MimMatchError, mim_obj.set, "/auto_install/ai_instance/software@type/", "IPS") mim_obj.commit(validate=False)
def test_sag_2(self): ''' Attempt to add a second tree root node (error) ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) # Generates "Cannot add a second tree root node" self.assertRaises(milib.MimInvalidError, mim_obj.add, "/auto_install@rootattr", "rootattrval") mim_obj.commit(validate=False)
def test_sag_9(self): ''' Set a new attribute in an element specified with a subpath. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.set_and_check_node( mim_obj, "/auto_install/ai_instance/target/" + "disk[disk_name@name=\"disk2\"]/" + "disk_name@newattr", "hard", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_6(self): ''' Set a value to a node that doesn't exist. (error) ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) # Generates "Error: Path matches no elements" self.assertRaises(milib.MimMatchError, mim_obj.set, "/auto_install/ai_instance/software/software_data", "ghostly") mim_obj.commit(validate=False)
def test_sag_13(self): ''' Add an element but don't specify a value for it. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises(milib.MimInvalidError, mim_obj.add, "/auto_install/ai_instance/target/" + "disk/disk_name", value=None) self.assertRaises(milib.MimEmptyTreeError, mim_obj.commit)
def test_sag_17(self): ''' Set same attr in sibling elements with same tag, using different values ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.set_and_check_node( mim_obj, "/auto_install/ai_instance/" "target/disk[.=\"disk1\"]@in_zpool", "pool1", self.UNIQUE) self.set_and_check_node( mim_obj, "/auto_install/ai_instance/" "target/disk[.=\"disk2\"]@in_zpool", "pool2", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_19(self): ''' Set new values, using identifier paths returned from previous adds. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) path1 = mim_obj.add("/auto_install/ai_instance/software@name", "swname1") path2 = mim_obj.add("/auto_install/ai_instance/software@name", "swname2") self.set_and_check_node(mim_obj, path1, "newsw1name", self.UNIQUE) self.set_and_check_node(mim_obj, path2, "newsw2name", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_7(self): ''' Set an attribute value in a node that doesn't exist yet. (error) ''' # Generates "Error: Path matches no elements" mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.assertRaises( milib.MimMatchError, mim_obj.set, "/auto_install/ai_instance/software/" "software_data@action", "install") mim_obj.commit(validate=False)
def test_sag_8(self): ''' Add an element using a subpath. This is to distinguish it from other existing possible parent nodes. ''' mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.add_and_check_node( mim_obj, "/auto_install/ai_instance/target/" + "disk[disk_name@name=\"disk2\"]/slice", "theslice", self.UNIQUE) mim_obj.commit(validate=False)
def test_sag_14(self): ''' Add two sibling elements with the same tag, where it is allowed. ''' # <software> is the first node in the path which can have same-tagged # elements per the DTD. # Note: values in <software> are not normally given, but doing so # doesn't alter functionality, and they are needed for this test. mim_obj = mim.ManifestInput(self.MIM_TEST_XML_FILENAME, self.SCHEMA) self.add_and_check_node(mim_obj, "/auto_install/ai_instance/software/", "software1", self.UNIQUE) self.add_and_check_node(mim_obj, "/auto_install/ai_instance/software/", "software2", not self.UNIQUE) mim_obj.commit(validate=False)
def setUp(self): ''' Create an XML file used for all tests, and set up environment. ''' # Create test XML file. # This will be used for get / path-processing tests. with open(self.MIM_TEST_XML_FILENAME, "w") as test_xml: # Create/modify the file here. test_xml.write('<a>\n') test_xml.write(' aval\n') test_xml.write(' <b battr="b1attr" bbattr="bb1attrval">\n') test_xml.write(' bval1\n') test_xml.write(' <c cattr="c1attr">\n') test_xml.write(' cval1\n') test_xml.write(' <d dattr="d1attr">') test_xml.write(' dval1\n') test_xml.write(' <e>') test_xml.write(' eval1\n') test_xml.write(' </e>') test_xml.write(' </d>\n') test_xml.write(' </c>\n') test_xml.write(' </b>\n') test_xml.write(' <b battr="b2attr" bbattr="bb2attrval">\n') test_xml.write(' bval2\n') test_xml.write(' <c cattr="c2attr">\n') test_xml.write(' cval2\n') test_xml.write(' <d dattr="d2attr">') test_xml.write(' dval2\n') test_xml.write(' </d>\n') test_xml.write(' </c>\n') test_xml.write(' </b>\n') test_xml.write('</a>\n') os.environ["AIM_MANIFEST"] = self.MIM_TEST_XML_FILENAME # Note: while a valid DTD must be passed in, it is not used for this # suite of tests. Indeed, the above xml file does not match it at all. root = os.environ["ROOT"] self.mim_obj = mim.ManifestInput("dummy", root + SYS_AI_MANIFEST_DTD) self.mim_obj.load(self.MIM_TEST_XML_FILENAME)