def testCloneNode(self):
     for doc in self.docs:
         doc = doc[0]
         buf1 = XmlTools.toPrettyXML(doc.documentElement)
         buf2 = XmlTools.toPrettyXML(
             XmlTools.clone_node(doc.documentElement))
         self.assertEquals(buf1, buf2)
 def __test_overwrite_element_with_xpaths(self):
     for doc in self.docs:
         if len(doc) > 1:
             (doc, xpathtest)=doc
             (xpath, expectedresult, newvalue) = xpathtest
             xml2=XmlTools.overwrite_element_with_xpaths(doc.documentElement, { xpath: newvalue })
             buf=XmlTools.toPrettyXML(doc)
             self.assertEquals(buf.replace("\n", "").replace(" ", ""), XmlTools.toPrettyXML(doc).replace("\n", "").replace(" ", ""))
 def test_overwrite_attributes_with_xpaths(self):
     for doc in self.docs:
         if len(doc) > 1:
             (doc, xpathtest)=doc
             (xpath, expectedresult, newvalue) = xpathtest
             xml2=XmlTools.overwrite_attributes_with_xpaths(doc.documentElement, { xpath: newvalue })
             buf=XmlTools.toPrettyXML(xml2)
             self.assertEquals(buf.replace("\n", "").replace(" ", "").replace('<?xmlversion="1.0"?>', ""), 
                               XmlTools.toPrettyXML(doc).replace("\n", "").replace(" ", "").replace('<?xmlversion="1.0"?>', "").replace("lilr629", "myname").replace("/dev/sda1", "mydisk"))
    def testClusterRepositoryEXT3(self):
        from comoonics import XmlTools
        result="""<cluster config_version="1" name="testcluster">
    <clusternodes>
        <clusternode name="name0" nodeid="1" votes="1">
            <com_info>
                <eth master="bond0" name="eth0" slave="yes"/>
                <eth master="bond0" name="eth1" slave="yes"/>
                <eth bondingopts="miimon=100,mode=passive" name="bond0"/>
                <eth gateway="10.0.0.2" ip="10.0.0.1" name="bond0.100" netmask="255.255.255.0"/>
                <rootvolume fstype="ext3" name="/dev/vg_testcluster_sr/lv_sharedroot"/>
            </com_info>
            <fence>
                <method name="1"/>
            </fence>
        </clusternode>
    </clusternodes>
    <fencedevices/>
    <cman expected_votes="1" two_node="0"/>
    <rm>
        <resources/>
        <failoverdomains/>
    </rm>
</cluster>
"""
        self.numnodes=1
        osrcluster=OSRCluster(self.clustername, self.numnodes)
        for i in range(self.numnodes):
            _node=OSRClusterNode(osrcluster, "name%u" %i, self.rootvolume)
            _node.rootvol=self.rootvolume
            _node.rootfstype="ext3"
            _netdev=OSRClusterNodeNetdev(_node, "eth0")
            _netdev.master="bond0"
            _netdev.slave="yes"
            _node.addNetdev(_netdev)
            _netdev=OSRClusterNodeNetdev(_node, "eth1")
            _netdev.master="bond0"
            _netdev.slave="yes"
            _node.addNetdev(_netdev)
            _netdev=OSRClusterNodeNetdev(_node, "bond0")
            _netdev.bondingopts="miimon=100,mode=passive"
            _node.addNetdev(_netdev)
            _netdev=OSRClusterNodeNetdev(_node, "bond0.100")
            _netdev.ip="10.0.0.1"
            _netdev.netmask="255.255.255.0"
            _netdev.gateway="10.0.0.2"
            _node.addNetdev(_netdev)
            osrcluster.addNode(_node)
        log.debug("Cluster: %s" %osrcluster)
        log.debug("Cluster as hash: %s" %osrcluster.toHash())
        from comoonics.cluster import getClusterRepository
        hash=osrcluster.toHash()
        tmp=getClusterRepository(None,None,hash,self.defaults)
        print XmlTools.toPrettyXML(tmp.getElement())
        tmp=XmlTools.toPrettyXML(tmp.getElement())
        self.assertEquals(result.replace(" ", "").replace("\n", ""), tmp.replace("\t", "").replace(" ", "").replace("\n", ""))
 def __test_overwrite_element_with_xpaths(self):
     for doc in self.docs:
         if len(doc) > 1:
             (doc, xpathtest) = doc
             (xpath, expectedresult, newvalue) = xpathtest
             xml2 = XmlTools.overwrite_element_with_xpaths(
                 doc.documentElement, {xpath: newvalue})
             buf = XmlTools.toPrettyXML(doc)
             self.assertEquals(
                 buf.replace("\n", "").replace(" ", ""),
                 XmlTools.toPrettyXML(doc).replace("\n",
                                                   "").replace(" ", ""))
    def test_removePrettyTextNodes(self):
        docstring="""<?xml version="1.0" ?>
<x>
  <y>
  abcdef
  </y>
</x>
"""     
        doc=XmlTools.parseXMLString(docstring)
        XmlTools.removePrettyTextNodes(doc)
        result=XmlTools.toPrettyXML(doc, "  ", "\n")
        self.assertEquals(docstring.replace("\n", "").replace(" ", ""), result.replace("\n", "").replace(" ", ""))        
    def test_removePrettyTextNodes(self):
        docstring = """<?xml version="1.0" ?>
<x>
  <y>
  abcdef
  </y>
</x>
"""
        doc = XmlTools.parseXMLString(docstring)
        XmlTools.removePrettyTextNodes(doc)
        result = XmlTools.toPrettyXML(doc, "  ", "\n")
        self.assertEquals(
            docstring.replace("\n", "").replace(" ", ""),
            result.replace("\n", "").replace(" ", ""))
    def test_toPrettyXml(self):
        docstring = """<?xml version="1.0" ?>
\t<x>
\t  <y>
\t    abc
\t  </y>
\t</x>
"""
        doc = XmlTools.parseXMLString(docstring)
        self.assertEquals(
            docstring.replace("\n", "").replace("\t", "").replace(" ", ""),
            XmlTools.toPrettyXML(doc).replace("\n",
                                              "").replace("\t",
                                                          "").replace(" ", ""))
    def test_overwrite_attributes_with_xpaths2(self):
        doc="""<a>
   <b name="hallo"/>
   <b name="hallo2"/>
   <c name="hallo3"/>
   <c name2="hallo4"/>
   <c name="hallo5"/>
</a>
"""
        edoc="""<a>
   <b name="marc"/>
   <b name="marc"/>
   <c name="marc"/>
   <c name2="hallo4"/>
   <c name="marc"/>
</a>
"""
        rdoc=XmlTools.overwrite_attributes_with_xpaths(XmlTools.parseXMLString(doc), {"//b/@name": "marc", "/a/c/@name": "marc"})
        self.failUnlessEqual(XmlTools.toPrettyXML(rdoc).replace("\n", "").replace(" ", "").replace("\t", "").replace('<?xmlversion="1.0"?>', ""), edoc.replace("\n", "").replace(" ", "").replace("\t", ""))   
    def testClusterRepositoryGFS(self):
        from comoonics import XmlTools
        self.numnodes=5
        result="""<cluster config_version="1" name="testcluster">
    <clusternodes>
        <clusternode name="name0" nodeid="1" votes="1">
            <com_info>
                <eth ip="dhcp" mac="00:00:00:xx:00" name="eth0"/>
                <rootvolume fstype="gfs" name="/dev/vg_testcluster_sr/lv_sharedroot"/>
                <filesystems>
                    <filesystem dest="/var/run" fstype="bind" mountopts="defaults" source="/.cluster/cdsl/%(param0)s/var/run"/>
                </filesystems>
            </com_info>
            <fence>
                <method name="1"/>
            </fence>
        </clusternode>
        <clusternode name="name1" nodeid="2" votes="1">
            <com_info>
                <eth ip="dhcp" mac="00:00:00:xx:01" name="eth0"/>
                <rootvolume fstype="gfs" name="/dev/vg_testcluster_sr/lv_sharedroot"/>
                <filesystems>
                    <filesystem dest="/var/run" fstype="bind" mountopts="defaults" source="/.cluster/cdsl/%(param0)s/var/run"/>
                </filesystems>
            </com_info>
            <fence>
                <method name="1"/>
            </fence>
        </clusternode>
        <clusternode name="name2" nodeid="3" votes="1">
            <com_info>
                <eth ip="dhcp" mac="00:00:00:xx:02" name="eth0"/>
                <rootvolume fstype="gfs" name="/dev/vg_testcluster_sr/lv_sharedroot"/>
                <filesystems>
                    <filesystem dest="/var/run" fstype="bind" mountopts="defaults" source="/.cluster/cdsl/%(param0)s/var/run"/>
                </filesystems>
            </com_info>
            <fence>
                <method name="1"/>
            </fence>
        </clusternode>
        <clusternode name="name3" nodeid="4" votes="1">
            <com_info>
                <eth ip="dhcp" mac="00:00:00:xx:03" name="eth0"/>
                <rootvolume fstype="gfs" name="/dev/vg_testcluster_sr/lv_sharedroot"/>
                <filesystems>
                    <filesystem dest="/var/run" fstype="bind" mountopts="defaults" source="/.cluster/cdsl/%(param0)s/var/run"/>
                </filesystems>
            </com_info>
            <fence>
                <method name="1"/>
            </fence>
        </clusternode>
        <clusternode name="name4" nodeid="5" votes="1">
            <com_info>
                <eth ip="dhcp" mac="00:00:00:xx:04" name="eth0"/>
                <rootvolume fstype="gfs" name="/dev/vg_testcluster_sr/lv_sharedroot"/>
                <filesystems>
                    <filesystem dest="/var/run" fstype="bind" mountopts="defaults" source="/.cluster/cdsl/%(param0)s/var/run"/>
                </filesystems>
            </com_info>
            <fence>
                <method name="1"/>
            </fence>
        </clusternode>
    </clusternodes>
    <fencedevices/>
    <cman expected_votes="1" two_node="0"/>
    <rm>
        <resources/>
        <failoverdomains/>
    </rm>
</cluster>
"""
        log.debug("Setting up cluster %s" %self.clustername)
        osrcluster=OSRCluster(self.clustername, self.numnodes)
        for i in range(self.numnodes):
            _node=OSRClusterNode(osrcluster, "name%u" %i, self.rootvolume)
            _node.rootvol=self.rootvolume
            _node.rootfstype="gfs"
            _node.addNetdev(OSRClusterNodeNetdev(_node, self.netdev))
            _node.getNetdev(self.netdev).mac="00:00:00:xx:0%u" %i
            _node.getNetdev(self.netdev).ip="dhcp"
            _node.addFilesystem(OSRClusterNodeFilesystem(_node, "bind", "/.cluster/cdsl/%(param0)s/var/run", "/var/run"))
            osrcluster.addNode(_node)
        log.debug("Cluster: %s" %osrcluster)
        log.debug("Cluster as hash: %s" %osrcluster.toHash())
        from comoonics.cluster import getClusterRepository
        tmp=getClusterRepository(None,None,osrcluster.toHash(),self.defaults)
        print XmlTools.toPrettyXML(tmp.getElement())
        tmp=XmlTools.toPrettyXML(tmp.getElement())
        self.assertEquals(result.replace(" ", "").replace("\n", ""), tmp.replace("\t", "").replace(" ", "").replace("\n", ""))
    def test_toPrettyXml(self):
        docstring="""<?xml version="1.0" ?>
\t<x>
\t  <y>
\t    abc
\t  </y>
\t</x>
"""
        doc=XmlTools.parseXMLString(docstring)
        self.assertEquals(docstring.replace("\n", "").replace("\t", "").replace(" ", ""), XmlTools.toPrettyXML(doc).replace("\n", "").replace("\t", "").replace(" ", ""))            
 def testCloneNode(self):
     for doc in self.docs:
         doc=doc[0]
         buf1=XmlTools.toPrettyXML(doc.documentElement)
         buf2=XmlTools.toPrettyXML(XmlTools.clone_node(doc.documentElement))
         self.assertEquals(buf1, buf2)