deleteAnalyses(purgeMapper.selectAnalysisIdsAndUuids(new PurgeSnapshotQuery().setComponentUuid(rootUuid)));
}
+ void deletePermissions(long rootId) {
+ profiler.start("deletePermissions (group_roles)");
+ purgeMapper.deleteComponentGroupRoles(rootId);
+ session.commit();
+ profiler.stop();
+
+ profiler.start("deletePermissions (user_roles)");
+ purgeMapper.deleteComponentUserRoles(rootId);
+ session.commit();
+ profiler.stop();
+ }
+
void deleteComponents(List<IdUuidPair> componentIdUuids) {
List<List<Long>> componentIdPartitions = Lists.partition(IdUuidPairs.ids(componentIdUuids), MAX_RESOURCES_PER_QUERY);
List<List<String>> componentUuidsPartitions = Lists.partition(IdUuidPairs.uuids(componentIdUuids), MAX_RESOURCES_PER_QUERY);
session.commit();
profiler.stop();
- profiler.start("deleteResourceGroupRoles (group_roles)");
- componentIdPartitions.forEach(purgeMapper::deleteComponentGroupRoles);
- session.commit();
- profiler.stop();
-
- profiler.start("deleteResourceUserRoles (user_roles)");
- componentIdPartitions.forEach(purgeMapper::deleteComponentUserRoles);
- session.commit();
- profiler.stop();
-
profiler.start("deleteResourceManualMeasures (manual_measures)");
componentUuidsPartitions.forEach(purgeMapper::deleteComponentManualMeasures);
session.commit();
import org.junit.Test;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
+import org.sonar.db.component.ComponentDto;
+import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.permission.OrganizationPermission;
+import org.sonar.db.user.GroupDto;
+import org.sonar.db.user.UserDto;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.Collections.singletonList;
assertThat(dbTester.countRowsOfTable("issue_changes")).isEqualTo(1);
}
+ @Test
+ public void deletePermissions_deletes_permissions_of_public_project() {
+ OrganizationDto organization = dbTester.organizations().insert();
+ ComponentDto project = dbTester.components().insertPublicProject(organization);
+ addPermissions(organization, project);
+
+ PurgeCommands purgeCommands = new PurgeCommands(dbTester.getSession(), profiler);
+ purgeCommands.deletePermissions(project.getId());
+
+ assertThat(dbTester.countRowsOfTable("group_roles")).isEqualTo(2);
+ assertThat(dbTester.countRowsOfTable("user_roles")).isEqualTo(1);
+ }
+
+ @Test
+ public void deletePermissions_deletes_permissions_of_private_project() {
+ OrganizationDto organization = dbTester.organizations().insert();
+ ComponentDto project = dbTester.components().insertPrivateProject(organization);
+ addPermissions(organization, project);
+
+ PurgeCommands purgeCommands = new PurgeCommands(dbTester.getSession(), profiler);
+ purgeCommands.deletePermissions(project.getId());
+
+ assertThat(dbTester.countRowsOfTable("group_roles")).isEqualTo(1);
+ assertThat(dbTester.countRowsOfTable("user_roles")).isEqualTo(1);
+ }
+
+ @Test
+ public void deletePermissions_deletes_permissions_of_view() {
+ OrganizationDto organization = dbTester.organizations().insert();
+ ComponentDto project = dbTester.components().insertView(organization);
+ addPermissions(organization, project);
+
+ PurgeCommands purgeCommands = new PurgeCommands(dbTester.getSession(), profiler);
+ purgeCommands.deletePermissions(project.getId());
+
+ assertThat(dbTester.countRowsOfTable("group_roles")).isEqualTo(2);
+ assertThat(dbTester.countRowsOfTable("user_roles")).isEqualTo(1);
+ }
+
+ private void addPermissions(OrganizationDto organization, ComponentDto root) {
+ if (!root.isPrivate()) {
+ dbTester.users().insertProjectPermissionOnAnyone("foo1", root);
+ dbTester.users().insertPermissionOnAnyone(organization, "not project level");
+ }
+
+ GroupDto group = dbTester.users().insertGroup(organization);
+ dbTester.users().insertProjectPermissionOnGroup(group, "bar", root);
+ dbTester.users().insertPermissionOnGroup(group, "not project level");
+
+ UserDto user = dbTester.users().insertUser();
+ dbTester.users().insertProjectPermissionOnUser(user, "doh", root);
+ dbTester.users().insertPermissionOnUser(user, OrganizationPermission.SCAN);
+
+ assertThat(dbTester.countRowsOfTable("group_roles")).isEqualTo(root.isPrivate() ? 2 : 4);
+ assertThat(dbTester.countRowsOfTable("user_roles")).isEqualTo(2);
+ }
+
/**
* Test that SQL queries execution do not fail with a huge number of parameter
*/
@Test
public void deleteProject_deletes_webhook_deliveries() {
- dbClient.webhookDeliveryDao().insert(dbSession, newWebhookDeliveryDto().setComponentUuid("P1").setUuid("D1"));
+ ComponentDto project = dbTester.components().insertPublicProject();
+ dbClient.webhookDeliveryDao().insert(dbSession, newWebhookDeliveryDto().setComponentUuid(project.uuid()).setUuid("D1"));
dbClient.webhookDeliveryDao().insert(dbSession, newWebhookDeliveryDto().setComponentUuid("P2").setUuid("D2"));
- underTest.deleteProject(dbSession, "P1");
+ underTest.deleteProject(dbSession, project.uuid());
assertThat(selectAllDeliveryUuids(dbTester, dbSession)).containsOnly("D2");
}