Пример #1
0
    def setUp(self):
        super(ProjectTestCase, self).setUp()
        
        self.taxonomy = get_taxonomy("gem")
        self.test_config = SIDDConfig(self.test_data_dir + '/test.cfg')
        
        self.proj_file = self.test_data_dir +  'test.db'
        self.proj_file3 = self.test_data_dir +  'test3.db'
        
        self.fp_path = self.test_data_dir +  'footprints3.shp'
        self.survey_path = self.test_data_dir +  "survey3.db3"
        self.zone_path = self.test_data_dir +  "zones3.shp"
        self.zone_field = 'LandUse'
        self.bldgcount_field = 'NumBldg'

        self.zone2_path = self.test_data_dir +  "zones2.shp"
        self.zone2_field = "ZONE"
        
        self.operator_options = {
            'tmp_dir': self.test_tmp_dir,
            'taxonomy':self.taxonomy,
            'skips': self.test_config.get('options', 'skips', [], types.ListType),     
        }
Пример #2
0
class ProjectTestCase(SIDDTestCase):

    # run for everytesy
    ##################################
    
    def setUp(self):
        super(ProjectTestCase, self).setUp()
        
        self.taxonomy = get_taxonomy("gem")
        self.test_config = SIDDConfig(self.test_data_dir + '/test.cfg')
        
        self.proj_file = self.test_data_dir +  'test.db'
        self.proj_file3 = self.test_data_dir +  'test3.db'
        
        self.fp_path = self.test_data_dir +  'footprints3.shp'
        self.survey_path = self.test_data_dir +  "survey3.db3"
        self.zone_path = self.test_data_dir +  "zones3.shp"
        self.zone_field = 'LandUse'
        self.bldgcount_field = 'NumBldg'

        self.zone2_path = self.test_data_dir +  "zones2.shp"
        self.zone2_field = "ZONE"
        
        self.operator_options = {
            'tmp_dir': self.test_tmp_dir,
            'taxonomy':self.taxonomy,
            'skips': self.test_config.get('options', 'skips', [], types.ListType),     
        }

    # tests
    ##################################
    
    def test_CreateProject(self, skipTest=False):
        logging.debug('test_CreateProject %s' % skipTest)
        
        proj_file = '%stest.db' % self.test_tmp_dir
        proj = Project(self.test_config, self.taxonomy)
        proj.set_project_path(proj_file)
        proj.operator_options = self.operator_options        
        if skipTest:
            return (proj, proj_file)
        
        # clean up
        del proj
        os.remove(proj_file)

    def test_LoadProject(self, skipTest=False):
        logging.debug('test_LoadProject %s' % skipTest)
        
        proj = Project(self.test_config, self.taxonomy)
        proj.set_project_path(self.proj_file)
        proj.sync(SyncModes.Read)
        if skipTest:
            return proj
    
    def test_WorkflowBuilder(self):
        logging.debug('test_BuildWorkflow')
        
        def get_run_exception(func, param):
            try:
                func(param)
            except Exception as ex:
                import traceback
                traceback.print_exc() 
                return ex
            return None

        # empty proj/ms should be enough for testing
        (proj, proj_file) = self.test_CreateProject(True)
        ms = MappingScheme(self.taxonomy) 
        
        builder = WorkflowBuilder(self.operator_options)

        # test cases raising exception
        ###################
        # test case, empty project, should have errors NeedsZone, NeedsCount, NeedsMS
        workflow = builder.build_workflow(proj)
        self.assertTrue(not workflow.ready)
        self.assertEqual(len(workflow.errors), 3)
        self.assertListEqual(workflow.errors, [WorkflowErrors.NeedsZone, 
                                               WorkflowErrors.NeedsCount, 
                                               WorkflowErrors.NeedsMS])
        
        # test case, only zone, should raise exception need count
        proj.set_zones(ZonesTypes.Landuse, self.zone2_path, self.zone2_field)
        workflow = builder.build_workflow(proj)        
        self.assertTrue(not workflow.ready)
        self.assertEqual(len(workflow.errors), 2)
        self.assertListEqual(workflow.errors, [WorkflowErrors.NeedsCount, 
                                               WorkflowErrors.NeedsMS])
        
        # test case, zone / footprint, should raise exception need ms 
        proj.set_footprint(FootprintTypes.Footprint, self.fp_path)
        workflow = builder.build_workflow(proj)        
        self.assertTrue(not workflow.ready)
        self.assertEqual(len(workflow.errors), 1)
        self.assertListEqual(workflow.errors, [WorkflowErrors.NeedsMS])

        # complete footprint / zone / ms to zone, no exception
        proj.ms = ms 
        proj.set_output_type(OutputTypes.Zone)
        workflow = builder.build_workflow(proj)
        self.assertTrue(workflow.ready)
        self.assertEqual(len(workflow.errors), 0)
        
        # test cases no exception
        ###################

        # complete footprint / zone / ms to grid, no exception 
        proj.set_output_type(OutputTypes.Grid)
        workflow = builder.build_workflow(proj)
        self.assertTrue(workflow.ready)
        self.assertEqual(len(workflow.errors), 0)

        # test case, zonecount and ms to grid, no exception
        proj.set_footprint(FootprintTypes.None) # remove footprint
        proj.set_zones(ZonesTypes.LanduseCount, self.zone_path, self.zone_field, self.bldgcount_field)
        proj.ms = ms
        proj.set_output_type(OutputTypes.Grid)
        workflow = builder.build_workflow(proj)
        self.assertTrue(workflow.ready)
        self.assertEqual(len(workflow.errors), 0)
        
        # test case, zonecount and ms to zone, no exception        
        proj.set_output_type(OutputTypes.Zone)
        workflow = builder.build_workflow(proj)
        self.assertTrue(workflow.ready)
        self.assertEqual(len(workflow.errors), 0)

        # test case, complete survey, no exception
        proj.set_survey(SurveyTypes.CompleteSurvey, self.survey_path)
        workflow = builder.build_workflow(proj)
        self.assertTrue(workflow.ready)
        self.assertEqual(len(workflow.errors), 0)
        
        # clean up
        del proj
        os.remove(proj_file)

    def test_BuildExposure(self):
        logging.debug('test_BuildWorkflow')        
        
        logAPICall.setLevel(logAPICall.DEBUG_L2)
        
        # create temp dir for project data
        proj_tmp_dir = '%s/%s/' % (self.test_tmp_dir, get_random_name())
        if not os.path.exists(proj_tmp_dir):
            os.mkdir(proj_tmp_dir)
        
        proj = Project(self.test_config, self.taxonomy)
        proj.set_project_path(self.proj_file3)
        proj.sync(SyncModes.Read)
        
        proj.operator_options['tmp_dir'] = proj_tmp_dir
        proj.temp_dir = proj_tmp_dir
        proj.fp_file = self.fp_path 
        proj.survey_file = self.survey_path 
        proj.zone_file = self.zone_path 
        
        proj.verify_data()
        proj.build_exposure()
        self.assertTrue(os.path.exists(proj.exposure_file))
        del proj