From 39b8e7628f1c1763ba6db389fa83264dd425ef7c Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Thu, 23 Oct 2014 12:15:29 +0200 Subject: [PATCH] SONAR-5188 Use PROJECT_UUID from PROJECTS table to simplify some requests and security checks --- .../server/component/db/ComponentDao.java | 13 -- .../component/ws/ComponentAppAction.java | 20 ++-- .../ws/DuplicationsJsonWriter.java | 23 +++- .../duplication/ws/DuplicationsParser.java | 4 +- .../server/issue/index/IssueNormalizer.java | 2 +- .../sonar/server/issue/ws/SearchAction.java | 13 +- .../server/component/db/ComponentDaoTest.java | 24 ---- .../component/ws/ComponentAppActionTest.java | 69 +++++++---- .../ws/DuplicationsJsonWriterTest.java | 27 +++-- .../ws/DuplicationsParserTest.java | 27 +++-- .../issue/IssueBulkChangeServiceTest.java | 1 - .../app_without_sub_project.json | 1 + .../sonar/core/component/ComponentDto.java | 21 ---- .../core/component/db/ComponentMapper.java | 2 - .../migration/v50/Migration50Mapper.java | 3 + .../org/sonar/core/resource/ResourceDao.java | 35 +----- .../sonar/core/resource/ResourceMapper.java | 13 +- .../core/component/db/ComponentMapper.xml | 47 +------- .../sonar/core/resource/ResourceMapper.xml | 75 +----------- .../core/component/ComponentDtoTest.java | 2 - .../sonar/core/resource/ResourceDaoTest.java | 112 ++---------------- ...> get_last_snapshot_by_component_uuid.xml} | 4 + ...nent_ids_for_secured_project_for_group.xml | 78 ------------ ...onent_ids_for_secured_project_for_user.xml | 76 ------------ 24 files changed, 150 insertions(+), 542 deletions(-) rename sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/{get_last_snapshot_by_resource_id.xml => get_last_snapshot_by_component_uuid.xml} (93%) delete mode 100644 sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_group.xml delete mode 100644 sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_user.xml diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentDao.java b/server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentDao.java index 8403977bc2c..2a769e00665 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentDao.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentDao.java @@ -111,19 +111,6 @@ public class ComponentDao extends BaseDao return mapper(session).findSubProjectsByComponentUuids(keys); } - public List getByIds(DbSession session, Collection ids) { - if (ids.isEmpty()) { - return Collections.emptyList(); - } - List components = newArrayList(); - List> partitionList = Lists.partition(newArrayList(ids), 1000); - for (List partition : partitionList) { - List dtos = mapper(session).findByIds(partition); - components.addAll(dtos); - } - return components; - } - public List getByUuids(DbSession session, Collection uuids) { if (uuids.isEmpty()) { return Collections.emptyList(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java index 90f075d0546..b0e1886a552 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java @@ -25,7 +25,6 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Multiset; import com.google.common.io.Resources; import org.apache.commons.lang.StringUtils; -import org.sonar.api.component.Component; import org.sonar.api.i18n.I18n; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Metric; @@ -131,7 +130,7 @@ public class ComponentAppAction implements RequestHandler { } userSession.checkComponentPermission(UserRole.USER, fileKey); - List periodList = periods(component.projectId(), session); + List periodList = periods(component.projectUuid(), session); Integer periodIndex = request.paramAsInt(PARAM_PERIOD); Date periodDate = periodDate(periodIndex, periodList); @@ -171,8 +170,8 @@ public class ComponentAppAction implements RequestHandler { json.prop("longName", component.longName()); json.prop("q", component.qualifier()); - ComponentDto subProject = (ComponentDto) nullableComponentById(component.subProjectId(), session); - ComponentDto project = (ComponentDto) componentById(component.projectId(), session); + ComponentDto subProject = nullableComponentById(component.subProjectId(), session); + ComponentDto project = dbClient.componentDao().getByUuid(session, component.projectUuid()); // Do not display sub project if sub project and project are the same boolean displaySubProject = subProject != null && !subProject.getId().equals(project.getId()); @@ -330,9 +329,9 @@ public class ComponentAppAction implements RequestHandler { } } - private List periods(Long projectId, DbSession session) { + private List periods(String projectUuid, DbSession session) { List periodList = newArrayList(); - SnapshotDto snapshotDto = dbClient.resourceDao().getLastSnapshotByResourceId(projectId, session); + SnapshotDto snapshotDto = dbClient.resourceDao().getLastSnapshotByResourceUuid(projectUuid, session); if (snapshotDto != null) { for (int i = 1; i <= 5; i++) { String mode = snapshotDto.getPeriodMode(i); @@ -376,17 +375,12 @@ public class ComponentAppAction implements RequestHandler { } @CheckForNull - private Component nullableComponentById(@Nullable Long componentId, DbSession session) { + private ComponentDto nullableComponentById(@Nullable Long componentId, DbSession session) { if (componentId != null) { - return componentById(componentId, session); + return dbClient.componentDao().getById(componentId, session); } return null; } - - private Component componentById(Long componentId, DbSession session) { - return dbClient.componentDao().getById(componentId, session); - } - @CheckForNull private String formatMeasureOrVariation(@Nullable MeasureDto measure, @Nullable Integer periodIndex) { if (periodIndex == null) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsJsonWriter.java b/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsJsonWriter.java index 14af1d0788c..51a90baf9e0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsJsonWriter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsJsonWriter.java @@ -84,7 +84,7 @@ public class DuplicationsJsonWriter implements ServerComponent { } private void writeFiles(Map refByComponentKey, JsonWriter json, DbSession session) { - Map projectsById = newHashMap(); + Map projectsByUuid = newHashMap(); Map subProjectsById = newHashMap(); for (Map.Entry entry : refByComponentKey.entrySet()) { String componentKey = entry.getKey(); @@ -94,8 +94,8 @@ public class DuplicationsJsonWriter implements ServerComponent { json.name(ref).beginObject(); addFile(json, file); - ComponentDto project = getProject(file.projectId(), projectsById, session); - ComponentDto subProject = getProject(file.subProjectId(), subProjectsById, session); + ComponentDto project = getProject(file.projectUuid(), projectsByUuid, session); + ComponentDto subProject = getSubProject(file.subProjectId(), subProjectsById, session); addProject(json, project, subProject); json.endObject(); @@ -122,12 +122,23 @@ public class DuplicationsJsonWriter implements ServerComponent { } } - private ComponentDto getProject(@Nullable Long projectId, Map projectsById, DbSession session) { - ComponentDto project = projectsById.get(projectId); + private ComponentDto getProject(@Nullable String projectUuid, Map projectsByUuid, DbSession session) { + ComponentDto project = projectsByUuid.get(projectUuid); + if (project == null && projectUuid != null) { + project = componentDao.getNullableByUuid(session, projectUuid); + if (project != null) { + projectsByUuid.put(project.uuid(), project); + } + } + return project; + } + + private ComponentDto getSubProject(@Nullable Long projectId, Map subProjectsById, DbSession session) { + ComponentDto project = subProjectsById.get(projectId); if (project == null && projectId != null) { project = componentDao.getNullableById(projectId, session); if (project != null) { - projectsById.put(project.getId(), project); + subProjectsById.put(project.getId(), project); } } return project; diff --git a/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsParser.java b/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsParser.java index 55dec878986..9f36ae64742 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsParser.java +++ b/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsParser.java @@ -133,10 +133,10 @@ public class DuplicationsParser implements ServerComponent { } else if (file2.equals(component)) { // the current resource must be displayed first return 1; - } else if (file1.projectId().equals(component.projectId()) && !file2.projectId().equals(component.projectId())) { + } else if (file1.projectUuid().equals(component.projectUuid()) && !file2.projectUuid().equals(component.projectUuid())) { // if resource is in the same project, this it must be displayed first return -1; - } else if (file2.projectId().equals(component.projectId()) && !file1.projectId().equals(component.projectId())) { + } else if (file2.projectUuid().equals(component.projectUuid()) && !file1.projectUuid().equals(component.projectUuid())) { // if resource is in the same project, this it must be displayed first return 1; } else { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java index 8a5134e0537..7baa5342239 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueNormalizer.java @@ -93,7 +93,7 @@ public class IssueNormalizer extends BaseNormalizer { Map update = newHashMap(); Preconditions.checkNotNull(dto.getProjectUuid(), "Project uuid is null on issue %s", dto.getKey()); -// Preconditions.checkNotNull(dto.getComponentUuid(), "Component uuid is null on issue %s", dto.getKey()); + Preconditions.checkNotNull(dto.getComponentUuid(), "Component uuid is null on issue %s", dto.getKey()); update.put("_parent", dto.getProjectUuid()); update.put(IssueField.KEY.field(), dto.getKey()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java index b59b2debab3..4aa2bf7a3fd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java @@ -228,6 +228,7 @@ public class SearchAction extends SearchRequestHandler { Multimap commentsByIssues = ArrayListMultimap.create(); Collection componentDtos = newHashSet(); List projectDtos = newArrayList(); + Map projectsByComponentUuid = newHashMap(); for (Issue issue : result.getHits()) { IssueDoc issueDoc = (IssueDoc) issue; @@ -263,15 +264,18 @@ public class SearchAction extends SearchRequestHandler { for (ComponentDto componentDto : componentDtos) { componentsByUuid.put(componentDto.uuid(), componentDto); } + + projectsByComponentUuid = getProjectsByComponentUuid(componentDtos, projectDtos); + writeProjects(json, projectDtos); - writeComponents(json, componentDtos); + writeComponents(json, componentDtos, projectsByComponentUuid); } finally { session.close(); } Map actionPlanByKeys = getActionPlanByKeys(actionPlanKeys); - writeIssues(result, commentsByIssues, usersByLogin, actionPlanByKeys, componentsByUuid, getProjectsByComponentUuid(componentDtos, projectDtos), + writeIssues(result, commentsByIssues, usersByLogin, actionPlanByKeys, componentsByUuid, projectsByComponentUuid, request.paramAsStrings(EXTRA_FIELDS_PARAM), json); writeRules(json, !request.mandatoryParamAsBoolean(IssueFilterParameters.HIDE_RULES) ? ruleService.getByKeys(ruleKeys) : Collections.emptyList()); writeUsers(json, usersByLogin); @@ -450,9 +454,10 @@ public class SearchAction extends SearchRequestHandler { } } - private void writeComponents(JsonWriter json, Collection components) { + private void writeComponents(JsonWriter json, Collection components, Map projectsByComponentUuid) { json.name("components").beginArray(); for (ComponentDto component : components) { + ComponentDto project = projectsByComponentUuid.get(component.uuid()); json.beginObject() .prop("uuid", component.uuid()) .prop("key", component.key()) @@ -463,7 +468,7 @@ public class SearchAction extends SearchRequestHandler { .prop("longName", component.longName()) .prop("path", component.path()) // On a root project, subProjectId is null but projectId is equal to itself, which make no sense. - .prop("projectId", (component.projectId() != null && component.subProjectId() != null) ? component.projectId() : null) + .prop("projectId", (component.projectUuid() != null && component.subProjectId() != null) ? project.getId() : null) .prop("subProjectId", component.subProjectId()) .endObject(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/db/ComponentDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/db/ComponentDaoTest.java index 61061de66b9..477472139f1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/db/ComponentDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/db/ComponentDaoTest.java @@ -157,7 +157,6 @@ public class ComponentDaoTest extends AbstractDaoTestCase { assertThat(result.scope()).isEqualTo("FIL"); assertThat(result.language()).isEqualTo("java"); assertThat(result.subProjectId()).isEqualTo(2); - assertThat(result.projectId()).isEqualTo(1); assertThat(dao.getByKeys(session, "unknown")).isEmpty(); } @@ -199,29 +198,6 @@ public class ComponentDaoTest extends AbstractDaoTestCase { assertThat(result.isEnabled()).isFalse(); } - @Test - public void get_by_ids() { - setupData("shared"); - - List results = dao.getByIds(session, newArrayList(4L)); - assertThat(results).hasSize(1); - - ComponentDto result = results.get(0); - assertThat(result).isNotNull(); - assertThat(result.key()).isEqualTo("org.struts:struts-core:src/org/struts/RequestContext.java"); - assertThat(result.path()).isEqualTo("src/org/struts/RequestContext.java"); - assertThat(result.name()).isEqualTo("RequestContext.java"); - assertThat(result.longName()).isEqualTo("org.struts.RequestContext"); - assertThat(result.qualifier()).isEqualTo("FIL"); - assertThat(result.scope()).isEqualTo("FIL"); - assertThat(result.language()).isEqualTo("java"); - assertThat(result.subProjectId()).isEqualTo(2); - assertThat(result.projectId()).isEqualTo(1); - - assertThat(dao.getByIds(session, newArrayList(123L))).isEmpty(); - assertThat(dao.getByIds(session, Collections.emptyList())).isEmpty(); - } - @Test public void get_by_id() { setupData("shared"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java index 99b4dcc1012..937a7add0da 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java @@ -50,6 +50,7 @@ import org.sonar.core.properties.PropertyQuery; import org.sonar.core.resource.ResourceDao; import org.sonar.core.rule.RuleDto; import org.sonar.core.timemachine.Periods; +import org.sonar.server.component.ComponentTesting; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.issue.IssueService; @@ -124,6 +125,8 @@ public class ComponentAppActionTest { WsTester tester; + ComponentDto project; + @Before public void setUp() throws Exception { DbClient dbClient = mock(DbClient.class); @@ -133,6 +136,12 @@ public class ComponentAppActionTest { when(dbClient.propertiesDao()).thenReturn(propertiesDao); when(dbClient.measureDao()).thenReturn(measureDao); + project = ComponentTesting.newProjectDto() + .setId(1L) + .setName("SonarQube") + .setLongName("SonarQube") + .setKey("org.codehaus.sonar:sonar"); + when(issueService.findSeveritiesByComponent(anyString(), any(Date.class), eq(session))).thenReturn(mock(Multiset.class)); when(issueService.findRulesByComponent(anyString(), any(Date.class), eq(session))).thenReturn(mock(RulesAggregation.class)); when(measureDao.findByComponentKeyAndMetricKeys(anyString(), anyListOf(String.class), eq(session))).thenReturn(measures); @@ -144,12 +153,16 @@ public class ComponentAppActionTest { public void app() throws Exception { MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); - ComponentDto file = new ComponentDto().setId(10L).setQualifier("FIL").setKey(COMPONENT_KEY).setName("Plugin.java") + ComponentDto file = ComponentTesting.newFileDto(project) + .setId(10L) + .setKey(COMPONENT_KEY) + .setName("Plugin.java") .setLongName("src/main/java/org/sonar/api/Plugin.java") - .setPath("src/main/java/org/sonar/api/Plugin.java").setSubProjectId(5L).setProjectId_unit_test_only(1L); + .setPath("src/main/java/org/sonar/api/Plugin.java") + .setSubProjectId(5L); when(componentDao.getNullableByKey(session, COMPONENT_KEY)).thenReturn(file); when(componentDao.getById(5L, session)).thenReturn(new ComponentDto().setId(5L).setLongName("SonarQube :: Plugin API").setKey(SUB_PROJECT_KEY)); - when(componentDao.getById(1L, session)).thenReturn(new ComponentDto().setId(1L).setLongName("SonarQube").setKey("org.codehaus.sonar:sonar")); + when(componentDao.getByUuid(session, project.uuid())).thenReturn(project); when(propertiesDao.selectByQuery(any(PropertyQuery.class), eq(session))).thenReturn(newArrayList(new PropertyDto())); WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY); @@ -161,9 +174,8 @@ public class ComponentAppActionTest { String componentKey = "org.codehaus.sonar:sonar"; MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, componentKey, componentKey); - ComponentDto file = new ComponentDto().setId(1L).setQualifier("TRK").setKey(componentKey).setName("SonarQube").setProjectId_unit_test_only(1L); - when(componentDao.getNullableByKey(session, componentKey)).thenReturn(file); - when(componentDao.getById(1L, session)).thenReturn(new ComponentDto().setId(1L).setLongName("SonarQube").setKey("org.codehaus.sonar:sonar")); + when(componentDao.getNullableByKey(session, componentKey)).thenReturn(project); + when(componentDao.getByUuid(session, project.uuid())).thenReturn(project); when(propertiesDao.selectByQuery(any(PropertyQuery.class), eq(session))).thenReturn(newArrayList(new PropertyDto())); WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", componentKey); @@ -174,10 +186,16 @@ public class ComponentAppActionTest { public void app_with_sub_project_equals_to_project() throws Exception { MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); - ComponentDto file = new ComponentDto().setId(10L).setQualifier("FIL").setKey(COMPONENT_KEY).setName("Plugin.java") - .setPath("src/main/java/org/sonar/api/Plugin.java").setSubProjectId(1L).setProjectId_unit_test_only(1L); + ComponentDto file = ComponentTesting.newFileDto(project) + .setId(10L) + .setKey(COMPONENT_KEY) + .setName("Plugin.java") + .setLongName(null) + .setPath("src/main/java/org/sonar/api/Plugin.java") + .setSubProjectId(1L); when(componentDao.getNullableByKey(session, COMPONENT_KEY)).thenReturn(file); - when(componentDao.getById(1L, session)).thenReturn(new ComponentDto().setId(1L).setLongName("SonarQube").setKey("org.codehaus.sonar:sonar")); + when(componentDao.getById(project.getId(), session)).thenReturn(project); + when(componentDao.getByUuid(session, project.uuid())).thenReturn(project); when(propertiesDao.selectByQuery(any(PropertyQuery.class), eq(session))).thenReturn(newArrayList(new PropertyDto())); WsTester.TestRequest request = tester.newGetRequest("api/components", "app").setParam("key", COMPONENT_KEY); @@ -304,11 +322,16 @@ public class ComponentAppActionTest { String componentKey = "org.codehaus.sonar:sonar-server:src/test/java/org/sonar/server/issue/PlanActionTest.java"; MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, componentKey); - ComponentDto file = new ComponentDto().setId(10L).setQualifier("UTS").setKey(componentKey).setName("PlanActionTest.java") - .setPath("src/test/java/org/sonar/server/issue/PlanActionTest.java").setSubProjectId(5L).setProjectId_unit_test_only(1L); + ComponentDto file = ComponentTesting.newFileDto(project) + .setId(10L) + .setQualifier("UTS") + .setLongName(null) + .setKey(componentKey).setName("PlanActionTest.java") + .setPath("src/test/java/org/sonar/server/issue/PlanActionTest.java") + .setSubProjectId(5L); when(componentDao.getNullableByKey(session, componentKey)).thenReturn(file); when(componentDao.getById(5L, session)).thenReturn(new ComponentDto().setId(5L).setLongName("SonarQube :: Plugin API").setKey(SUB_PROJECT_KEY)); - when(componentDao.getById(1L, session)).thenReturn(new ComponentDto().setId(1L).setLongName("SonarQube").setKey("org.codehaus.sonar:sonar")); + when(componentDao.getByUuid(session, project.uuid())).thenReturn(project); addMeasure(CoreMetrics.TESTS_KEY, 10); @@ -359,9 +382,9 @@ public class ComponentAppActionTest { public void app_with_periods() throws Exception { MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); - addComponent(); + ComponentDto file = addComponent(); - when(resourceDao.getLastSnapshotByResourceId(eq(1L), eq(session))).thenReturn( + when(resourceDao.getLastSnapshotByResourceUuid(file.projectUuid(), session)).thenReturn( new SnapshotDto().setPeriodMode(1, "previous_analysis").setPeriodDate(1, DateUtils.parseDate("2014-05-08")) ); when(periods.label(anyString(), anyString(), any(Date.class))).thenReturn("since previous analysis (May 08 2014)"); @@ -420,7 +443,7 @@ public class ComponentAppActionTest { addComponent(); Date periodDate = DateUtils.parseDate("2014-05-08"); - when(resourceDao.getLastSnapshotByResourceId(eq(1L), eq(session))).thenReturn( + when(resourceDao.getLastSnapshotByResourceUuid(project.uuid(), session)).thenReturn( new SnapshotDto().setPeriodMode(1, "previous_analysis").setPeriodDate(1, periodDate) ); when(periods.label(anyString(), anyString(), any(Date.class))).thenReturn("since previous analysis (May 08 2014)"); @@ -474,18 +497,24 @@ public class ComponentAppActionTest { request.execute().assertJson(getClass(), "app_with_manual_rules.json"); } - private void addComponent() { - ComponentDto file = new ComponentDto().setId(10L).setQualifier("FIL").setKey(COMPONENT_KEY).setName("Plugin.java") + private ComponentDto addComponent() { + ComponentDto file = ComponentTesting.newFileDto(project) + .setId(10L) + .setQualifier("FIL") + .setKey(COMPONENT_KEY) + .setName("Plugin.java") .setLongName("src/main/java/org/sonar/api/Plugin.java") - .setPath("src/main/java/org/sonar/api/Plugin.java").setSubProjectId(5L).setProjectId_unit_test_only(1L); + .setPath("src/main/java/org/sonar/api/Plugin.java") + .setSubProjectId(5L); when(componentDao.getNullableByKey(session, COMPONENT_KEY)).thenReturn(file); when(componentDao.getById(5L, session)).thenReturn(new ComponentDto().setId(5L).setLongName("SonarQube :: Plugin API").setKey(SUB_PROJECT_KEY)); - when(componentDao.getById(1L, session)).thenReturn(new ComponentDto().setId(1L).setLongName("SonarQube").setKey("org.codehaus.sonar:sonar")); + when(componentDao.getByUuid(session, project.uuid())).thenReturn(project); + return file; } private void addPeriod() { Date periodDate = DateUtils.parseDate("2014-05-08"); - when(resourceDao.getLastSnapshotByResourceId(eq(1L), eq(session))).thenReturn( + when(resourceDao.getLastSnapshotByResourceUuid(project.uuid(), session)).thenReturn( new SnapshotDto().setPeriodMode(1, "previous_analysis").setPeriodDate(1, periodDate) ); when(periods.label(anyString(), anyString(), any(Date.class))).thenReturn("since previous analysis (May 08 2014)"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsJsonWriterTest.java b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsJsonWriterTest.java index 7d42df08e51..c5c869c98e5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsJsonWriterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsJsonWriterTest.java @@ -30,6 +30,7 @@ import org.skyscreamer.jsonassert.JSONAssert; import org.sonar.api.utils.text.JsonWriter; import org.sonar.core.component.ComponentDto; import org.sonar.core.persistence.DbSession; +import org.sonar.server.component.ComponentTesting; import org.sonar.server.component.db.ComponentDao; import java.io.StringWriter; @@ -52,22 +53,30 @@ public class DuplicationsJsonWriterTest { DuplicationsJsonWriter writer; + ComponentDto project; + @Before public void setUp() throws Exception { + project = ComponentTesting.newProjectDto() + .setId(1L) + .setName("SonarQube") + .setLongName("SonarQube") + .setKey("org.codehaus.sonar:sonar"); + writer = new DuplicationsJsonWriter(componentDao); } @Test public void write_duplications() throws Exception { String key1 = "org.codehaus.sonar:sonar-ws-client:src/main/java/org/sonar/wsclient/services/PropertyDeleteQuery.java"; - ComponentDto file1 = new ComponentDto().setId(10L).setQualifier("FIL").setKey(key1).setLongName("PropertyDeleteQuery").setProjectId_unit_test_only(1L).setSubProjectId(5L); + ComponentDto file1 = ComponentTesting.newFileDto(project).setId(10L).setKey(key1).setLongName("PropertyDeleteQuery").setSubProjectId(5L); String key2 = "org.codehaus.sonar:sonar-ws-client:src/main/java/org/sonar/wsclient/services/PropertyUpdateQuery.java"; - ComponentDto file2 = new ComponentDto().setId(11L).setQualifier("FIL").setKey(key2).setLongName("PropertyUpdateQuery").setProjectId_unit_test_only(1L).setSubProjectId(5L); + ComponentDto file2 = ComponentTesting.newFileDto(project).setId(11L).setQualifier("FIL").setKey(key2).setLongName("PropertyUpdateQuery").setSubProjectId(5L); when(componentDao.getNullableByKey(session, key1)).thenReturn(file1); when(componentDao.getNullableByKey(session, key2)).thenReturn(file2); - when(componentDao.getNullableById(1L, session)).thenReturn(new ComponentDto().setId(1L).setKey("org.codehaus.sonar:sonar").setLongName("SonarQube")); when(componentDao.getNullableById(5L, session)).thenReturn(new ComponentDto().setId(5L).setKey("org.codehaus.sonar:sonar-ws-client").setLongName("SonarQube :: Web Service Client")); + when(componentDao.getNullableByUuid(session, project.uuid())).thenReturn(project); List blocks = newArrayList(); blocks.add(new DuplicationsParser.Block(newArrayList( @@ -112,20 +121,20 @@ public class DuplicationsJsonWriterTest { verify(componentDao, times(2)).getNullableByKey(eq(session), anyString()); // Verify call to dao is cached when searching for project / sub project - verify(componentDao, times(1)).getNullableById(eq(1L), eq(session)); + verify(componentDao, times(1)).getNullableByUuid(eq(session), eq(project.uuid())); verify(componentDao, times(1)).getNullableById(eq(5L), eq(session)); } @Test public void write_duplications_without_sub_project() throws Exception { String key1 = "org.codehaus.sonar:sonar-ws-client:src/main/java/org/sonar/wsclient/services/PropertyDeleteQuery.java"; - ComponentDto file1 = new ComponentDto().setId(10L).setQualifier("FIL").setKey(key1).setLongName("PropertyDeleteQuery").setProjectId_unit_test_only(1L); + ComponentDto file1 = ComponentTesting.newFileDto(project).setId(10L).setKey(key1).setLongName("PropertyDeleteQuery"); String key2 = "org.codehaus.sonar:sonar-ws-client:src/main/java/org/sonar/wsclient/services/PropertyUpdateQuery.java"; - ComponentDto file2 = new ComponentDto().setId(11L).setQualifier("FIL").setKey(key2).setLongName("PropertyUpdateQuery").setProjectId_unit_test_only(1L); + ComponentDto file2 = ComponentTesting.newFileDto(project).setId(11L).setKey(key2).setLongName("PropertyUpdateQuery"); when(componentDao.getNullableByKey(session, key1)).thenReturn(file1); when(componentDao.getNullableByKey(session, key2)).thenReturn(file2); - when(componentDao.getNullableById(1L, session)).thenReturn(new ComponentDto().setId(1L).setKey("org.codehaus.sonar:sonar").setLongName("SonarQube")); + when(componentDao.getNullableByUuid(session, project.uuid())).thenReturn(project); List blocks = newArrayList(); blocks.add(new DuplicationsParser.Block(newArrayList( @@ -168,10 +177,10 @@ public class DuplicationsJsonWriterTest { @Test public void write_duplications_with_a_removed_component() throws Exception { String key1 = "org.codehaus.sonar:sonar-ws-client:src/main/java/org/sonar/wsclient/services/PropertyDeleteQuery.java"; - ComponentDto file1 = new ComponentDto().setId(10L).setQualifier("FIL").setKey(key1).setLongName("PropertyDeleteQuery").setProjectId_unit_test_only(1L); + ComponentDto file1 = ComponentTesting.newFileDto(project).setId(10L).setKey(key1).setLongName("PropertyDeleteQuery"); when(componentDao.getNullableByKey(session, key1)).thenReturn(file1); - when(componentDao.getNullableById(1L, session)).thenReturn(new ComponentDto().setId(1L).setKey("org.codehaus.sonar:sonar").setLongName("SonarQube")); + when(componentDao.getNullableByUuid(session, project.uuid())).thenReturn(project); List blocks = newArrayList(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsParserTest.java b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsParserTest.java index 3035478ad51..c9e3857d21d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsParserTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsParserTest.java @@ -32,6 +32,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.core.component.ComponentDto; import org.sonar.core.persistence.DbSession; +import org.sonar.server.component.ComponentTesting; import org.sonar.server.component.db.ComponentDao; import javax.annotation.Nullable; @@ -58,21 +59,32 @@ public class DuplicationsParserTest { DuplicationsParser parser; + ComponentDto project1; + ComponentDto project2; + @Before public void setUp() throws Exception { + project1 = ComponentTesting.newProjectDto() + .setId(1L) + .setName("SonarQube") + .setLongName("SonarQube") + .setKey("org.codehaus.sonar:sonar"); + + project2 = ComponentTesting.newProjectDto().setId(2L); + // Current file String key1 = "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/utils/command/CommandExecutor.java"; - currentFile = new ComponentDto().setId(10L).setQualifier("FIL").setKey(key1).setLongName("CommandExecutor").setProjectId_unit_test_only(1L); + currentFile = ComponentTesting.newFileDto(project1).setId(10L).setKey(key1).setLongName("CommandExecutor"); when(componentDao.getNullableByKey(session, key1)).thenReturn(currentFile); // File on same project String key2 = "org.codehaus.sonar:sonar-plugin-api:src/main/java/com/sonar/orchestrator/util/CommandExecutor.java"; - fileOnSameProject = new ComponentDto().setId(11L).setQualifier("FIL").setKey(key2).setLongName("CommandExecutor").setProjectId_unit_test_only(1L); + fileOnSameProject = ComponentTesting.newFileDto(project1).setId(11L).setKey(key2).setLongName("CommandExecutor"); when(componentDao.getNullableByKey(session, key2)).thenReturn(fileOnSameProject); // File on different project String key3 = "com.sonarsource.orchestrator:sonar-orchestrator:src/main/java/com/sonar/orchestrator/util/CommandExecutor.java"; - fileOnDifferentProject = new ComponentDto().setId(12L).setQualifier("FIL").setKey(key3).setLongName("CommandExecutor").setProjectId_unit_test_only(2L); + fileOnDifferentProject = ComponentTesting.newFileDto(project2).setId(12L).setKey(key3).setLongName("CommandExecutor"); when(componentDao.getNullableByKey(session, key3)).thenReturn(fileOnDifferentProject); parser = new DuplicationsParser(componentDao); @@ -187,9 +199,9 @@ public class DuplicationsParserTest { @Test public void compare_duplications() throws Exception { - ComponentDto currentFile = new ComponentDto().setId(11L).setProjectId_unit_test_only(1L); - ComponentDto fileOnSameProject = new ComponentDto().setId(12L).setProjectId_unit_test_only(1L); - ComponentDto fileOnDifferentProject = new ComponentDto().setId(13L).setProjectId_unit_test_only(2L); + ComponentDto currentFile = ComponentTesting.newFileDto(project1).setId(11L); + ComponentDto fileOnSameProject = ComponentTesting.newFileDto(project1).setId(12L); + ComponentDto fileOnDifferentProject = ComponentTesting.newFileDto(project2).setId(13L); DuplicationsParser.DuplicationComparator comparator = new DuplicationsParser.DuplicationComparator(currentFile); @@ -202,8 +214,9 @@ public class DuplicationsParserTest { assertThat(comparator.compare(new DuplicationsParser.Duplication(fileOnSameProject, 5, 2), new DuplicationsParser.Duplication(fileOnDifferentProject, 2, 2))).isEqualTo(-1); assertThat(comparator.compare(new DuplicationsParser.Duplication(fileOnDifferentProject, 5, 2), new DuplicationsParser.Duplication(fileOnSameProject, 2, 2))).isEqualTo(1); // Files on 2 different projects + ComponentDto project3 = ComponentTesting.newProjectDto().setId(3L); assertThat(comparator.compare(new DuplicationsParser.Duplication(fileOnDifferentProject, 5, 2), - new DuplicationsParser.Duplication(new ComponentDto().setId(30L).setProjectId_unit_test_only(3L), 2, 2))).isEqualTo(1); + new DuplicationsParser.Duplication(project3, 2, 2))).isEqualTo(1); // With null duplications assertThat(comparator.compare(null, new DuplicationsParser.Duplication(fileOnSameProject, 2, 2))).isEqualTo(-1); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java index f35d0c3e198..a4853c54f25 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java @@ -103,7 +103,6 @@ public class IssueBulkChangeServiceTest { file = new ComponentDto() .setId(2L) - .setProjectId_unit_test_only(project.getId()) .setSubProjectId(project.getId()) .setKey("MyComponent") .setLongName("My Component"); diff --git a/server/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json b/server/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json index 0449355dfa1..b2fefdf39fa 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/component/ws/ComponentAppActionTest/app_without_sub_project.json @@ -1,6 +1,7 @@ { "key": "org.codehaus.sonar:sonar", "name": "SonarQube", + "longName": "SonarQube", "q": "TRK", "project" : "org.codehaus.sonar:sonar", "projectName": "SonarQube", diff --git a/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java b/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java index 026d959928e..f4b024bdbb1 100644 --- a/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java +++ b/sonar-core/src/main/java/org/sonar/core/component/ComponentDto.java @@ -40,9 +40,6 @@ public class ComponentDto extends AuthorizedComponentDto implements Component { private boolean enabled = true; private Date authorizationUpdatedAt; - // Return by join for the moment - private Long projectId; - @Override public ComponentDto setId(Long id) { super.setId(id); @@ -150,24 +147,6 @@ public class ComponentDto extends AuthorizedComponentDto implements Component { return this; } - /** - * @deprecated since 5.0, use projectUuid instead - */ - @Deprecated - public Long projectId() { - return projectId; - } - - /** - * Only for unit tests - * @deprecated since 5.0, use projectUuid instead - */ - @Deprecated - public ComponentDto setProjectId_unit_test_only(Long projectId) { - this.projectId = projectId; - return this; - } - @CheckForNull public Long subProjectId() { return subProjectId; diff --git a/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java b/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java index d62d7ac4c88..054e5f69508 100644 --- a/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/component/db/ComponentMapper.java @@ -67,8 +67,6 @@ public interface ComponentMapper { */ List findSubProjectsByComponentUuids(@Param("uuids") Collection uuids); - List findByIds(@Param("ids") Collection ids); - List findByKeys(@Param("keys") Collection keys); /** diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/migration/v50/Migration50Mapper.java b/sonar-core/src/main/java/org/sonar/core/persistence/migration/v50/Migration50Mapper.java index 72e3f492250..0c7267c7d7b 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/migration/v50/Migration50Mapper.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/migration/v50/Migration50Mapper.java @@ -28,6 +28,9 @@ import java.util.List; public interface Migration50Mapper { + /** + * Return enabled root projects (Views and Developers are NOT returned) + */ @Select("SELECT " + " p.id AS \"id\", " + " s.root_project_id AS \"projectId\", " + diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java index c47cf8b997c..9ddf66465a9 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceDao.java @@ -21,7 +21,6 @@ package org.sonar.core.resource; import com.google.common.base.Function; import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; import org.apache.ibatis.session.SqlSession; import org.sonar.api.component.Component; import org.sonar.api.utils.System2; @@ -114,8 +113,8 @@ public class ResourceDao implements DaoComponent { } @CheckForNull - public SnapshotDto getLastSnapshotByResourceId(long resourceId, SqlSession session) { - return session.getMapper(ResourceMapper.class).selectLastSnapshotByResourceId(resourceId); + public SnapshotDto getLastSnapshotByResourceUuid(String componentUuid, SqlSession session) { + return session.getMapper(ResourceMapper.class).selectLastSnapshotByResourceUuid(componentUuid); } public List getDescendantProjects(long projectId) { @@ -170,24 +169,6 @@ public class ResourceDao implements DaoComponent { session.getMapper(ResourceMapper.class).updateAuthorizationDate(projectId, new Date(system2.now())); } - public Collection selectComponentsByIds(Collection ids) { - if (ids.isEmpty()) { - return Collections.emptyList(); - } - SqlSession session = mybatis.openSession(false); - try { - List components = newArrayList(); - List> partitionList = Lists.partition(newArrayList(ids), 1000); - for (List partition : partitionList) { - List dtos = session.getMapper(ResourceMapper.class).selectComponentsByIds(partition); - components.addAll(dtos); - } - return components; - } finally { - MyBatis.closeQuietly(session); - } - } - @CheckForNull public Component findByKey(String key) { ResourceDto resourceDto = getResource(ResourceQuery.create().setKey(key)); @@ -200,18 +181,6 @@ public class ResourceDao implements DaoComponent { return resourceDto != null ? toComponent(resourceDto) : null; } - public List findAuthorizedChildrenComponentIds(Collection componentRootKeys, @Nullable Integer userId, String role) { - if (componentRootKeys.isEmpty()) { - return Collections.emptyList(); - } - SqlSession session = mybatis.openSession(false); - try { - return session.getMapper(ResourceMapper.class).selectAuthorizedChildrenComponentIds(componentRootKeys, userId, role); - } finally { - MyBatis.closeQuietly(session); - } - } - /** * Return the root project of a component. * Will return the component itself if it's already the root project diff --git a/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java b/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java index 77fad8186ce..e599e77f5ff 100644 --- a/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/resource/ResourceMapper.java @@ -21,11 +21,8 @@ package org.sonar.core.resource; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.session.ResultHandler; -import org.sonar.core.component.ComponentDto; import org.sonar.core.component.SnapshotDto; -import javax.annotation.Nullable; - import java.util.Collection; import java.util.Date; import java.util.List; @@ -35,7 +32,7 @@ public interface ResourceMapper { SnapshotDto selectLastSnapshotByResourceKey(String resourceKey); - SnapshotDto selectLastSnapshotByResourceId(long resourceId); + SnapshotDto selectLastSnapshotByResourceUuid(String componentUuid); ResourceDto selectResource(long id); @@ -61,19 +58,11 @@ public interface ResourceMapper { */ ResourceDto selectRootProjectByComponentKey(@Param("componentKey") String componentKey); - List selectComponentsByIds(@Param("ids") List ids); - /** * @since 3.6 */ ResourceDto selectRootProjectByComponentId(@Param("componentId") long componentId); - /** - * @since 3.6 - */ - List selectAuthorizedChildrenComponentIds(@Param("componentRootKeys") Collection componentRootKeys, - @Param("userId") @Nullable Integer userId, @Param("role") String role); - List selectProjectsIncludingNotCompletedOnesByQualifiers(@Param("qualifiers") Collection qualifier); List selectProjectsByQualifiers(@Param("qualifiers") Collection qualifier); diff --git a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml index b2dfd9b20ba..ceceac97175 100644 --- a/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/component/db/ComponentMapper.xml @@ -21,26 +21,6 @@ p.created_at as createdAt - - p.id, - p.uuid as uuid, - p.project_uuid as projectUuid, - p.module_uuid as moduleUuid, - p.module_uuid_path as moduleUuidPath, - p.kee as kee, - p.name as name, - p.long_name as longName, - p.qualifier as qualifier, - p.scope as scope, - p.language as language, - s.root_project_id as projectId, - p.root_id as subProjectId, - p.path as path, - p.enabled as enabled, - p.authorization_updated_at as authorizationUpdatedAt, - p.created_at as createdAt - - p.id, p.uuid as uuid, @@ -92,10 +72,10 @@ - - - SELECT s.* from snapshots s + INNER JOIN projects p on p.id=s.project_id AND p.enabled=${_true} AND p.copy_resource_id IS NULL - AND s.project_id=#{id} + AND p.uuid=#{uuid} AND s.islast=${_true} @@ -167,19 +157,6 @@ and s.islast=${_true} - - - - - - select s.project_id - from snapshots s, ( - select project_components.id as id, - snapshot_components.id as sid, - root_snapshot_components.project_id as root_project_id, - root_snapshot_components.id as root_snapshot_id, - snapshot_components.path as path - from projects project_components - inner join snapshots snapshot_components on snapshot_components.project_id = project_components.id and snapshot_components.islast = ${_true} - inner join snapshots root_snapshot_components on root_snapshot_components.project_id = snapshot_components.root_project_id and root_snapshot_components.islast = ${_true} - inner join ( - - ) authorized_projects on authorized_projects.root_project_id = root_snapshot_components.project_id - - and project_components.kee=#{componentRootKey} - and project_components.enabled = ${_true} - - ) authorized_input_components - - and s.root_project_id = authorized_input_components.root_project_id - and s.islast = ${_true} - and ( - (s.root_snapshot_id = authorized_input_components.root_snapshot_id - and - - - s.path LIKE authorized_input_components.path + CAST(authorized_input_components.sid AS varchar(15)) + '.%' - - - s.path LIKE concat(authorized_input_components.path, authorized_input_components.sid, '.%') - - - s.path LIKE authorized_input_components.path || authorized_input_components.sid || '.%' - - - ) - or (s.id = authorized_input_components.sid) - ) - - - insert into projects (name, long_name, description, scope, qualifier, kee, deprecated_kee, path, language, root_id, copy_resource_id, person_id, enabled, authorization_updated_at, created_at) diff --git a/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java b/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java index d3bce1f946f..4bf3b3799b8 100644 --- a/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/component/ComponentDtoTest.java @@ -38,7 +38,6 @@ public class ComponentDtoTest { .setScope("FIL") .setLanguage("java") .setPath("src/org/struts/RequestContext.java") - .setProjectId_unit_test_only(2L) .setSubProjectId(3L) .setAuthorizationUpdatedAt(DateUtils.parseDate("2014-09-11")); @@ -50,7 +49,6 @@ public class ComponentDtoTest { assertThat(componentDto.scope()).isEqualTo("FIL"); assertThat(componentDto.path()).isEqualTo("src/org/struts/RequestContext.java"); assertThat(componentDto.language()).isEqualTo("java"); - assertThat(componentDto.projectId()).isEqualTo(2L); assertThat(componentDto.subProjectId()).isEqualTo(3L); assertThat(componentDto.getAuthorizationUpdatedAt()).isEqualTo(DateUtils.parseDate("2014-09-11")); } diff --git a/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java b/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java index 08bd833909b..0900645f855 100644 --- a/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/resource/ResourceDaoTest.java @@ -37,7 +37,6 @@ import org.sonar.core.persistence.DbSession; import javax.annotation.Nullable; -import java.util.Collection; import java.util.Collections; import java.util.List; @@ -167,7 +166,7 @@ public class ResourceDaoTest extends AbstractDaoTestCase { public void getResourceIds_filter_by_qualifier() { setupData("fixture"); - List ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[]{"TRK", "BRC"})); + List ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"TRK", "BRC"})); assertThat(ids).containsOnly(1L, 2L); ids = dao.getResourceIds(ResourceQuery.create().setQualifiers(new String[] {"XXX"})); @@ -185,64 +184,6 @@ public class ResourceDaoTest extends AbstractDaoTestCase { assertThat(dao.getResourceIds(ResourceQuery.create().setExcludeDisabled(true))).containsOnly(2L); } - @Test - public void select_components_by_ids() { - setupData("fixture"); - - // File - Collection results = dao.selectComponentsByIds(newArrayList(4L)); - assertThat(results).hasSize(1); - - ComponentDto component = results.iterator().next(); - assertThat(component.key()).isEqualTo("org.struts:struts-core:src/org/struts/RequestContext.java"); - assertThat(component.name()).isEqualTo("RequestContext.java"); - assertThat(component.longName()).isEqualTo("org.struts.RequestContext"); - assertThat(component.qualifier()).isEqualTo("FIL"); - assertThat(component.projectId()).isEqualTo(1); - assertThat(component.subProjectId()).isEqualTo(2); - assertThat(component.path()).isEqualTo("src/org/struts/RequestContext.java"); - - // Module - results = dao.selectComponentsByIds(newArrayList(2L)); - assertThat(results).hasSize(1); - - component = results.iterator().next(); - assertThat(component.key()).isEqualTo("org.struts:struts-core"); - assertThat(component.name()).isEqualTo("Struts Core"); - assertThat(component.longName()).isEqualTo("Struts Core"); - assertThat(component.qualifier()).isEqualTo("BRC"); - assertThat(component.subProjectId()).isEqualTo(1); - assertThat(component.projectId()).isEqualTo(1); - assertThat(component.path()).isNull(); - - // Project - results = dao.selectComponentsByIds(newArrayList(1L)); - assertThat(results).hasSize(1); - - component = results.iterator().next(); - assertThat(component.key()).isEqualTo("org.struts:struts"); - assertThat(component.name()).isEqualTo("Struts"); - assertThat(component.longName()).isEqualTo("Apache Struts"); - assertThat(component.qualifier()).isEqualTo("TRK"); - assertThat(component.subProjectId()).isNull(); - assertThat(component.projectId()).isEqualTo(1); - assertThat(component.path()).isNull(); - } - - @Test - public void select_components_by_ids_on_huge_number_of_ids() { - setupData("fixture"); - - List hugeNbOfIds = newArrayList(); - for (long i = 0; i < 4500; i++) { - hugeNbOfIds.add(i); - } - Collection results = dao.selectComponentsByIds(hugeNbOfIds); - - // The goal of this test is only to check that the query do no fail, not to check the number of results - assertThat(results).isNotNull(); - } - @Test public void find_root_project_by_component_key() { setupData("fixture"); @@ -340,45 +281,6 @@ public class ResourceDaoTest extends AbstractDaoTestCase { assertEmptyTables("projects"); } - @Test - public void should_find_children_component_ids_for_unsecured_project() { - setupData("fixture"); - - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts"), null, "user")).hasSize(4); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts-core"), null, "user")).hasSize(3); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts-core:src/org/struts"), null, "user")).hasSize(2); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts-core:src/org/struts/RequestContext.java"), null, "user")).hasSize(1); - - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("unknown"), null, "user")).isEmpty(); - assertThat(dao.findAuthorizedChildrenComponentIds(Collections.emptyList(), null, "user")).isEmpty(); - } - - @Test - public void should_find_children_component_ids_for_secured_project_for_user() { - setupData("should_find_children_component_ids_for_secured_project_for_user"); - - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts"), 100, "user")).hasSize(4); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts-core"), 100, "user")).hasSize(3); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts:org.struts"), 100, "user")).hasSize(2); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts:org.struts.RequestContext"), 100, "user")).hasSize(1); - - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("unknown"), 100, "user")).isEmpty(); - assertThat(dao.findAuthorizedChildrenComponentIds(Collections.emptyList(), 100, "user")).isEmpty(); - } - - @Test - public void should_find_children_component_ids_for_secured_project_for_group() { - setupData("should_find_children_component_ids_for_secured_project_for_group"); - - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts"), 100, "user")).hasSize(4); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts-core"), 100, "user")).hasSize(3); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts:org.struts"), 100, "user")).hasSize(2); - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("org.struts:struts:org.struts.RequestContext"), 100, "user")).hasSize(1); - - assertThat(dao.findAuthorizedChildrenComponentIds(newArrayList("unknown"), 100, "user")).isEmpty(); - assertThat(dao.findAuthorizedChildrenComponentIds(Collections.emptyList(), 100, "user")).isEmpty(); - } - @Test public void should_find_component_by_key() { setupData("fixture"); @@ -457,10 +359,10 @@ public class ResourceDaoTest extends AbstractDaoTestCase { } @Test - public void get_last_snapshot_by_resource_id() { - setupData("get_last_snapshot_by_resource_id"); + public void get_last_snapshot_by_component_uuid() { + setupData("get_last_snapshot_by_component_uuid"); - SnapshotDto snapshotDto = dao.getLastSnapshotByResourceId(1L, session); + SnapshotDto snapshotDto = dao.getLastSnapshotByResourceUuid("ABCD", session); assertThat(snapshotDto.getId()).isEqualTo(1); assertThat(snapshotDto.getPeriodMode(1)).isEqualTo("previous_analysis"); @@ -483,13 +385,13 @@ public class ResourceDaoTest extends AbstractDaoTestCase { assertThat(snapshotDto.getPeriodModeParameter(5)).isNull(); assertThat(snapshotDto.getPeriodDate(5)).isNull(); - snapshotDto = dao.getLastSnapshotByResourceId(2L, session); + snapshotDto = dao.getLastSnapshotByResourceUuid("EFGH", session); assertThat(snapshotDto.getId()).isEqualTo(2L); - snapshotDto = dao.getLastSnapshotByResourceId(3L, session); + snapshotDto = dao.getLastSnapshotByResourceUuid("GHIJ", session); assertThat(snapshotDto.getId()).isEqualTo(3L); - assertThat(dao.getLastSnapshotByResourceId(42L, session)).isNull(); + assertThat(dao.getLastSnapshotByResourceUuid("UNKNOWN", session)).isNull(); } @Test diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/get_last_snapshot_by_resource_id.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/get_last_snapshot_by_component_uuid.xml similarity index 93% rename from sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/get_last_snapshot_by_resource_id.xml rename to sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/get_last_snapshot_by_component_uuid.xml index 0e975c6137e..b60896e0123 100644 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/get_last_snapshot_by_resource_id.xml +++ b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/get_last_snapshot_by_component_uuid.xml @@ -6,6 +6,7 @@ @@ -58,6 +61,7 @@ diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_group.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_group.xml deleted file mode 100644 index 62891ca34dd..00000000000 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_group.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_user.xml b/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_user.xml deleted file mode 100644 index d5a2af24edc..00000000000 --- a/sonar-core/src/test/resources/org/sonar/core/resource/ResourceDaoTest/should_find_children_component_ids_for_secured_project_for_user.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.39.5