def setUp(self): self.portal = self.layer['portal'] self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID] self.datasets = self.portal[defaults.DATASETS_FOLDER_ID] # create and run sdm experiment sdmform = SDMExperimentHelper(self.portal).get_form() sdmform.request.form.update({ 'form.buttons.save': 'Create and start', }) # update form with updated request sdmform.update() transaction.commit() # We should have only one SDM sdmexp = self.experiments.values()[0] self.form = ProjectionExperimentHelper(self.portal, sdmexp)
def setUp(self, mock_run_script): self.portal = self.layer['portal'] self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID] self.datasets = self.portal[defaults.DATASETS_FOLDER_ID] # create and run sdm experiment formhelper = SDMExperimentHelper(self.portal) sdmform = formhelper.get_form() sdmform.request.form.update({ 'form.buttons.save': 'Create and start', }) # update form with updated request sdmform.update() # setup mock_run_script mock_run_script.side_effect = formhelper.mock_run_script transaction.commit() # We should have only one SDM sdmexp = self.experiments.values()[0] self.form = ProjectionExperimentHelper(self.portal, sdmexp)
class ExperimentProjectionAddTest(unittest.TestCase): # Use functional layer for now to get a new demostorage layer for each test layer = BCCVL_FUNCTIONAL_TESTING # integration testing gives only a new transaction for each test # (rolled back at end) # layer = BCCVL_INTEGRATION_TESTING @mock.patch('pwd.getpwuid', mock.MagicMock(return_value=mock.MagicMock(pw_name='bccvl'))) @mock.patch('org.bccvl.tasks.compute.run_script') def setUp(self, mock_run_script): self.portal = self.layer['portal'] self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID] self.datasets = self.portal[defaults.DATASETS_FOLDER_ID] # create and run sdm experiment formhelper = SDMExperimentHelper(self.portal) sdmform = formhelper.get_form() sdmform.request.form.update({ 'form.buttons.save': 'Create and start', }) # update form with updated request sdmform.update() # setup mock_run_script mock_run_script.side_effect = formhelper.mock_run_script transaction.commit() # We should have only one SDM sdmexp = self.experiments.values()[0] self.form = ProjectionExperimentHelper(self.portal, sdmexp) # TODO: setup shortcuts suitable for CC # need 2 future datasets with different resolutions # need 2 raster datasets for input, to check fallback of non-future # layer def test_add_experiment_missing_input(self): form = self.form.get_form() # remove required field del form.request.form['form.widgets.IDublinCore.title'] form.request.form.update({ 'form.buttons.create': 'Create', }) # submit form form.update() errors = [e for e in form.widgets.errors] self.assertEqual(len(errors), 1) # check self.experiments still empty # IStatusMessage @mock.patch('org.bccvl.tasks.compute.run_script') def test_add_experiment(self, mock_run_script): form = self.form.get_form() form.request.form.update({ 'form.buttons.save': 'Create and start', }) # update form with updated request form.update() self.assertEqual(form.status, u'') self.assertEqual(len(form.widgets.errors), 0) self.assertIn('my-cc-experiment', self.experiments) exp = self.experiments['my-cc-experiment'] # TODO: update asserts self.assertEqual(exp.future_climate_datasets, [ unicode(self.form.future.UID())]) # FIXME: submitting with an empty model list doesn't cause form to fail self.assertEqual(exp.species_distribution_models, {self.form.sdmexp.UID(): {self.form.sdmmodel.UID(): {'label': u'0.5', 'value': Decimal('0.5')}}}) # get result container: (there is only one) self.assertEqual(len(exp.objectIds()), 1) result = exp.objectValues()[0] # FIXME: test result.job_params self.assertEqual(result.job_params['future_climate_datasets'], {exp.future_climate_datasets[0]: set([u'B01', u'B02'])}) # only one experiment so we only need to check first model self.assertEqual(result.job_params['species_distribution_models'], exp.species_distribution_models.values()[0].keys()[0]) self.assertEqual(result.job_params['resolution'], u'Resolution30m') self.assertEqual(result.job_params['emsc'], u'RCP3PD') self.assertEqual(result.job_params['gcm'], u'cccma-cgcm31') self.assertEqual(result.job_params['year'], 2015) # no result files yet self.assertEqual(len(result.keys()), 0) # test job state jt = IExperimentJobTracker(exp) self.assertEqual(jt.state, u'QUEUED') # setup mock_run_script mock_run_script.side_effect = self.form.mock_run_script # after transaction commit the job should finish transaction.commit() self.assertEqual(jt.state, u'COMPLETED') # and we should have a result as well self.assertGreaterEqual(len(result.keys()), 1) # TODO: check result metadata @mock.patch('org.bccvl.tasks.compute.run_script') def test_mixed_resolution(self, mock_run_script): future_1k_uuid = unicode( self.datasets[defaults.DATASETS_CLIMATE_FOLDER_ID]['future_1k'].UID()) form = self.form.get_form() form.request.form.update({ 'form.buttons.save': 'Create and start', # select 1k dataset as well 'form.widgets.future_climate_datasets': [future_1k_uuid], }) form.update() # setup mock_run_script mock_run_script.side_effect = self.form.mock_run_script # run experiment transaction.commit() exp = self.experiments['my-cc-experiment'] result = exp.values()[0] expmd = IBCCVLMetadata(exp) # We should have the missing layers filled by sdm env layer datasets self.assertEqual( result.job_params['future_climate_datasets'], { future_1k_uuid: set([u'B01']), self.form.sdmexp.environmental_datasets.keys()[0]: set([u'B02']) } ) # resolution should be set to the lowest of selected datasets self.assertEqual(expmd['resolution'], 'Resolution2_5m')
class ExperimentProjectionAddTest(unittest.TestCase): # Use functional layer for now to get a new demostorage layer for each test layer = BCCVL_FUNCTIONAL_TESTING # integration testing gives only a new transaction for each test # (rolled back at end) # layer = BCCVL_INTEGRATION_TESTING @mock.patch('pwd.getpwuid', mock.MagicMock(return_value=mock.MagicMock(pw_name='bccvl'))) @mock.patch('org.bccvl.tasks.compute.run_script') def setUp(self, mock_run_script): self.portal = self.layer['portal'] self.experiments = self.portal[defaults.EXPERIMENTS_FOLDER_ID] self.datasets = self.portal[defaults.DATASETS_FOLDER_ID] # create and run sdm experiment formhelper = SDMExperimentHelper(self.portal) sdmform = formhelper.get_form() sdmform.request.form.update({ 'form.buttons.save': 'Create and start', }) # update form with updated request sdmform.update() # setup mock_run_script mock_run_script.side_effect = formhelper.mock_run_script transaction.commit() # We should have only one SDM sdmexp = self.experiments.values()[0] self.form = ProjectionExperimentHelper(self.portal, sdmexp) # TODO: setup shortcuts suitable for CC # need 2 future datasets with different resolutions # need 2 raster datasets for input, to check fallback of non-future # layer def test_add_experiment_missing_input(self): form = self.form.get_form() # remove required field del form.request.form['form.widgets.IDublinCore.title'] form.request.form.update({ 'form.buttons.create': 'Create', }) # submit form form.update() errors = [e for e in form.widgets.errors] self.assertEqual(len(errors), 1) # check self.experiments still empty # IStatusMessage @mock.patch('org.bccvl.tasks.compute.run_script') def test_add_experiment(self, mock_run_script): form = self.form.get_form() form.request.form.update({ 'form.buttons.save': 'Create and start', }) # update form with updated request form.update() self.assertEqual(form.status, u'') self.assertEqual(len(form.widgets.errors), 0) self.assertIn('my-cc-experiment', self.experiments) exp = self.experiments['my-cc-experiment'] # TODO: update asserts self.assertEqual(exp.future_climate_datasets, [unicode(self.form.future.UID())]) # FIXME: submitting with an empty model list doesn't cause form to fail self.assertEqual( exp.species_distribution_models, { self.form.sdmexp.UID(): { self.form.sdmmodel.UID(): { 'label': u'0.5', 'value': Decimal('0.5') } } }) # get result container: (there is only one) self.assertEqual(len(exp.objectIds()), 1) result = exp.objectValues()[0] # FIXME: test result.job_params self.assertEqual( result.job_params['future_climate_datasets'], {exp.future_climate_datasets[0]: set([u'B01', u'B02'])}) # only one experiment so we only need to check first model self.assertEqual(result.job_params['species_distribution_models'], exp.species_distribution_models.values()[0].keys()[0]) self.assertEqual(result.job_params['resolution'], u'Resolution30m') self.assertEqual(result.job_params['emsc'], u'RCP3PD') self.assertEqual(result.job_params['gcm'], u'cccma-cgcm31') self.assertEqual(result.job_params['year'], 2015) # no result files yet self.assertEqual(len(result.keys()), 0) # test job state jt = IExperimentJobTracker(exp) self.assertEqual(jt.state, u'QUEUED') # setup mock_run_script mock_run_script.side_effect = self.form.mock_run_script # after transaction commit the job should finish transaction.commit() self.assertEqual(jt.state, u'COMPLETED') # and we should have a result as well self.assertGreaterEqual(len(result.keys()), 1) # TODO: check result metadata @mock.patch('org.bccvl.tasks.compute.run_script') def test_mixed_resolution(self, mock_run_script): future_1k_uuid = unicode(self.datasets[ defaults.DATASETS_CLIMATE_FOLDER_ID]['future_1k'].UID()) form = self.form.get_form() form.request.form.update({ 'form.buttons.save': 'Create and start', # select 1k dataset as well 'form.widgets.future_climate_datasets': [future_1k_uuid], }) form.update() # setup mock_run_script mock_run_script.side_effect = self.form.mock_run_script # run experiment transaction.commit() exp = self.experiments['my-cc-experiment'] result = exp.values()[0] expmd = IBCCVLMetadata(exp) # We should have the missing layers filled by sdm env layer datasets self.assertEqual( result.job_params['future_climate_datasets'], { future_1k_uuid: set([u'B01']), self.form.sdmexp.environmental_datasets.keys()[0]: set( [u'B02']) }) # resolution should be set to the lowest of selected datasets self.assertEqual(expmd['resolution'], 'Resolution2_5m')