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)
예제 #24
0
    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)