Exemple #1
0
    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()
Exemple #2
0
 def test_create_project_1_site(self):
     xmlfile = os.path.join(XML_FILE_LOCATION, "project_1_site.xml")
     tree = etree.parse(xmlfile)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
     # see if the convenience functions are set correctly
     self.failUnlessEqual( len(project.get_sites()), 1)
Exemple #3
0
class Site(unittest.TestCase):
    """
    Test various site 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="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

    def test_empty_site(self):
        """
        Test the simplest possible site configuration
        """
        xmldata = """
<site/>
"""
        node = etree.fromstring(xmldata)
Exemple #4
0
    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]
Exemple #5
0
    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)
Exemple #6
0
class ExampleTest(unittest.TestCase):
    def setUp(self):
        """
        Prepare for a configuration parse test
        """
        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_working(self):
        self.failUnlessEqual(1, 1)

    def test_basic_example(self):
        """
        Test the general example file
        """
        xmlfile = os.path.join(XML_FILE_LOCATION, "EXAMPLE.project-definition.xml")
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

    def test_multi_network_example(self):
        """
        Test the general example file
        """
        xmlfile = os.path.join(XML_FILE_LOCATION, "EXAMPLE.multi-network-vlan.project-definition.xml")
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #7
0
 def test_create_project_1_site(self):
     xmlfile = os.path.join(XML_FILE_LOCATION, "project_1_site.xml")
     tree = etree.parse(xmlfile)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
     # see if the convenience functions are set correctly
     self.failUnlessEqual(len(project.get_sites()), 1)
Exemple #8
0
class VolumeTest(unittest.TestCase):
    """
    Test various volume 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="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate type="root" name="aggr0"/>
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]

    def test_line_volume(self):
        """
        Test the simplest possible volume configuration
        """
        xmldata = """
<volume>
</volume>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_01")
        
    def test_simple_volume(self):
        """
        Test the simplest possible volume configuration
        """
        xmldata = """
<filer name='testfiler1'>
  <aggregate name='testaggr01'>
    <volume>
    </volume>
  </aggregate>
</filer>
"""
        node = etree.fromstring(xmldata)
        volnode = node.xpath('*/volume')[0]
        volume.create_volume_from_node(volnode, self.defaults, self.aggr1)
Exemple #9
0
 def test_parse_minimal(self):
     """
     Test parsing of minimal XML file
     """
     xmlfile = "minimal_parsable_config.xml"
     filepath = os.path.join(XML_FILE_LOCATION, xmlfile)
     tree = etree.parse(filepath)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #10
0
 def test_parse_drhostexports(self):
     """
     Test parsing of dr host exports syntax
     """
     xmlfile = "drhostexport_test.xml"
     filepath = os.path.join(XML_FILE_LOCATION, xmlfile)
     tree = etree.parse(filepath)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #11
0
 def test_parse_clustered_nearstore(self):
     """
     Test parsing of clustered nearstore syntax
     """
     xmlfile = "clustered_nearstore.xml"
     filepath = os.path.join(XML_FILE_LOCATION, xmlfile)
     tree = etree.parse(filepath)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #12
0
 def test_parse_clustered_nearstore(self):
     """
     Test parsing of clustered nearstore syntax
     """
     xmlfile = "clustered_nearstore.xml"
     filepath = os.path.join(XML_FILE_LOCATION, xmlfile)
     tree = etree.parse(filepath)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #13
0
 def test_parse_minimal(self):
     """
     Test parsing of minimal XML file
     """
     xmlfile = "minimal_parsable_config.xml"
     filepath = os.path.join(XML_FILE_LOCATION, xmlfile)
     tree = etree.parse(filepath)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #14
0
 def test_parse_drhostexports(self):
     """
     Test parsing of dr host exports syntax
     """
     xmlfile = "drhostexport_test.xml"
     filepath = os.path.join(XML_FILE_LOCATION, xmlfile)
     tree = etree.parse(filepath)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
    def load_testfile(self, filename):
        """
        Load a test file for verifying functionality
        """
        filepath = os.path.join(XML_FILE_LOCATION, filename)
        tree = etree.parse(filepath)

        self.project = Project()
        self.project.configure_from_node(tree.getroot(), self.defaults, None)
        self.docgenerator = NetAppCommandsGenerator(self.project, self.defaults)
Exemple #16
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 #17
0
    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)
Exemple #18
0
class VFilerTest(unittest.TestCase):
    """
    Test the VFiler class
    """
    
    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="demo" code="3">
  <site name="one" type="primary" location="somewhere">
    <vlan number="3001" type="project"/>
    <filer name="testfiler1" type="filer">
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)
        self.site = self.project.get_sites()[0]
        self.filer = self.site.get_filers()[0]

    def test_create_vfiler_bare(self):
        """
        A bare vfiler with full default options
        """
        xmldata = """
<vfiler />
"""
        node = etree.fromstring(xmldata)
        vfiler = VFiler()
        vfiler.configure_from_node(node, self.defaults, self.filer)
        self.failUnlessEqual( vfiler.name, "vfdemo" )
        rootaggr = vfiler.get_root_aggregate()
        self.failUnlessEqual( rootaggr.name, "rootaggr" )
        
    def test_create_vfiler_minimal(self):
        xmldata = """
<vfiler name="vftest01" />
"""
        node = etree.fromstring(xmldata)
        vfiler = VFiler()
        vfiler.configure_from_node(node, self.defaults, self.filer)

        self.failUnlessEqual( vfiler.name, "vftest01" )
        rootaggr = vfiler.get_root_aggregate()
        self.failUnlessEqual( rootaggr.name, "rootaggr" )
Exemple #19
0
    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">
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)
Exemple #20
0
    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"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]
Exemple #21
0
    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">

  <host name="sitea_host01" operatingsystem="linux" />
  <host name="sitea_host02" operatingsystem="windows" />
  <host name="sitea_host03" operatingsystem="solaris" />

  <vlan type="project" number="3001">
    <network number="10.20.30.1/26" gateway="10.20.30.254"/>
  </vlan>
    <filer name="filer1" type="filer">
      <vfiler name="vftest01" rootaggr="aggr0">
        <ipaddress type="primary" ip="10.20.30.1"/>
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]
Exemple #22
0
    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]
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.")
    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)
Exemple #25
0
 def test_create_project_1_site_3_hosts(self):
     xmlfile = os.path.join(XML_FILE_LOCATION, "project_1_site_3_hosts.xml")
     tree = etree.parse(xmlfile)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
     self.failUnlessEqual(len(project.get_sites()), 1)
     site = project.get_sites()[0]
     hosts = project.get_sites()[0].get_hosts()
     self.failUnlessEqual(len(hosts), 3)
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 #27
0
    def setUp(self):
        """
        Prepare for a configuration parse test
        """
        optparser = BaseOptions()
        optparser.parseOptions(["dummyfile.xml", "--debug=%s" % logging._levelNames[log.level].lower()])

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

        self.project = Project()
Exemple #28
0
class AggregateTest(unittest.TestCase):
    """
    Test various aggregate 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="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate type="root" name="aggr0"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]

    def test_bare_aggregate(self):
        """
        Test the simplest single aggregate node
        """
        xmldata = """
<aggregate>
</aggregate>
"""
        node = etree.fromstring(xmldata)
        self.failUnlessRaises(KeyError, aggregate.create_aggregate_from_node, node, self.defaults, self.vfiler1)
Exemple #29
0
class AggregateTest(unittest.TestCase):
    """
    Test various aggregate 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="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate type="root" name="aggr0"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]

    def test_bare_aggregate(self):
        """
        Test the simplest single aggregate node
        """
        xmldata = """
<aggregate>
</aggregate>
"""
        node = etree.fromstring(xmldata)
        self.failUnlessRaises(KeyError, aggregate.create_aggregate_from_node, node, self.defaults, self.vfiler1)
class NetAppTestBase(unittest.TestCase):
    """
    Common basecode setup for testing NetApp commands output
    """
    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.outfile = StringIO()

    def load_testfile(self, filename):
        """
        Load a test file for verifying functionality
        """
        filepath = os.path.join(XML_FILE_LOCATION, filename)
        tree = etree.parse(filepath)

        self.project = Project()
        self.project.configure_from_node(tree.getroot(), self.defaults, None)
        self.docgenerator = NetAppCommandsGenerator(self.project, self.defaults)
Exemple #31
0
    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">
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)
Exemple #32
0
    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="testproj1" code="01" title="Test Project 1"/>
"""
        self.project = Project()
    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)
Exemple #34
0
    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)
Exemple #35
0
    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">

  <host name="sitea_host01" operatingsystem="linux" />
  <host name="sitea_host02" operatingsystem="windows" />
  <host name="sitea_host03" operatingsystem="solaris" />

  <vlan type="project" number="3001">
    <network number="10.20.30.1/26" gateway="10.20.30.254"/>
  </vlan>
    <filer name="filer1" type="filer">
      <vfiler name="vftest01" rootaggr="aggr0">
        <ipaddress type="primary" ip="10.20.30.1"/>
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]
Exemple #36
0
 def test_create_project_1_site_3_hosts(self):
     xmlfile = os.path.join(XML_FILE_LOCATION, "project_1_site_3_hosts.xml")
     tree = etree.parse(xmlfile)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
     self.failUnlessEqual( len(project.get_sites()), 1)
     site = project.get_sites()[0]
     hosts = project.get_sites()[0].get_hosts()
     self.failUnlessEqual( len(hosts), 3)
Exemple #37
0
class ExampleTest(unittest.TestCase):
    def setUp(self):
        """
        Prepare for a configuration parse test
        """
        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_working(self):
        self.failUnlessEqual(1, 1)

    def test_basic_example(self):
        """
        Test the general example file
        """
        xmlfile = os.path.join(XML_FILE_LOCATION,
                               "EXAMPLE.project-definition.xml")
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)

    def test_multi_network_example(self):
        """
        Test the general example file
        """
        xmlfile = os.path.join(
            XML_FILE_LOCATION,
            "EXAMPLE.multi-network-vlan.project-definition.xml")
        tree = etree.parse(xmlfile)
        self.project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #38
0
class Site(unittest.TestCase):
    """
    Test various site 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="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

    def test_empty_site(self):
        """
        Test the simplest possible site configuration
        """
        xmldata = """
<site/>
"""
        node = etree.fromstring(xmldata)
Exemple #39
0
    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="demo" code="3">
  <site name="one" type="primary" location="somewhere">
    <vlan number="3001" type="project"/>
    <filer name="testfiler1" type="filer">
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)
        self.site = self.project.get_sites()[0]
        self.filer = self.site.get_filers()[0]
Exemple #40
0
class VolumeTest(unittest.TestCase):
    """
    Test various volume 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="sitea" type="primary" location="testlab">
    <filer name="filer1" type="filer">
      <vfiler name="vftest01">
        <aggregate type="root" name="aggr0"/>
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]

    def test_line_volume(self):
        """
        Test the simplest possible volume configuration
        """
        xmldata = """
<volume>
</volume>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_01")

    def test_simple_volume(self):
        """
        Test the simplest possible volume configuration
        """
        xmldata = """
<filer name='testfiler1'>
  <aggregate name='testaggr01'>
    <volume>
    </volume>
  </aggregate>
</filer>
"""
        node = etree.fromstring(xmldata)
        volnode = node.xpath('*/volume')[0]
        volume.create_volume_from_node(volnode, self.defaults, self.aggr1)
Exemple #41
0
class SnapVaultSetTest(unittest.TestCase):
    """
    Test SnapVaultSet 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">
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

    def test_bare_snapvaultset(self):
        """
        Test a bare snapvaultset node
        """
        xmldata = """
<snapvaultset />
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        self.failUnlessRaises(KeyError, sr.configure_from_node, node,
                              self.defaults, self.project)

    def test_snapvaultset_id(self):
        """
        Test a snapvaultset with an id
        """
        xmldata = """
<snapvaultset name="default" />
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        self.failUnlessRaises(KeyError, sr.configure_from_node, node,
                              self.defaults, self.project)

    def test_snapvaultset_targetfiler(self):
        """
        Test a snapvaultset with targetfiler, but no targetaggregate
        """
        xmldata = """
<snapvaultset name="default" targetfiler="filer01" />
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        self.failUnlessRaises(KeyError, sr.configure_from_node, node,
                              self.defaults, self.project)

    def test_snapvaultset_targetaggr(self):
        """
        Test a snapvaultset with targetfiler and targetaggregate
        """
        xmldata = """
<snapvaultset name="default" targetfiler="filer01" targetaggregate="aggr02"/>
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        sr.configure_from_node(node, self.defaults, self.project)

        self.failUnlessEqual(sr.name, 'default')
        self.failUnlessEqual(sr.targetfiler, 'filer01')
        self.failUnlessEqual(sr.targetaggregate, 'aggr02')
        self.failUnlessEqual(sr.targetvolume, None)

    def test_snapvaultset_targetvolume(self):
        """
        Test a snapvaultset with targetfiler and targetvolume
        """
        xmldata = """
<snapvaultset name="default" targetfiler="filer01" targetvolume="testvol03"/>
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        sr.configure_from_node(node, self.defaults, self.project)

        self.failUnlessEqual(sr.name, 'default')
        self.failUnlessEqual(sr.targetfiler, 'filer01')
        self.failUnlessEqual(sr.targetaggregate, None)
        self.failUnlessEqual(sr.targetvolume, 'testvol03')

    def test_snapvaultset_multiplier(self):
        """
        Test setting a custom multipler for the snapvaultset
        """
        xmldata = """
<snapvaultset name="default"
              targetfiler="filer01"
              targetaggregate="aggr02"
              multiplier="3.4"/>
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        sr.configure_from_node(node, self.defaults, self.project)

        self.failUnlessEqual(sr.name, 'default')
        self.failUnlessEqual(sr.multiplier, 3.4)
Exemple #42
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 #43
0
class SnapVaultSetTest(unittest.TestCase):
    """
    Test SnapVaultSet 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">
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

    def test_bare_snapvaultset(self):
        """
        Test a bare snapvaultset node
        """
        xmldata = """
<snapvaultset />
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        self.failUnlessRaises( KeyError, sr.configure_from_node, node, self.defaults, self.project)

    def test_snapvaultset_id(self):
        """
        Test a snapvaultset with an id
        """
        xmldata = """
<snapvaultset name="default" />
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        self.failUnlessRaises( KeyError, sr.configure_from_node, node, self.defaults, self.project)

    def test_snapvaultset_targetfiler(self):
        """
        Test a snapvaultset with targetfiler, but no targetaggregate
        """
        xmldata = """
<snapvaultset name="default" targetfiler="filer01" />
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        self.failUnlessRaises( KeyError, sr.configure_from_node, node, self.defaults, self.project)

    def test_snapvaultset_targetaggr(self):
        """
        Test a snapvaultset with targetfiler and targetaggregate
        """
        xmldata = """
<snapvaultset name="default" targetfiler="filer01" targetaggregate="aggr02"/>
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        sr.configure_from_node(node, self.defaults, self.project)

        self.failUnlessEqual( sr.name, 'default')
        self.failUnlessEqual( sr.targetfiler, 'filer01')
        self.failUnlessEqual( sr.targetaggregate, 'aggr02')
        self.failUnlessEqual( sr.targetvolume, None)
        
    def test_snapvaultset_targetvolume(self):
        """
        Test a snapvaultset with targetfiler and targetvolume
        """
        xmldata = """
<snapvaultset name="default" targetfiler="filer01" targetvolume="testvol03"/>
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        sr.configure_from_node(node, self.defaults, self.project)

        self.failUnlessEqual( sr.name, 'default')
        self.failUnlessEqual( sr.targetfiler, 'filer01')
        self.failUnlessEqual( sr.targetaggregate, None)
        self.failUnlessEqual( sr.targetvolume, 'testvol03')
        
    def test_snapvaultset_multiplier(self):
        """
        Test setting a custom multipler for the snapvaultset
        """
        xmldata = """
<snapvaultset name="default"
              targetfiler="filer01"
              targetaggregate="aggr02"
              multiplier="3.4"/>
"""
        node = etree.fromstring(xmldata)
        sr = SnapVaultSet()
        sr.configure_from_node(node, self.defaults, self.project)

        self.failUnlessEqual( sr.name, 'default')
        self.failUnlessEqual( sr.multiplier, 3.4)
Exemple #44
0
class ExportTest(unittest.TestCase):
    """
    Test various export 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="sitea" type="primary" location="testlab">

  <host name="sitea_host01" operatingsystem="linux" />
  <host name="sitea_host02" operatingsystem="windows" />
  <host name="sitea_host03" operatingsystem="solaris" />

  <vlan type="project" number="3001">
    <network number="10.20.30.1/26" gateway="10.20.30.254"/>
  </vlan>
    <filer name="filer1" type="filer">
      <vfiler name="vftest01" rootaggr="aggr0">
        <ipaddress type="primary" ip="10.20.30.1"/>
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]

    def test_default_exports(self):
        """
        Test a single volume and the default exports.
        """
        xmldata = """
<volume>
</volume>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)
        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_01")

        self.project.setup_exports(self.defaults)

        # check the exports are set up correctly
        for qtree in self.vfiler1.get_qtrees():
            exports = qtree.get_exports()
            log.debug("exports: %s", [str(x) for x in exports])
            self.failUnlessEqual(len(exports), 3)
            self.failUnlessEqual(exports[0].fromip, '10.20.30.1')

    def test_default_exports_2(self):
        """
        Test a two volumes and the default exports.
        """
        xmldata = """
<volume/>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)

        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_02")

        self.project.setup_exports(self.defaults)

        # check the exports are set up correctly
        for qtree in self.vfiler1.get_qtrees():
            exports = qtree.get_exports()
            log.debug("exports: %s", [str(x) for x in exports])
            self.failUnlessEqual(len(exports), 3)
            self.failUnlessEqual(exports[0].fromip, '10.20.30.1')

    def test_qtree_default(self):
        """
        Test a single volume and the default exports.
        """
        xmldata = """
<volume>
  <qtree name="blahblah"/>
</volume>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)
        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_01")

        self.project.setup_exports(self.defaults)

        # check the exports are set up correctly
        for qtree in self.vfiler1.get_qtrees():
            exports = qtree.get_exports()
            log.debug("exports: %s", [str(x) for x in exports])
            self.failUnlessEqual(len(exports), 3)
            self.failUnlessEqual(exports[0].fromip, '10.20.30.1')
Exemple #45
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 #46
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 #47
0
    # Dynamic namespace information that is passed into document generators
    ns = {}

    # Load configuration file
    defaults = RawConfigParser()
    parsedfiles = defaults.read(optparser.options.configfile)
    if len(parsedfiles) == 0:
        raise ValueError("Cannot load configuration file: %s" % optparser.options.configfile)

    # Load the document generation plugins
    doc_plugins = load_doc_plugins(defaults)

    try:
        # load the configuration from a config file
        proj = Project()
        tree = etree.parse(optparser.options.definitionfile)
        proj.configure_from_node(tree.getroot(), defaults, None)

    except:
        log.critical("Cannot load configuration. Unhandled error condition:")
        import traceback
        traceback.print_exc()
        sys.exit(1)
        pass

    # Use the '-d' option to determine which document to generate
    docgen = doc_plugins[optparser.options.doctype](proj, defaults)
    #raise NotImplementedError("DocType of '%s' is not handled yet." % optparser.options.doctype)
    if optparser.options.outfile is not None:
        outf = open(optparser.options.outfile, "w")
Exemple #48
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 #49
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 #50
0
 def test_create_project_bare(self):
     xmlfile = os.path.join(XML_FILE_LOCATION, "project_bare.xml")
     tree = etree.parse(xmlfile)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #51
0
    # Dynamic namespace information that is passed into document generators
    ns = {}

    # Load configuration file
    defaults = RawConfigParser()
    parsedfiles = defaults.read(optparser.options.configfile)
    if len(parsedfiles) == 0:
        raise ValueError("Cannot load configuration file: %s" %
                         optparser.options.configfile)

    # Load the document generation plugins
    doc_plugins = load_doc_plugins(defaults)

    try:
        # load the configuration from a config file
        proj = Project()
        tree = etree.parse(optparser.options.definitionfile)
        proj.configure_from_node(tree.getroot(), defaults, None)

    except:
        log.critical("Cannot load configuration. Unhandled error condition:")
        import traceback
        traceback.print_exc()
        sys.exit(1)
        pass

    # Use the '-d' option to determine which document to generate
    docgen = doc_plugins[optparser.options.doctype](proj, defaults)
    #raise NotImplementedError("DocType of '%s' is not handled yet." % optparser.options.doctype)
    if optparser.options.outfile is not None:
        outf = open(optparser.options.outfile, "w")
Exemple #52
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 #53
0
 def test_create_project_bare(self):
     xmlfile = os.path.join(XML_FILE_LOCATION, "project_bare.xml")
     tree = etree.parse(xmlfile)
     project = Project()
     project.configure_from_node(tree.getroot(), self.defaults, None)
Exemple #54
0
class ExportTest(unittest.TestCase):
    """
    Test various export 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="sitea" type="primary" location="testlab">

  <host name="sitea_host01" operatingsystem="linux" />
  <host name="sitea_host02" operatingsystem="windows" />
  <host name="sitea_host03" operatingsystem="solaris" />

  <vlan type="project" number="3001">
    <network number="10.20.30.1/26" gateway="10.20.30.254"/>
  </vlan>
    <filer name="filer1" type="filer">
      <vfiler name="vftest01" rootaggr="aggr0">
        <ipaddress type="primary" ip="10.20.30.1"/>
        <aggregate name="aggr01"/>
      </vfiler>
    </filer>
  </site>
</project>
"""
        node = etree.fromstring(xmldata)
        self.project = Project()
        self.project.configure_from_node(node, self.defaults, None)

        self.sitea = self.project.get_sites()[0]
        self.filer1 = self.sitea.get_filers()[0]
        self.vfiler1 = self.filer1.get_vfilers()[0]
        self.aggr1 = self.vfiler1.get_aggregates()[0]

    def test_default_exports(self):
        """
        Test a single volume and the default exports.
        """
        xmldata = """
<volume>
</volume>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)
        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_01")

        self.project.setup_exports(self.defaults)
        
        # check the exports are set up correctly
        for qtree in self.vfiler1.get_qtrees():
            exports = qtree.get_exports()
            log.debug("exports: %s", [ str(x) for x in exports ])
            self.failUnlessEqual( len(exports), 3 )
            self.failUnlessEqual( exports[0].fromip, '10.20.30.1' )

    def test_default_exports_2(self):
        """
        Test a two volumes and the default exports.
        """
        xmldata = """
<volume/>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)

        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_02")

        self.project.setup_exports(self.defaults)

        # check the exports are set up correctly
        for qtree in self.vfiler1.get_qtrees():
            exports = qtree.get_exports()
            log.debug("exports: %s", [ str(x) for x in exports ])
            self.failUnlessEqual( len(exports), 3 )
            self.failUnlessEqual( exports[0].fromip, '10.20.30.1' )

    def test_qtree_default(self):
        """
        Test a single volume and the default exports.
        """
        xmldata = """
<volume>
  <qtree name="blahblah"/>
</volume>
"""
        node = etree.fromstring(xmldata)
        vol = volume.create_volume_from_node(node, self.defaults, self.aggr1)
        self.aggr1.add_child(vol)
        self.failUnlessEqual(vol.name, "filer1_vftest01_fs_01")

        self.project.setup_exports(self.defaults)

        # check the exports are set up correctly
        for qtree in self.vfiler1.get_qtrees():
            exports = qtree.get_exports()
            log.debug("exports: %s", [ str(x) for x in exports ])
            self.failUnlessEqual( len(exports), 3 )
            self.failUnlessEqual( exports[0].fromip, '10.20.30.1' )