Exemple #1
0
 def test_get_available_bursts_happy(self):
     """
     Test that all the correct burst are returned for the given project.
     """
     project = model.Project("second_test_proj", self.test_user.id,
                             "description")
     second_project = dao.store_entity(project)
     test_project_bursts = [
         TestFactory.store_burst(self.test_project.id).id for _ in xrange(4)
     ]
     second_project_bursts = [
         TestFactory.store_burst(second_project.id).id for _ in xrange(3)
     ]
     returned_test_project_bursts = [
         burst.id for burst in self.burst_service.get_available_bursts(
             self.test_project.id)
     ]
     returned_second_project_bursts = [
         burst.id for burst in self.burst_service.get_available_bursts(
             second_project.id)
     ]
     self.assertEqual(
         len(test_project_bursts), len(returned_test_project_bursts),
         "Incorrect bursts retrieved for project %s." % self.test_project)
     self.assertEqual(
         len(second_project_bursts), len(returned_second_project_bursts),
         "Incorrect bursts retrieved for project %s." % second_project)
     self.assertEqual(
         set(second_project_bursts), set(returned_second_project_bursts),
         "Incorrect bursts retrieved for project %s." % second_project)
     self.assertEqual(
         set(test_project_bursts), set(returned_test_project_bursts),
         "Incorrect bursts retrieved for project %s." % self.test_project)
Exemple #2
0
    def test_remove_project_node(self):
        """
        Test removing of a node from a project.
        """
        inserted_project, gid, gid_op = self._create_value_wrapper(self.test_user) 
        project_to_link = model.Project("Link", self.test_user.id, "descript")
        project_to_link = dao.store_entity(project_to_link)
        exact_data = dao.get_datatype_by_gid(gid)
        dao.store_entity(model.Links(exact_data.id, project_to_link.id))
        assert dao.get_datatype_by_gid(gid) is not None, "Initialization problem!"
        
        operation_id = dao.get_generic_entity(model.Operation, gid_op, 'gid')[0].id
        op_folder = self.structure_helper.get_project_folder("test_proj", str(operation_id))
        assert os.path.exists(op_folder)
        sub_files = os.listdir(op_folder)
        assert 2 == len(sub_files)
        ### Validate that no more files are created than needed.

        if(dao.get_system_user() is None):
            dao.store_entity(model.User(TvbProfile.current.web.admin.SYSTEM_USER_NAME, None, None, True, None))
        self.project_service._remove_project_node_files(inserted_project.id, gid)
        sub_files = os.listdir(op_folder)
        assert 1 == len(sub_files)
        ### operation.xml file should still be there
        
        op_folder = self.structure_helper.get_project_folder("Link", str(operation_id + 1)) 
        sub_files = os.listdir(op_folder)
        assert 2 == len(sub_files)
        assert dao.get_datatype_by_gid(gid) is not None, "Data should still be in DB, because of links"
        self.project_service._remove_project_node_files(project_to_link.id, gid)
        assert dao.get_datatype_by_gid(gid) is None
        sub_files = os.listdir(op_folder)
        assert 1 == len(sub_files)
    def test_get_upload_operations(self):
        """
        Test get_all when filter is for Upload category.
        """
        self.__init_algorithmn()
        upload_algo = self._create_algo_for_upload()

        project = model.Project("test_proj_2", self.test_user.id, "desc")
        project = dao.store_entity(project)

        op1 = model.Operation(self.test_user.id, self.test_project.id, self.algo_inst.id, "")
        op2 = model.Operation(self.test_user.id, project.id, upload_algo.id, "", status=model.STATUS_FINISHED)
        op3 = model.Operation(self.test_user.id, self.test_project.id, upload_algo.id, "")
        op4 = model.Operation(self.test_user.id, self.test_project.id, upload_algo.id, "", status=model.STATUS_FINISHED)
        op5 = model.Operation(self.test_user.id, self.test_project.id, upload_algo.id, "", status=model.STATUS_FINISHED)
        operations = dao.store_entities([op1, op2, op3, op4, op5])

        upload_operations = self.project_service.get_all_operations_for_uploaders(self.test_project.id)
        self.assertEqual(2, len(upload_operations), "Wrong number of upload operations.")
        upload_ids = [operation.id for operation in upload_operations]
        for i in [3, 4]:
            self.assertTrue(operations[i].id in upload_ids,
                            "The operation should be an upload operation.")
        for i in [0, 1, 2]:                    
            self.assertFalse(operations[i].id in upload_ids, 
                             "The operation should not be an upload operation.")
Exemple #4
0
 def store_project(self, current_user, is_create, selected_id, **data):
     """
     We want to create/update a project entity.
     """
     #Validate Unique Name
     new_name = data["name"]
     if len(new_name) < 1:
         raise ProjectServiceException("Invalid project name!")
     projects_no = dao.count_projects_for_name(new_name, selected_id)
     if projects_no > 0:
         err = {'name': 'Please choose another name, this one is used!'}
         raise formencode.Invalid("Duplicate Name Error", {},
                                  None,
                                  error_dict=err)
     started_operations = dao.get_operation_numbers(selected_id)[1]
     if started_operations > 0:
         raise ProjectServiceException(
             "A project can not be renamed while operations are still running!"
         )
     if is_create:
         current_proj = model.Project(new_name, current_user.id,
                                      data["description"])
         self.structure_helper.get_project_folder(current_proj)
     else:
         try:
             current_proj = dao.get_project_by_id(selected_id)
         except Exception, excep:
             self.logger.exception("An error has occurred!")
             raise ProjectServiceException(str(excep))
         if current_proj.name != new_name:
             self.structure_helper.rename_project_structure(
                 current_proj.name, new_name)
         current_proj.name = new_name
         current_proj.description = data["description"]
Exemple #5
0
    def setUp(self):
#        self.clean_database()
        user = model.User("test_user", "test_pass", "*****@*****.**", True, "user")
        self.test_user = dao.store_entity(user) 
        project = model.Project("test_proj", self.test_user.id, "description")
        self.test_project = dao.store_entity(project) 
        import tvb_test
        self.old_config_file = cfg.CURRENT_DIR
        cfg.CURRENT_DIR = os.path.dirname(tvb_test.__file__) 
    def store_project(self, current_user, is_create, selected_id, **data):
        """
        We want to create/update a project entity.
        """
        # Validate Unique Name
        new_name = data["name"]
        if len(new_name) < 1:
            raise ProjectServiceException("Invalid project name!")
        projects_no = dao.count_projects_for_name(new_name, selected_id)
        if projects_no > 0:
            err = {'name': 'Please choose another name, this one is used!'}
            raise formencode.Invalid("Duplicate Name Error", {},
                                     None,
                                     error_dict=err)
        started_operations = dao.get_operation_numbers(selected_id)[1]
        if started_operations > 0:
            raise ProjectServiceException(
                "A project can not be renamed while operations are still running!"
            )
        if is_create:
            current_proj = model.Project(new_name, current_user.id,
                                         data["description"])
            self.structure_helper.get_project_folder(current_proj)
        else:
            try:
                current_proj = dao.get_project_by_id(selected_id)
            except Exception as excep:
                self.logger.exception("An error has occurred!")
                raise ProjectServiceException(str(excep))
            if current_proj.name != new_name:
                self.structure_helper.rename_project_structure(
                    current_proj.name, new_name)
            current_proj.name = new_name
            current_proj.description = data["description"]
        # Commit to make sure we have a valid ID
        current_proj.refresh_update_date()
        self.structure_helper.write_project_metadata(current_proj)
        current_proj = dao.store_entity(current_proj)

        # Retrieve, to initialize lazy attributes
        current_proj = dao.get_project_by_id(current_proj.id)
        # Update share settings on current Project entity
        visited_pages = []
        prj_admin = current_proj.administrator.username
        if 'visited_pages' in data and data['visited_pages']:
            visited_pages = data['visited_pages'].split(',')
        for page in visited_pages:
            members = UserService.retrieve_all_users(prj_admin, int(page))[0]
            members = [m.id for m in members]
            dao.delete_members_for_project(current_proj.id, members)
        selected_user_ids = data["users"]
        dao.add_members_to_project(current_proj.id, selected_user_ids)
        # Finish operation
        self.logger.debug("Edit/Save OK for project:" + str(current_proj.id) +
                          ' by user:' + current_user.username)
        return current_proj
 def setUp(self):
     """
     Sets up the environment for testing;
     creates a test user, a test project and saves config file
     """
     #        self.clean_database()
     user = model.User("test_user", "test_pass", "*****@*****.**", True,
                       "user")
     self.test_user = dao.store_entity(user)
     project = model.Project("test_proj", self.test_user.id, "description")
     self.test_project = dao.store_entity(project)
 def setUp(self):
     """
     Sets up the environment for testing;
     creates a test user, a test project and saves config file
     """
     #        self.clean_database()
     user = model.User("test_user", "test_pass", "*****@*****.**", True,
                       "user")
     self.test_user = dao.store_entity(user)
     project = model.Project("test_proj", self.test_user.id, "description")
     self.test_project = dao.store_entity(project)
     import tvb_test
     self.old_config_file = cfg.CURRENT_DIR
     cfg.CURRENT_DIR = os.path.dirname(tvb_test.__file__)
Exemple #9
0
 def test_write_project_metadata(self):
     """  Write XML for test-project. """
     self.files_helper.write_project_metadata(self.test_project)
     expected_file = self.files_helper.get_project_meta_file_path(self.PROJECT_NAME)
     self.assertTrue(os.path.exists(expected_file))
     project_meta = XMLReader(expected_file).read_metadata()
     loaded_project = model.Project(None, None)
     loaded_project.from_dict(project_meta, self.test_user.id)
     self.assertEqual(self.test_project.name, loaded_project.name)
     self.assertEqual(self.test_project.description, loaded_project.description)
     self.assertEqual(self.test_project.gid, loaded_project.gid)
     expected_dict = self.test_project.to_dict()[1]
     del expected_dict['last_updated']
     found_dict = loaded_project.to_dict()[1]
     del found_dict['last_updated']
     self.assertEqual(expected_dict, found_dict)
 def test_write_project_metadata(self):
     """  Write XML for test-project. """
     self.files_helper.write_project_metadata(self.test_project)
     expected_file = self.files_helper.get_project_meta_file_path(self.PROJECT_NAME)
     assert os.path.exists(expected_file)
     project_meta = XMLReader(expected_file).read_metadata()
     loaded_project = model.Project(None, None)
     loaded_project.from_dict(project_meta, self.test_user.id)
     assert self.test_project.name == loaded_project.name
     assert self.test_project.description == loaded_project.description
     assert self.test_project.gid == loaded_project.gid
     expected_dict = self.test_project.to_dict()[1]
     del expected_dict['last_updated']
     found_dict = loaded_project.to_dict()[1]
     del found_dict['last_updated']
     self._dictContainsSubset(expected_dict, found_dict)
     self._dictContainsSubset(found_dict, expected_dict)
    def test_remove_project_node(self):
        """
        Test removing of a node from a project.
        """
        inserted_project, gid, gid_op = self._create_value_wrapper(
            self.test_user)
        project_to_link = model.Project("Link", self.test_user.id, "descript")
        project_to_link = dao.store_entity(project_to_link)
        exact_data = dao.get_datatype_by_gid(gid)
        dao.store_entity(model.Links(exact_data.id, project_to_link.id))
        self.assertTrue(
            dao.get_datatype_by_gid(gid) is not None,
            "Initialization problem!")

        operation_id = dao.get_generic_entity(model.Operation, gid_op,
                                              'gid')[0].id
        op_folder = self.structure_helper.get_project_folder(
            "test_proj", str(operation_id))
        self.assertTrue(os.path.exists(op_folder))
        sub_files = os.listdir(op_folder)
        self.assertEqual(2, len(sub_files))
        ### Validate that no more files are created than needed.

        self.project_service._remove_project_node_files(
            inserted_project.id, gid)
        sub_files = os.listdir(op_folder)
        self.assertEqual(1, len(sub_files))
        ### operation.xml file should still be there

        op_folder = self.structure_helper.get_project_folder(
            "Link", str(operation_id + 1))
        sub_files = os.listdir(op_folder)
        self.assertEqual(2, len(sub_files))
        self.assertTrue(
            dao.get_datatype_by_gid(gid) is not None,
            "Data should still be in DB, because of links")
        self.project_service._remove_project_node_files(
            project_to_link.id, gid)
        self.assertTrue(dao.get_datatype_by_gid(gid) is None)
        sub_files = os.listdir(op_folder)
        self.assertEqual(1, len(sub_files))