/** * On MySQL, as PROJECTS.KEE is not unique, if the same project is provisioned multiple times, then it will be duplicated in the database. * So, after creating a project, we commit, and we search in the db if their are some duplications and we remove them. * * SONAR-6332 */ private void removeDuplicatedProjects(DbSession session, String projectKey) { List<ComponentDto> duplicated = dbClient.componentDao().selectComponentsHavingSameKeyOrderedById(session, projectKey); for (int i = 1; i < duplicated.size(); i++) { dbClient.componentDao().delete(session, duplicated.get(i).getId()); } }
@Test public void delete_doc_from_index_when_project_is_deleted() { ComponentDto project = db.components().insertPrivateProject(); indexProject(project, PROJECT_CREATION); assertThatIndexContainsOnly(project); db.getDbClient().componentDao().delete(db.getSession(), project.getId()); IndexingResult result = indexProject(project, PROJECT_DELETION); assertThat(es.countDocuments(INDEX_TYPE_PROJECT_MEASURES)).isEqualTo(0); assertThat(result.getTotal()).isEqualTo(1L); assertThat(result.getSuccess()).isEqualTo(1L); }
@Test public void deletion_resilience_will_deindex_projects() { ComponentDto project1 = createUnindexedPublicProject(); ComponentDto project2 = createUnindexedPublicProject(); // UserDto user1 = db.users().insertUser(); indexOnStartup(); assertThat(es.countDocuments(INDEX_TYPE_FOO_AUTH)).isEqualTo(2); // Simulate a indexation issue db.getDbClient().componentDao().delete(db.getSession(), project1.getId()); underTest.prepareForRecovery(db.getSession(), asList(project1.uuid()), ProjectIndexer.Cause.PROJECT_DELETION); assertThat(db.countRowsOfTable(db.getSession(), "es_queue")).isEqualTo(1); Collection<EsQueueDto> esQueueDtos = db.getDbClient().esQueueDao().selectForRecovery(db.getSession(), Long.MAX_VALUE, 2); underTest.index(db.getSession(), esQueueDtos); assertThat(db.countRowsOfTable(db.getSession(), "es_queue")).isEqualTo(0); assertThat(es.countDocuments(INDEX_TYPE_FOO_AUTH)).isEqualTo(1); }
@Test public void do_not_delete_orphans_when_updating_project() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); indexProject(project, PROJECT_CREATION); assertThatIndexContainsOnly(project, file); db.getDbClient().componentDao().delete(db.getSession(), file.getId()); IndexingResult result = indexProject(project, ProjectIndexer.Cause.PROJECT_KEY_UPDATE); assertThatIndexContainsOnly(project, file); // single request for project, no request for file assertThat(result.getTotal()).isEqualTo(1); assertThat(result.getSuccess()).isEqualTo(1); }
@Test public void delete() { ComponentDto project1 = db.components().insertPrivateProject(db.getDefaultOrganization(), (t) -> t.setDbKey("PROJECT_1")); db.components().insertPrivateProject(db.getDefaultOrganization(), (t) -> t.setDbKey("PROJECT_2")); underTest.delete(dbSession, project1.getId()); dbSession.commit(); assertThat(underTest.selectByKey(dbSession, "PROJECT_1")).isEmpty(); assertThat(underTest.selectByKey(dbSession, "PROJECT_2")).isPresent(); }
@Test public void delete_project() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto file = db.components().insertComponent(newFileDto(project)); indexProject(project, PROJECT_CREATION); assertThatIndexHasSize(2); db.getDbClient().componentDao().delete(db.getSession(), project.getId()); db.getDbClient().componentDao().delete(db.getSession(), file.getId()); indexProject(project, PROJECT_DELETION); assertThatIndexHasSize(0); }
@Test public void delete_permissions_on_project_deletion() { ComponentDto project = createAndIndexPrivateProject(); UserDto user = db.users().insertUser(); db.users().insertProjectPermissionOnUser(user, USER, project); indexPermissions(project, ProjectIndexer.Cause.PROJECT_CREATION); verifyAuthorized(project, user); db.getDbClient().componentDao().delete(db.getSession(), project.getId()); indexPermissions(project, ProjectIndexer.Cause.PROJECT_DELETION); verifyNotAuthorized(project, user); assertThatAuthIndexHasSize(0); }
@Test public void should_not_return_suggestion_on_non_existing_project() { ComponentDto project = db.components().insertComponent(newPrivateProjectDto(organization)); componentIndexer.indexOnStartup(null); authorizationIndexerTester.allowOnlyAnyone(project); db.getDbClient().componentDao().delete(db.getSession(), project.getId()); db.commit(); SuggestionsWsResponse response = ws.newRequest() .setMethod("POST") .setParam(PARAM_QUERY, project.getDbKey()) .executeProtobuf(SuggestionsWsResponse.class); // assert match in qualifier "TRK" assertThat(response.getResultsList()) .filteredOn(q -> q.getItemsCount() > 0) .isEmpty(); }
/** * On MySQL, as PROJECTS.KEE is not unique, if the same project is provisioned multiple times, then it will be duplicated in the database. * So, after creating a project, we commit, and we search in the db if their are some duplications and we remove them. * * SONAR-6332 */ private void removeDuplicatedProjects(DbSession session, String projectKey) { List<ComponentDto> duplicated = dbClient.componentDao().selectComponentsHavingSameKeyOrderedById(session, projectKey); for (int i = 1; i < duplicated.size(); i++) { dbClient.componentDao().delete(session, duplicated.get(i).getId()); } }