From 78fa452a0c5c48e9c8362ca7d78e9ce6632e5ad0 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 29 Sep 2014 11:27:07 +0200 Subject: [PATCH] SONAR-5614 Add medium test to synchronize a lot of issues --- .../sonar/server/platform/BackendCleanup.java | 2 +- .../batch/UploadReportActionMediumTest.java | 12 +---- .../issue/index/IssueIndexMediumTest.java | 51 +++++++++++++++++-- 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java b/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java index 237dc2399d5..dcc0185feb3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java @@ -146,7 +146,7 @@ public class BackendCleanup implements ServerComponent { } } - private void clearIndex(IndexDefinition indexDefinition){ + public void clearIndex(IndexDefinition indexDefinition){ searchClient.prepareDeleteByQuery(searchClient.admin().cluster().prepareState().get() .getState().getMetaData().concreteIndices(new String[]{indexDefinition.getIndexName()})) .setQuery(QueryBuilders.matchAllQuery()) diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java index ab55d82b6fe..4522ffc91e3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/UploadReportActionMediumTest.java @@ -20,7 +20,6 @@ package org.sonar.server.batch; -import org.elasticsearch.index.query.QueryBuilders; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -40,10 +39,10 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.issue.index.IssueAuthorizationIndex; import org.sonar.server.issue.index.IssueIndex; +import org.sonar.server.platform.BackendCleanup; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.search.IndexDefinition; -import org.sonar.server.search.SearchClient; import org.sonar.server.tester.ServerTester; import org.sonar.server.user.MockUserSession; import org.sonar.server.ws.WsTester; @@ -166,7 +165,7 @@ public class UploadReportActionMediumTest { session.commit(); // Clear issue index to simulate that the issue has been inserted by the batch, so that it's not yet index in E/S - clearIssueIndex(); + tester.get(BackendCleanup.class).clearIndex(IndexDefinition.ISSUES); assertThat(db.issueDao().getByKey(session, issue.getKey())).isNotNull(); assertThat(tester.get(IssueIndex.class).getNullableByKey(issue.getKey())).isNull(); @@ -180,11 +179,4 @@ public class UploadReportActionMediumTest { assertThat(tester.get(IssueIndex.class).getNullableByKey(issue.getKey())).isNotNull(); } - private void clearIssueIndex(){ - tester.get(SearchClient.class).prepareDeleteByQuery(tester.get(SearchClient.class).admin().cluster().prepareState().get() - .getState().getMetaData().concreteIndices(new String[]{IndexDefinition.ISSUES.getIndexName()})).setTypes(new String[]{IndexDefinition.ISSUES.getIndexType()}) - .setQuery(QueryBuilders.matchAllQuery()) - .get(); - } - } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java index 3493a8e9ff1..e854da588b6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexMediumTest.java @@ -20,10 +20,7 @@ package org.sonar.server.issue.index; import com.google.common.collect.ImmutableMap; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.*; import org.sonar.api.issue.Issue; import org.sonar.api.issue.IssueQuery; import org.sonar.api.rule.RuleKey; @@ -40,13 +37,16 @@ import org.sonar.core.rule.RuleDto; import org.sonar.core.user.GroupDto; import org.sonar.core.user.UserDto; import org.sonar.server.component.ComponentTesting; +import org.sonar.server.component.SnapshotTesting; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.issue.IssueTesting; import org.sonar.server.issue.db.IssueDao; +import org.sonar.server.platform.BackendCleanup; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; +import org.sonar.server.search.IndexDefinition; import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; import org.sonar.server.tester.ServerTester; @@ -568,7 +568,7 @@ public class IssueIndexMediumTest { IssueTesting.newDto(rule, file1, project1), IssueTesting.newDto(rule, file2, project2), IssueTesting.newDto(rule, file2, project3) - ); + ); session.commit(); session.clearCache(); @@ -619,4 +619,45 @@ public class IssueIndexMediumTest { assertThat(index.search(query.build(), new QueryContext()).getHits()).hasSize(1); } + @Test + @Ignore("To be fixed") + public void synchronize_a_lot_of_issues() throws Exception { + ComponentDto project = new ComponentDto() + .setKey("MyProject") + .setProjectId_unit_test_only(1L); + db.componentDao().insert(session, project); + + // project can be seen by anyone + tester.get(PermissionFacade.class).insertGroupPermission(project.getId(), DefaultGroups.ANYONE, UserRole.USER, session); + db.issueAuthorizationDao().synchronizeAfter(session, new Date(0)); + + ComponentDto resource = new ComponentDto() + .setProjectId_unit_test_only(project.getId()) + .setKey("MyComponent"); + db.componentDao().insert(session, resource); + db.snapshotDao().insert(session, SnapshotTesting.createForComponent(resource)); + + List issueKeys = newArrayList(); + for (int i = 0; i < 11; i++) { + IssueDto issue = IssueTesting.newDto(rule, resource, project); + tester.get(IssueDao.class).insert(session, issue); + issueKeys.add(issue.getKey()); + } + session.commit(); + + // Clear issue index in order to simulate these issues have been inserted without being indexed in E/S (from a previous version of SQ or from batch) + tester.get(BackendCleanup.class).clearIndex(IndexDefinition.ISSUES); + + DbSession newSession = db.openSession(false); + newSession.setImplicitCommitSize(10); + try { + db.issueDao().synchronizeAfter(newSession, new Date(0)); + newSession.commit(); + + assertThat(index.search(IssueQuery.builder().build(), new QueryContext().setMaxLimit()).getHits()).hasSize(10); + } finally { + newSession.close(); + } + } + } -- 2.39.5