Skip to content
Snippets Groups Projects
test_biozentrum.py 5.98 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/python
    import os
    
    import settings
    import systemtest.testcase
    import systemtest.util as util
    
    
    NOTIFICATION_TEMPLATE = "storage_provider.storage.status = STORAGE_SUCCESSFUL;storage_provider.dataset.id = ${data-set-code};ibrain2.dataset.id = ${property.ibrain2.dataset.id}"
    
    
    class TestCase(systemtest.testcase.TestCase):
    
        def execute(self):
            self.installOpenbis(technologies = ['screening'])
            openbisController = self.createOpenbisController()
            openbisController.dssProperties['scripts-dir'] = "../../../../../../%s/scripts" % openbisController.templatesFolder
            post_registration_tasks = openbisController.dssProperties['post-registration.post-registration-tasks'] 
            openbisController.dssProperties['post-registration.post-registration-tasks'] = "%s, eager-shuffling, notifying" % post_registration_tasks
            openbisController.dssProperties['post-registration.eager-shuffling.class'] = "ch.systemsx.cisd.etlserver.postregistration.EagerShufflingTask"
            openbisController.dssProperties['post-registration.eager-shuffling.data-store-server-code'] = "${data-store-server-code}"
            openbisController.dssProperties['post-registration.eager-shuffling.storeroot-dir'] = "${storeroot-dir}"
            openbisController.dssProperties['post-registration.eager-shuffling.share-finder.class'] = "ch.systemsx.cisd.etlserver.postregistration.SimpleShareFinder"
            openbisController.dssProperties['post-registration.notifying.class'] = "ch.systemsx.cisd.etlserver.postregistration.NotifyingTask"
            openbisController.dssProperties['post-registration.notifying.message-template'] = NOTIFICATION_TEMPLATE
    
            openbisController.dssProperties['post-registration.notifying.destination-path-template'] = '${root-dir}/../registration-status/ibrain2_dataset_id2_${property.ibrain2.dataset.id}.properties'
    
            openbisController.createTestDatabase('openbis')
            registrationStatusFolder = "%s/registration-status" % openbisController.installPath
            os.makedirs(registrationStatusFolder)
            openbisController.allUp()
            # Register image data set
            self.dropWaitAndCheck(openbisController, 32, 'incoming-hcs-image-raw', 
                                  'HCS_IMAGE_CONTAINER_RAW', numberOfDataSets = 2)
            # Register derived data sets
            parentDataSet = self.getImageDataSetCode(openbisController, registrationStatusFolder)
            self.dropWaitAndCheck(openbisController, 99, 'incoming-hcs-image-segmentation', 
                                  'HCS_IMAGE_CONTAINER_SEGMENTATION', parentDataSet, 2)
            self.dropWaitAndCheck(openbisController, 77, 'incoming-hcs-analysis-well-results-summaries', 
                                  'HCS_ANALYSIS_CONTAINER_WELL_RESULTS_SUMMARIES', parentDataSet)
            openbisController.assertFeatureVectorLabel('INTERPHASEINVASOMEINFECTION_INDEX', 'InterphaseInvasomeInfection_Index')
            openbisController.assertFeatureVectorLabel('COUNT_BACTERIA', 'Count_Bacteria')
            self.dropWaitAndCheck(openbisController, 47, 'incoming-hcs-analysis-well-quality-summary', 
                                  'HCS_ANALYSIS_CONTAINER_WELL_QUALITY_SUMMARY', parentDataSet)
            openbisController.assertFeatureVectorLabel('FOCUS_SCORE', 'Focus_Score')
            self.dropWaitAndCheck(openbisController, 58, 'incoming-hcs-analysis-cell-features-cc-mat', 
                                  'HCS_ANALYSIS_CELL_FEATURES_CC_MAT', parentDataSet)
            openbisController.assertNumberOfDataSets(7, openbisController.getDataSets())
            
        def executeInDevMode(self):
            openbisController = self.createOpenbisController(dropDatabases=False)
            openbisController.allUp()
    
        def dropWaitAndCheck(self, openbisController, id, dropBoxName, expectedDataSetType, parentDataSet = None, numberOfDataSets = 1):
            dataName = "ibrain2_dataset_id_%s" % id
            openbisController.drop(dataName, dropBoxName)
            if parentDataSet is not None:
                with open("%s/data/%s/%s/metadata.properties" % (openbisController.installPath, dropBoxName, dataName), "a") as f:
                    f.write("storage_provider.parent.dataset.id = %s\n" % parentDataSet)
            markerFile = "%s/data/%s/.MARKER_is_finished_%s" % (openbisController.installPath, dropBoxName, dataName)
            open(markerFile, 'a').close()
            openbisController.waitUntilDataSetRegistrationFinished(numberOfDataSets = numberOfDataSets)
            statusProps = util.readProperties("%s/registration-status/%s.properties" % (openbisController.installPath, dataName))
            self.assertPropertyValue('STORAGE_SUCCESSFUL', statusProps, 'storage_provider.storage.status')
            self.assertPropertyValue(str(id), statusProps, 'ibrain2.dataset.id')
            dataSetCode = statusProps['storage_provider.dataset.id']
            data = openbisController.queryDatabase('openbis', 
                        "select t.code from data join data_set_types as t on data.dsty_id = t.id where data.code = '%s'" % dataSetCode)
            self.assertEquals("Type of data set %s" % dataSetCode, [[expectedDataSetType]], data)
            dropBoxFolder = "%s/data/%s" % (openbisController.installPath, dropBoxName)
            self.assertEquals("Files in '%s'" % dropBoxFolder, '[]', str(os.listdir(dropBoxFolder)))
            
        def assertPropertyValue(self, expectedValue, properties, key):
            self.assertEquals("Value of '%s'" % key, expectedValue, properties[key])
    
        def getImageDataSetCode(self, openbisController, registrationStatusFolder):
            registrationStatusFolder = "%s/registration-status" % openbisController.installPath
            registrationProps = util.readProperties("%s/ibrain2_dataset_id_32.properties" % registrationStatusFolder)
            parentDataSetKey = 'storage_provider.dataset.id'
            parentDataSet = registrationProps[parentDataSetKey]
            if parentDataSet is None:
                raise Exception("Undefined property '%s' in '%s':\n%s" % (parentDataSet, registrationStatusFolder, registrationProps))
            util.printAndFlush("Parent data set code: %s" % parentDataSet)
            return parentDataSet
        
    TestCase(settings, __file__).runTest()