def empty_repository_test(self, get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # Test that Repository gets db from shell when it exists g = get_g.return_value g.grass_vars["GISDBASE"] = self.temp_dir g.in_grass_shell = True m_in_grass = ModelRepository(self.temp_dir) self.assertEqual(m_in_grass.db, self.temp_dir) # Test with no specified dir m_in_grass = ModelRepository() self.assertEqual(m_in_grass.db, self.temp_dir) g.in_grass_shell = False # Test with dir missing self.assertRaises(OSError, ModelRepository, 'invalid/dir') # Try to add a model from one repository to the empty one try: self.remove_mock_location(self.temp_dir) except OSError, e: stre = str(e) if 'No such file' not in stre and \ 'system cannot find the path specified' not in stre: raise e
def empty_repository_test(self,get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # Test that Repository gets db from shell when it exists g = get_g.return_value g.grass_vars["GISDBASE"] = self.temp_dir g.in_grass_shell = True m_in_grass = ModelRepository(self.temp_dir) self.assertEqual(m_in_grass.db, self.temp_dir) # Test with no specified dir m_in_grass = ModelRepository() self.assertEqual(m_in_grass.db, self.temp_dir) g.in_grass_shell = False # Test with dir missing self.assertRaises(OSError,ModelRepository,'invalid/dir') # Try to add a model from one repository to the empty one try: self.remove_mock_location(self.temp_dir) except OSError, e: stre = str(e) if 'No such file' not in stre and \ 'system cannot find the path specified' not in stre: raise e
def normal_repository_test(self): m = ModelRepository() models = m.get_models() self.assertEqual(len(models), 13) self.assertTrue("lifestage_test" in models) self.assertTrue("variables" in models) self.assertTrue("management_area_combine" in models) self.assertTrue("management_delay" in models) self.assertTrue("management_event" in models) self.assertTrue("management_alter_variable" in models)
def normal_repository_test(self): m = ModelRepository() models = m.get_models() self.assertEqual(len(models),13) self.assertTrue("lifestage_test" in models) self.assertTrue("variables" in models) self.assertTrue("management_area_combine" in models) self.assertTrue("management_delay" in models) self.assertTrue("management_event" in models) self.assertTrue("management_alter_variable" in models)
def test_add_lifestage_model(self, get_g, m_ls): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) m2 = ModelRepository() a_file = m2.get_models()['lifestage_test'] self.create_mock_location(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # add location to model, save as new dm = DispersalModel(a_file) dm.set_location('grass_location') temp_model_fn = os.path.join(os.path.dirname(a_file), "with_location_model.xml") dm.save_model(filename=temp_model_fn) get_g.return_value.get_range.return_value = ['xxxxxx10'] * 10 get_g.return_value.raster_value_freq.return_value = [[1], [2], [3]] m_ls.return_value = {} # and then try to add m.add_model(temp_model_fn) self.assertEqual(len(m.get_models()), 1) # more tests about lifestage resources? self.remove_mock_location(self.temp_dir)
def remove_model_test(self,get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # Try to add a model from one repository to the empty one try: self.remove_mock_location(self.temp_dir) except OSError, e: stre = str(e) if 'No such file' not in stre and \ 'system cannot find the path specified' not in stre: raise e
def remove_model_test(self, get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # Try to add a model from one repository to the empty one try: self.remove_mock_location(self.temp_dir) except OSError, e: stre = str(e) if 'No such file' not in stre and \ 'system cannot find the path specified' not in stre: raise e
def setUp(self): self.port = 8080 self.host = 'localhost' self.app = mdig.bottle.app() import wsgiref.validate self.wsgiapp = wsgiref.validate.validator(self.app) mdig.repository = self.repo = ModelRepository()
def test_add_lifestage_model(self,get_g,m_ls): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) m2 = ModelRepository() a_file = m2.get_models()['lifestage_test'] self.create_mock_location(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # add location to model, save as new dm = DispersalModel(a_file) dm.set_location('grass_location') temp_model_fn = os.path.join(os.path.dirname(a_file),"with_location_model.xml") dm.save_model(filename=temp_model_fn) get_g.return_value.get_range.return_value = [ 'xxxxxx10' ] * 10 get_g.return_value.raster_value_freq.return_value = [ [1],[2],[3] ] m_ls.return_value = {} # and then try to add m.add_model(temp_model_fn) self.assertEqual(len(m.get_models()), 1) # more tests about lifestage resources? self.remove_mock_location(self.temp_dir)
def test_is_complete(self): mdig.repository = ModelRepository() models = mdig.repository.get_models() fn = models['variables'] m = DispersalModel(fn) self.assertFalse(m.is_complete()) fn = models['variables_complete'] m = DispersalModel(fn) self.assertTrue(m.is_complete())
def test_get_weird_resources(self): mdig.repository = self.repo = ModelRepository() models = mdig.repository.get_models() # this model has a comment that messed up initial map creation fn = models['test_weird_map_resource'] m = DispersalModel(fn) res = m.get_resources() self.assertEqual(len(res), 0) m.remove_log_handler()
def migrate_repository(grassdb_dir): mr = ModelRepository(grassdb_dir) model_fns = mr.get_models() for model in model_fns: model_fn = model_fns[model] # check for unseparated instances from main mapset dm = DispersalModel(model_fn) try: instances = dm.get_instances() for i in instances: mapset = i.get_mapset() if not check_instances_have_info_file(dm.get_instances()): print "Model %s ok" % model except DispersalInstanceException, e: if not "no longer supports instances sharing one mapset" in str(e): continue # if so, fix them print dm.get_mapset() + " not ok.. fixing" split_instances_into_own_mapsets(dm)
def setUp(self): c = config.get_config() self.old_dbase = c['GRASS']['GISDBASE'] self.m_dir = os.path.join(c['GRASS']['GISDBASE'], 'migrate_tests/version-0.2.9') c['GRASS']['GISDBASE'] = self.m_dir print self.m_dir mdig.repository = ModelRepository(self.m_dir) self.models = mdig.repository.get_models() print self.models
def test_get_instances(self): # this functionally generally well tested, but # test removing deprecated baseDir attrib... mdig.repository = ModelRepository() models = mdig.repository.get_models() fn = models['lifestage_test'] m = DispersalModel(fn) completed_node = m.xml_model.xpath("/model/instances") self.assertTrue(len(completed_node) > 0) completed_node[0].attrib['baseDir'] = 'flibble' instances = m.get_instances()
def test_run(self): mdig.repository = ModelRepository() models = mdig.repository.get_models() fn = models['lifestage_test'] m = DispersalModel(fn) m._get_instance_w_smallest_reps_remaining = Mock() m._get_instance_w_smallest_reps_remaining.return_value = None m.run() self.assertEqual(m.active, False) # These are less than or equal because of VM clock being weird self.assertTrue(m.start_time <= datetime.datetime.now()) self.assertTrue(m.start_time <= m.end_time)
def test_lifestage_model_missing_files(self,get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) m2 = ModelRepository() a_file = m2.get_models()['lifestage_test'] self.create_mock_location(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # add location to model, save as new dm = DispersalModel(a_file) dm.set_location('grass_location') temp_model_fn = os.path.join(self.temp_dir,"with_location_model.xml") dm.save_model(filename=temp_model_fn) # and then try to add self.assertRaises(mdig.modelrepository.RepositoryException,m.add_model,temp_model_fn) self.assertEqual(len(m.get_models()), 0) # more tests about lifestage resources? self.remove_mock_location(self.temp_dir)
def test_hard_reset(self, m_rm): mdig.repository = ModelRepository() models = mdig.repository.get_models() fn = models['lifestage_test'] m = DispersalModel(fn) # init the mapsets so we have something to remove for i in m.get_instances(): i.init_mapset() m.hard_reset() self.assertEqual(m_rm.call_count, 1) self.assertEqual(len(m.xml_model.xpath('/model/instances/completed')), 0) m.remove_log_handler()
def test_get_resources(self, m_xml): m_xml.return_value = {} mdig.repository = self.repo = ModelRepository() models = mdig.repository.get_models() # in other test del models['test_weird_map_resource'] ### fn = models['lifestage_test'] m = DispersalModel(fn) res = m.get_resources() self.assertEqual(len(res), 7) self.assertEqual(len([i[0] for i in res if i[0] == 'popmod']), 1) self.assertEqual(len([i[0] for i in res if i[0] == 'coda']), 6) del models['lifestage_test'] m.remove_log_handler() fn = models['test_named_region'] m = DispersalModel(fn) res = m.get_resources() self.assertEqual(len(res), 5) self.assertEqual(len([i[0] for i in res if i[0] == 'region']), 1) self.assertEqual(len([i[0] for i in res if i[0] == 'map']), 4) self.assertEqual(len([i[0] for i in res if i[2] == 'PERMANENT']), 2) self.assertEqual( len([i[0] for i in res if i[2] == 'test_named_region']), 2) self.assertEqual(len([i[0] for i in res if i[2] is None]), 1) del models['test_named_region'] m.remove_log_handler() fn = models['management_use_maps'] m = DispersalModel(fn) res = m.get_resources() self.assertEqual(len(res), 3) self.assertEqual(len([i[0] for i in res if i[0] == 'map']), 3) self.assertEqual(len([i[0] for i in res if i[2] == 'PERMANENT']), 1) self.assertEqual(len([i[0] for i in res if i[2] is None]), 2) del models['management_use_maps'] m.remove_log_handler() # check the others don't erroneously report resources for k in models: fn = models[k] m = DispersalModel(fn) res = m.get_resources() self.assertEqual(len(res), 0) m.remove_log_handler()
def setUp(self): mdig.repository = self.repo = ModelRepository() #logging.getLogger('mdig').setLevel(logging.CRITICAL) models = mdig.repository.get_models() fn = models['lifestage_test'] self.m_lifestage = DispersalModel(fn) # Model initialise with variables fn = models['variables'] self.m_variables = DispersalModel(fn) fn = models['variables_complete'] self.m_variables_complete = DispersalModel(fn) # management fn = models['management_alter_variable'] self.m_management = DispersalModel(fn) #analysis fn = models['analysis_example'] self.m_analysis = DispersalModel(fn)
def setUp(self): mdig.repository = self.repo = ModelRepository() #logging.getLogger('mdig').setLevel(logging.CRITICAL) models = mdig.repository.get_models() fn = models['lifestage_test'] self.m_lifestage = DispersalModel(fn) # Model initialise with management strategy fn = models['management_area_combine'] self.m_strategy = DispersalModel(fn) # Model initialise with variables fn = models['variables'] self.m_variables = DispersalModel(fn) #logging.getLogger('mdig').setLevel(logging.WARNING) fn = models['variables_complete'] self.m_variables_complete = DispersalModel(fn) c = config.get_config() self.gisdb = c['GRASS']['GISDBASE']
def test_null_bitmask(self): mdig.repository = ModelRepository() models = mdig.repository.get_models() fn = models['lifestage_test'] m = DispersalModel(fn) for i in m.get_instances(): i.null_bitmask = Mock() m.null_bitmask() for i in m.get_instances(): self.assertEqual(i.null_bitmask.call_count, 1) self.assertEqual(i.null_bitmask.call_args[0][0], True) # check parameter is passed m.null_bitmask(generate=False) for i in m.get_instances(): self.assertEqual(i.null_bitmask.call_count, 2) self.assertEqual(i.null_bitmask.call_args[0][0], False) # check disabled instances are not touched for i in m.get_instances(): i.enabled = False m.null_bitmask() for i in m.get_instances(): self.assertEqual(i.null_bitmask.call_count, 2)
def test_lifestage_model_missing_files(self, get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) m2 = ModelRepository() a_file = m2.get_models()['lifestage_test'] self.create_mock_location(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # add location to model, save as new dm = DispersalModel(a_file) dm.set_location('grass_location') temp_model_fn = os.path.join(self.temp_dir, "with_location_model.xml") dm.save_model(filename=temp_model_fn) # and then try to add self.assertRaises(mdig.modelrepository.RepositoryException, m.add_model, temp_model_fn) self.assertEqual(len(m.get_models()), 0) # more tests about lifestage resources? self.remove_mock_location(self.temp_dir)
def remove_model_test(self, get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # Try to add a model from one repository to the empty one try: self.remove_mock_location(self.temp_dir) except OSError, e: stre = str(e) if 'No such file' not in stre and \ 'system cannot find the path specified' not in stre: raise e m2 = ModelRepository() a_file = m2.get_models()['variables'] self.create_mock_location(self.temp_dir) # Add location to model dm = DispersalModel(a_file) dm.set_location('grass_location') temp_model_fn = "with_location_model.xml" dm.save_model(filename=temp_model_fn) m.add_model(temp_model_fn) self.assertEqual(len(m.get_models()), 1) m.remove_model('variables', force=True) self.assertEqual(get_g.return_value.remove_mapset.call_args[0][0], 'variables') os.remove(temp_model_fn)
def test_log_instance_times(self): mdig.repository = ModelRepository() models = mdig.repository.get_models() fn = models['lifestage_test'] m = DispersalModel(fn) m.log_instance_times()
def setUp(self): mdig.repository = self.repo = ModelRepository()
def remove_model_test(self,get_g): self.make_grass_mock(get_g.return_value) # Assume no appropriate files in tmp c = config.get_config() m = ModelRepository(self.temp_dir) self.assertEqual(len(m.get_models()), 0) # Try to add a model from one repository to the empty one try: self.remove_mock_location(self.temp_dir) except OSError, e: stre = str(e) if 'No such file' not in stre and \ 'system cannot find the path specified' not in stre: raise e m2 = ModelRepository() a_file = m2.get_models()['variables'] self.create_mock_location(self.temp_dir) # Add location to model dm = DispersalModel(a_file) dm.set_location('grass_location') temp_model_fn = "with_location_model.xml" dm.save_model(filename=temp_model_fn) m.add_model(temp_model_fn) self.assertEqual(len(m.get_models()), 1) m.remove_model('variables',force=True) self.assertEqual(get_g.return_value.remove_mapset.call_args[0][0], 'variables') os.remove(temp_model_fn)