Exemple #1
0
class QtreeTest(unittest.TestCase):
    """
    Test various qtree configurations
    """

    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions(["dummyfile.xml", "--debug=%s" % logging._levelNames[log.level].lower()])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)
        self.defaults.get("global", "dns_domain_name")

        xmldata = """
<project name="test" code="qtree">
  <site name="sitea" type="primary" location="testlab">
    <filer name="testfiler1" type="filer">
      <vfiler name="vfiler01" rootaggr="aggr0">
         <aggregate name="aggr01">
           <volume name="testvol1"/>
         </aggregate>
      </vfiler>
    </filer>
  </site>
</project>
"""

        node = etree.fromstring(xmldata)
        self.proj = Project()
        self.proj.configure_from_node(node, self.defaults, None)

        self.volume = self.proj.get_volumes()[0]

    def test_empty_qtree(self):
        """
        Test an empty qtree node
        """
        xmldata = """
<qtree />
"""
        node = etree.fromstring(xmldata)
        qtreeobj = qtree.create_qtree_from_node(node, self.defaults, self.volume)
        log.debug("qtree: %s", qtreeobj)

    def test_autocreate_qtree_oradata(self):
        """
        Test a qtree that is autocreated for an oradata volume
        """
        raise unittest.SkipTest("Oracle volume/qtree plugin not written yet.")
        volnode = etree.Element("volume")
        volnode.attrib["oracle"] = "ORASID"
        volume = Volume("testvol2", self.filer1, "aggr01", 100, type="oradata", volnode=volnode)
        self.proj.volumes.append(volume)

        self.proj.create_qtrees_for_volume(volume)
class DRHostExportTest(unittest.TestCase):
    def setUp(self):
        """
        Load testing XML into a config instance.
        """
        optparser = BaseOptions()
        optparser.parseOptions([
            'dummyfile.xml',
            '--debug=%s' % logging._levelNames[log.level].lower()
        ])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)

        xmlfile = os.path.join(XML_FILE_LOCATION, "drhostexport_test.xml")
        tree = etree.parse(xmlfile)
        self.project = Project()
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

    def test_working(self):
        self.failUnlessEqual(1, 1)

    def test_drhost_parse(self):
        """
        Test that the drhost exports for a project are correctly done.
        """
        raise unittest.SkipTest("DRhosts refactoring not yet complete.")

        # The list of drhosts for the first host should be 1 in length.
        testhost01 = self.project.get_host_byname('testhost01')
        self.failUnlessEqual(len(testhost01.get_drhosts()), 1)

        # Grab the test volume
        testvol = [
            x for x in self.project.get_volumes() if x.name == 'testvol01'
        ][0]

        # Check that the target volume qtree is being exported to the dr testhost
        targethost = testvol.snapmirrors[0].targetvol.get_qtrees(
        )[0].get_rw_exports()[0]
        self.failUnlessEqual(targethost.name, 'dr_testhost01')

    def test_storage_design_secondary_qtrees(self):
        """
        Test that the qtrees detected at the secondary site are correct.
        """
        raise unittest.SkipTest("Test not yet defined.")
class DRHostExportTest(unittest.TestCase):

    def setUp(self):
        """
        Load testing XML into a config instance.
        """
        optparser = BaseOptions()
        optparser.parseOptions(['dummyfile.xml', '--debug=%s' % logging._levelNames[log.level].lower()])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)

        xmlfile = os.path.join(XML_FILE_LOCATION, "drhostexport_test.xml")
        tree = etree.parse(xmlfile)
        self.project = Project()
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

    def test_working(self):
        self.failUnlessEqual( 1, 1 )

    def test_drhost_parse(self):
        """
        Test that the drhost exports for a project are correctly done.
        """
        raise unittest.SkipTest("DRhosts refactoring not yet complete.")

        # The list of drhosts for the first host should be 1 in length.
        testhost01 = self.project.get_host_byname('testhost01')
        self.failUnlessEqual( len(testhost01.get_drhosts()), 1 )

        # Grab the test volume
        testvol = [x for x in self.project.get_volumes() if x.name == 'testvol01' ][0]

        # Check that the target volume qtree is being exported to the dr testhost
        targethost = testvol.snapmirrors[0].targetvol.get_qtrees()[0].get_rw_exports()[0]
        self.failUnlessEqual(targethost.name, 'dr_testhost01')
        
    def test_storage_design_secondary_qtrees(self):
        """
        Test that the qtrees detected at the secondary site are correct.
        """
        raise unittest.SkipTest("Test not yet defined.")
Exemple #4
0
class SetRefTest(unittest.TestCase):
    """
    Test SetRef objects
    """
    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions([
            'dummyfile.xml',
            '--debug=%s' % logging._levelNames[log.level].lower()
        ])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)
        xmldata = """
<project name="testproj" code="01">
  <site name="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate type="root" name="aggr0"/>
        <aggregate name="aggr01">
          <volume name="blah">
          </volume>
        </aggregate>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

    def test_bare_setref(self):
        """
        Test a bare setref node
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        self.failUnlessRaises(KeyError, sr.configure_from_node, node,
                              self.defaults, vol)

    def test_named_setref(self):
        """
        Test a setref node with just a name
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        self.failUnlessRaises(KeyError, sr.configure_from_node, node,
                              self.defaults, vol)

    def test_setref_bad_type(self):
        """
        Test a setref node with an invalid type
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref type="blah" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        self.failUnlessRaises(ValueError, sr.configure_from_node, node,
                              self.defaults, vol)

    def test_setref_snapshot_type(self):
        """
        Test a setref node of type 'snapshot'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref type="snapshot" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual(sr.name, 'alan')
        self.failUnlessEqual(sr.type, 'snapshot')

    def test_setref_snapvault_type(self):
        """
        Test a setref node of type 'snapshot'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref type="snapvault" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual(sr.name, 'alan')
        self.failUnlessEqual(sr.type, 'snapvault')

    def test_setref_snapmirror_type(self):
        """
        Test a setref node of type 'snapmirror'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref type="snapmirror" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual(sr.name, 'alan')
        self.failUnlessEqual(sr.type, 'snapmirror')

    def test_setref_snapmirrorvault_type(self):
        """
        Test a setref node of type 'snapmirrorvault'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref type="snapmirrorvault" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual(sr.name, 'alan')
        self.failUnlessEqual(sr.type, 'snapmirrorvault')

    def test_setref_snapmirrorvault_type(self):
        """
        Test a setref node of type 'snapmirrorvault'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]

        xmldata = """
<setref type="snapvaultmirror" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual(sr.name, 'alan')
        self.failUnlessEqual(sr.type, 'snapvaultmirror')
Exemple #5
0
class QtreeTest(unittest.TestCase):
    """
    Test various qtree configurations
    """
    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions([
            'dummyfile.xml',
            '--debug=%s' % logging._levelNames[log.level].lower()
        ])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)
        self.defaults.get('global', 'dns_domain_name')

        xmldata = """
<project name="test" code="qtree">
  <site name="sitea" type="primary" location="testlab">
    <filer name="testfiler1" type="filer">
      <vfiler name="vfiler01" rootaggr="aggr0">
         <aggregate name="aggr01">
           <volume name="testvol1"/>
         </aggregate>
      </vfiler>
    </filer>
  </site>
</project>
"""

        node = etree.fromstring(xmldata)
        self.proj = Project()
        self.proj.configure_from_node(node, self.defaults, None)

        self.volume = self.proj.get_volumes()[0]

    def test_empty_qtree(self):
        """
        Test an empty qtree node
        """
        xmldata = """
<qtree />
"""
        node = etree.fromstring(xmldata)
        qtreeobj = qtree.create_qtree_from_node(node, self.defaults,
                                                self.volume)
        log.debug("qtree: %s", qtreeobj)

    def test_autocreate_qtree_oradata(self):
        """
        Test a qtree that is autocreated for an oradata volume
        """
        raise unittest.SkipTest("Oracle volume/qtree plugin not written yet.")
        volnode = etree.Element('volume')
        volnode.attrib['oracle'] = 'ORASID'
        volume = Volume('testvol2',
                        self.filer1,
                        'aggr01',
                        100,
                        type='oradata',
                        volnode=volnode)
        self.proj.volumes.append(volume)

        self.proj.create_qtrees_for_volume(volume)
Exemple #6
0
class SnapVaultTest(unittest.TestCase):
    """
    Test SnapVault configurations
    """
    
    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions(['dummyfile.xml', '--debug=%s' % logging._levelNames[log.level].lower()])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)
        xmldata = """
<project name="testproj" code="01">
  <site name="testprimary" type="primary">
    <vlan type="project" number="3003">
      <network number="10.240.4.0/26" gateway="10.240.4.254"/>
    </vlan>

    <filer type="filer" name="filer01">
      <vfiler>
        <ipaddress type="primary" ip="10.240.4.1"/>
        <aggregate name="aggr01" type="root"/>

	<aggregate name="aggr02">
          <volume>
            <setref type="snapvault" name="default_primary"/>
          </volume>
        </aggregate>

      </vfiler>
    </filer>

    <filer type="nearstore" name="nearstore01">

    </filer>

  </site>

  <snapvaultset name="default_primary" targetfiler="nearstore01" targetaggregate="aggr02">
    <snapvaultdef basename="sv_daily">
      <snapschedule>1@1</snapschedule>
      <snapvaultschedule>8@2</snapvaultschedule>
    </snapvaultdef>
    <snapvaultdef basename="sv_weekly">
      <snapvaultschedule>13@sun@3</snapvaultschedule>
    </snapvaultdef>
  </snapvaultset>

</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.docgen = NetAppCommandsGenerator(self.project, self.defaults)

    def test_aggregates_exist(self):
        """
        Check that all the right aggregates exist
        """
        aggregates = []
        for filer in self.project.get_filers():
            log.debug("adding aggregates on filer: %s: %s", filer, filer.get_aggregates())
            aggregates.extend( filer.get_aggregates() )
            pass

        self.failUnlessEqual( len(aggregates), 3)
        
    def test_volumes_exist(self):
        """
        Test the snapvault volumes exist
        """
        vols = self.project.get_volumes()
        log.debug("vols: %s", [x for x in vols])

        for vol in vols:
            log.debug("snapvaults: %s", vol.snapvaults)
            for snap in vol.snapvaults:
                log.debug("snap: %s", snap)
                pass
            pass

        filer = [ x for x in self.project.get_filers() if x.name == 'nearstore01'][0]
        cmds = self.docgen.filer_snapvault_init_commands(filer)
        log.debug("cmds: %s", cmds)
        self.failUnlessEqual( len(cmds), 1 )
Exemple #7
0
class SnapVaultTest(unittest.TestCase):
    """
    Test SnapVault configurations
    """
    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions([
            'dummyfile.xml',
            '--debug=%s' % logging._levelNames[log.level].lower()
        ])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)
        xmldata = """
<project name="testproj" code="01">
  <site name="testprimary" type="primary">
    <vlan type="project" number="3003">
      <network number="10.240.4.0/26" gateway="10.240.4.254"/>
    </vlan>

    <filer type="filer" name="filer01">
      <vfiler>
        <ipaddress type="primary" ip="10.240.4.1"/>
        <aggregate name="aggr01" type="root"/>

	<aggregate name="aggr02">
          <volume>
            <setref type="snapvault" name="default_primary"/>
          </volume>
        </aggregate>

      </vfiler>
    </filer>

    <filer type="nearstore" name="nearstore01">

    </filer>

  </site>

  <snapvaultset name="default_primary" targetfiler="nearstore01" targetaggregate="aggr02">
    <snapvaultdef basename="sv_daily">
      <snapschedule>1@1</snapschedule>
      <snapvaultschedule>8@2</snapvaultschedule>
    </snapvaultdef>
    <snapvaultdef basename="sv_weekly">
      <snapvaultschedule>13@sun@3</snapvaultschedule>
    </snapvaultdef>
  </snapvaultset>

</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.docgen = NetAppCommandsGenerator(self.project, self.defaults)

    def test_aggregates_exist(self):
        """
        Check that all the right aggregates exist
        """
        aggregates = []
        for filer in self.project.get_filers():
            log.debug("adding aggregates on filer: %s: %s", filer,
                      filer.get_aggregates())
            aggregates.extend(filer.get_aggregates())
            pass

        self.failUnlessEqual(len(aggregates), 3)

    def test_volumes_exist(self):
        """
        Test the snapvault volumes exist
        """
        vols = self.project.get_volumes()
        log.debug("vols: %s", [x for x in vols])

        for vol in vols:
            log.debug("snapvaults: %s", vol.snapvaults)
            for snap in vol.snapvaults:
                log.debug("snap: %s", snap)
                pass
            pass

        filer = [
            x for x in self.project.get_filers() if x.name == 'nearstore01'
        ][0]
        cmds = self.docgen.filer_snapvault_init_commands(filer)
        log.debug("cmds: %s", cmds)
        self.failUnlessEqual(len(cmds), 1)
Exemple #8
0
class LUNTest(unittest.TestCase):
    """
    Test various LUN configurations
    """
    
    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions(['dummyfile.xml', '--debug=%s' % logging._levelNames[log.level].lower()])
        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)

        self.project = Project()
        
    def test_bare_lun(self):
        """
        Test the simplest possible lun configuration
        """
        xmlfile = os.path.join(XML_FILE_LOCATION, 'bare_lun.xml')
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

        # Find the lun
        vol = self.project.get_volumes()[1]
        lunobj = vol.get_luns()[0]
        self.assertEquals( lunobj.name, 'vftest01.lun00')
        self.assertEquals( lunobj.size, 100)
        self.assertEquals( lunobj.igroup.name, 'testproj00')
        
    def test_three_bare_luns(self):
        """
        Test three bare luns in the same volume/qtree
        """
        xmlfile = os.path.join(XML_FILE_LOCATION, 'bare_lun_three.xml')
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

        # Find the lun
        vol = self.project.get_volumes()[1]

        lunobj = vol.get_luns()[0]
        self.assertEquals( lunobj.name, 'vftest01.lun00')
        self.assertEquals( int(lunobj.size), 33)
        self.assertEquals( lunobj.igroup.name, 'testproj00')
        
        lunobj = vol.get_luns()[2]
        self.assertEquals( lunobj.name, 'vftest01.lun02')
        self.assertEquals( int(lunobj.size), 33)
        self.assertEquals( lunobj.igroup.name, 'testproj00')
        
    def test_2vols_1lun_each(self):
        """
        2 volumes, each with 1 lun
        """
        xmlfile = os.path.join(XML_FILE_LOCATION, 'lun_2vols_1lun_each.xml')
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

        # Find the lun
        vols = self.project.get_volumes()
        log.debug("vols: %s", vols)
        lunobj = vols[2].get_luns()[0]

        self.assertEquals( lunobj.name, 'vftest01.lun01')
        self.assertEquals( int(lunobj.size), 100)
        self.assertEquals( lunobj.igroup.name, 'testproj00')

    def test_lun_3vols_multiple_luns(self):
        """
        A more complex example with multiple aggregates, volumes, luns, qtrees
        """
        xmlfile = os.path.join(XML_FILE_LOCATION, 'lun_3vols_multiple_luns.xml')
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #9
0
class SetRefTest(unittest.TestCase):
    """
    Test SetRef objects
    """
    
    def setUp(self):
        optparser = BaseOptions()
        optparser.parseOptions(['dummyfile.xml', '--debug=%s' % logging._levelNames[log.level].lower()])

        self.defaults = RawConfigParser()
        configfiles = self.defaults.read(TESTCONF)
        xmldata = """
<project name="testproj" code="01">
  <site name="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate type="root" name="aggr0"/>
        <aggregate name="aggr01">
          <volume name="blah">
          </volume>
        </aggregate>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

    def test_bare_setref(self):
        """
        Test a bare setref node
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        self.failUnlessRaises( KeyError, sr.configure_from_node, node, self.defaults, vol)

    def test_named_setref(self):
        """
        Test a setref node with just a name
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        self.failUnlessRaises( KeyError, sr.configure_from_node, node, self.defaults, vol)
        
    def test_setref_bad_type(self):
        """
        Test a setref node with an invalid type
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref type="blah" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        self.failUnlessRaises( ValueError, sr.configure_from_node, node, self.defaults, vol)

    def test_setref_snapshot_type(self):
        """
        Test a setref node of type 'snapshot'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref type="snapshot" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual( sr.name, 'alan' )
        self.failUnlessEqual( sr.type, 'snapshot' )

    def test_setref_snapvault_type(self):
        """
        Test a setref node of type 'snapshot'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref type="snapvault" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual( sr.name, 'alan' )
        self.failUnlessEqual( sr.type, 'snapvault' )

    def test_setref_snapmirror_type(self):
        """
        Test a setref node of type 'snapmirror'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref type="snapmirror" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual( sr.name, 'alan' )
        self.failUnlessEqual( sr.type, 'snapmirror' )

    def test_setref_snapmirrorvault_type(self):
        """
        Test a setref node of type 'snapmirrorvault'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref type="snapmirrorvault" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual( sr.name, 'alan' )
        self.failUnlessEqual( sr.type, 'snapmirrorvault' )

    def test_setref_snapmirrorvault_type(self):
        """
        Test a setref node of type 'snapmirrorvault'
        """
        vol = [x for x in self.project.get_volumes() if x.name == 'blah'][0]
        
        xmldata = """
<setref type="snapvaultmirror" name="alan" />
"""
        node = etree.fromstring(xmldata)
        sr = SetRef()
        sr.configure_from_node(node, self.defaults, vol)

        self.failUnlessEqual( sr.name, 'alan' )
        self.failUnlessEqual( sr.type, 'snapvaultmirror' )