From 533f9c875f8910d2926b30fc60417af7d9854d8e Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 17 Oct 2016 15:45:14 +0200 Subject: [PATCH] SONAR-8227 Remove DbUnit usage from AuthorizationDao/Indexer --- .../index/AuthorizationDaoTest.java | 118 ++++++++++-------- .../index/AuthorizationIndexerTest.java | 64 ++++++---- .../AuthorizationDaoTest/no_authorization.xml | 43 ------- .../index/AuthorizationDaoTest/shared.xml | 112 ----------------- .../index/AuthorizationIndexerTest/index.xml | 69 ---------- 5 files changed, 107 insertions(+), 299 deletions(-) delete mode 100644 server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/no_authorization.xml delete mode 100644 server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/shared.xml delete mode 100644 server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationIndexerTest/index.xml diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationDaoTest.java index a6c594f6a09..e1ae606f037 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationDaoTest.java @@ -19,84 +19,98 @@ */ package org.sonar.server.permission.index; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; import java.util.Collection; import org.junit.Rule; import org.junit.Test; import org.sonar.api.utils.System2; +import org.sonar.db.DbClient; +import org.sonar.db.DbSession; import org.sonar.db.DbTester; +import org.sonar.db.component.ComponentDbTester; +import org.sonar.db.component.ComponentDto; +import org.sonar.db.user.GroupDto; +import org.sonar.db.user.UserDbTester; +import org.sonar.db.user.UserDto; import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.api.security.DefaultGroups.ANYONE; +import static org.sonar.api.web.UserRole.ADMIN; +import static org.sonar.api.web.UserRole.USER; public class AuthorizationDaoTest { @Rule public DbTester dbTester = DbTester.create(System2.INSTANCE); - private AuthorizationDao dao = new AuthorizationDao(); + DbClient dbClient = dbTester.getDbClient(); + DbSession dbSession = dbTester.getSession(); - @Test - public void select_all() { - dbTester.prepareDbUnit(getClass(), "shared.xml"); - - Collection dtos = dao.selectAfterDate(dbTester.getDbClient(), dbTester.getSession(), 0L); - assertThat(dtos).hasSize(2); + ComponentDbTester componentDbTester = new ComponentDbTester(dbTester); + UserDbTester userDbTester = new UserDbTester(dbTester); - AuthorizationDao.Dto abc = Iterables.find(dtos, new ProjectPredicate("ABC")); - assertThat(abc.getGroups()).containsOnly("Anyone", "devs"); - assertThat(abc.getUsers()).containsOnly("user1"); - assertThat(abc.getUpdatedAt()).isNotNull(); - - AuthorizationDao.Dto def = Iterables.find(dtos, new ProjectPredicate("DEF")); - assertThat(def.getGroups()).containsOnly("Anyone"); - assertThat(def.getUsers()).containsOnly("user1", "user2"); - assertThat(def.getUpdatedAt()).isNotNull(); - } + AuthorizationDao underTest = new AuthorizationDao(); @Test - public void select_after_date() { - dbTester.prepareDbUnit(getClass(), "shared.xml"); + public void select_all() { + ComponentDto project1 = componentDbTester.insertProject(); + ComponentDto project2 = componentDbTester.insertProject(); + + // user1 can access both projects + UserDto user1 = userDbTester.insertUser(); + userDbTester.insertProjectPermissionOnUser(user1, USER, project1); + userDbTester.insertProjectPermissionOnUser(user1, ADMIN, project1); + userDbTester.insertProjectPermissionOnUser(user1, USER, project2); + + // user2 has user access on project2 only + UserDto user2 = userDbTester.insertUser(); + userDbTester.insertProjectPermissionOnUser(user2, USER, project2); + + // group1 has user access on project1 only + GroupDto group = userDbTester.insertGroup(); + userDbTester.insertProjectPermissionOnGroup(group, USER, project1); + userDbTester.insertProjectPermissionOnGroup(group, ADMIN, project1); + + // Anyone group has user access on both projects + userDbTester.insertProjectPermissionOnAnyone(USER, project1); + userDbTester.insertProjectPermissionOnAnyone(ADMIN, project1); + userDbTester.insertProjectPermissionOnAnyone(USER, project2); + + Collection dtos = underTest.selectAfterDate(dbClient, dbSession, 0L); + assertThat(dtos).hasSize(2); - Collection dtos = dao.selectAfterDate(dbTester.getDbClient(), dbTester.getSession(), 1500000000L); + AuthorizationDao.Dto project1Authorization = getByProjectUuid(project1.uuid(), dtos); + assertThat(project1Authorization.getGroups()).containsOnly(ANYONE, group.getName()); + assertThat(project1Authorization.getUsers()).containsOnly(user1.getLogin()); + assertThat(project1Authorization.getUpdatedAt()).isNotNull(); - // only project DEF was updated in this period - assertThat(dtos).hasSize(1); - AuthorizationDao.Dto def = Iterables.find(dtos, new ProjectPredicate("DEF")); - assertThat(def).isNotNull(); - assertThat(def.getGroups()).containsOnly("Anyone"); - assertThat(def.getUsers()).containsOnly("user1", "user2"); + AuthorizationDao.Dto project2Authorization = getByProjectUuid(project2.uuid(), dtos); + assertThat(project2Authorization.getGroups()).containsOnly(ANYONE); + assertThat(project2Authorization.getUsers()).containsOnly(user1.getLogin(), user2.getLogin()); + assertThat(project2Authorization.getUpdatedAt()).isNotNull(); } @Test public void no_authorization() { - dbTester.prepareDbUnit(getClass(), "no_authorization.xml"); + ComponentDto project1 = componentDbTester.insertProject(); + // no authorizations project1 - Collection dtos = dao.selectAfterDate(dbTester.getDbClient(), dbTester.getSession(), 0L); + ComponentDto project2 = componentDbTester.insertProject(); + UserDto user = userDbTester.insertUser(); + userDbTester.insertProjectPermissionOnUser(user, USER, project2); + GroupDto group = userDbTester.insertGroup(); + userDbTester.insertProjectPermissionOnGroup(group, USER, project2); - assertThat(dtos).hasSize(1); - AuthorizationDao.Dto abc = Iterables.find(dtos, new ProjectPredicate("ABC")); - assertThat(abc.getGroups()).isEmpty(); - assertThat(abc.getUsers()).isEmpty(); - assertThat(abc.getUpdatedAt()).isNotNull(); - } - - private static class ProjectPredicate implements Predicate { - - private final String projectUuid; - - ProjectPredicate(String projectUuid) { - this.projectUuid = projectUuid; - } + Collection dtos = underTest.selectAfterDate(dbClient, dbSession, 0L); - @Override - public boolean apply(AuthorizationDao.Dto input) { - return input.getProjectUuid().equals(projectUuid); - } + assertThat(dtos).hasSize(2); + AuthorizationDao.Dto project1Authorization = getByProjectUuid(project1.uuid(), dtos); + assertThat(project1Authorization.getGroups()).isEmpty(); + assertThat(project1Authorization.getUsers()).isEmpty(); + assertThat(project1Authorization.getUpdatedAt()).isNotNull(); + } - @Override - public boolean equals(Object object) { - return true; - } + private static AuthorizationDao.Dto getByProjectUuid(String projectUuid, Collection dtos) { + return dtos.stream().filter(dto -> dto.getProjectUuid().equals(projectUuid)).findFirst().orElseThrow(IllegalArgumentException::new); } + } diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationIndexerTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationIndexerTest.java index bf25f0f981e..1e24bc1d197 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationIndexerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/index/AuthorizationIndexerTest.java @@ -27,13 +27,19 @@ import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.MapSettings; import org.sonar.api.utils.System2; -import org.sonar.db.DbClient; import org.sonar.db.DbTester; +import org.sonar.db.component.ComponentDbTester; +import org.sonar.db.component.ComponentDto; +import org.sonar.db.user.GroupDto; +import org.sonar.db.user.UserDbTester; +import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; import org.sonar.server.issue.index.IssueIndexDefinition; import static org.assertj.core.api.Assertions.assertThat; - +import static org.sonar.api.security.DefaultGroups.ANYONE; +import static org.sonar.api.web.UserRole.ADMIN; +import static org.sonar.api.web.UserRole.USER; public class AuthorizationIndexerTest { @@ -43,63 +49,75 @@ public class AuthorizationIndexerTest { @Rule public EsTester esTester = new EsTester(new IssueIndexDefinition(new MapSettings())); + ComponentDbTester componentDbTester = new ComponentDbTester(dbTester); + UserDbTester userDbTester = new UserDbTester(dbTester); + + AuthorizationIndexer underTest = new AuthorizationIndexer(dbTester.getDbClient(), esTester.client()); + @Test public void index_nothing() { - AuthorizationIndexer indexer = createIndexer(); - indexer.index(); + underTest.index(); assertThat(esTester.countDocuments("issues", "authorization")).isZero(); } @Test public void index() { - dbTester.prepareDbUnit(getClass(), "index.xml"); + ComponentDto project = componentDbTester.insertProject(); + UserDto user = userDbTester.insertUser(); + userDbTester.insertProjectPermissionOnUser(user, USER, project); + userDbTester.insertProjectPermissionOnUser(user, ADMIN, project); + GroupDto group = userDbTester.insertGroup(); + userDbTester.insertProjectPermissionOnGroup(group, USER, project); + userDbTester.insertProjectPermissionOnAnyone(USER, project); - AuthorizationIndexer indexer = createIndexer(); - indexer.doIndex(0L); + underTest.doIndex(0L); List docs = esTester.getDocuments("issues", "authorization"); assertThat(docs).hasSize(1); SearchHit doc = docs.get(0); - assertThat(doc.getSource().get("project")).isEqualTo("ABC"); - assertThat((Collection) doc.getSource().get("groups")).containsOnly("devs", "Anyone"); - assertThat((Collection) doc.getSource().get("users")).containsOnly("user1"); + assertThat(doc.getSource().get("project")).isEqualTo(project.uuid()); + assertThat((Collection) doc.getSource().get("groups")).containsOnly(group.getName(), ANYONE); + assertThat((Collection) doc.getSource().get("users")).containsOnly(user.getLogin()); + } + + @Test + public void delete_project() { + AuthorizationDao.Dto authorization = new AuthorizationDao.Dto("ABC", System.currentTimeMillis()); + authorization.addUser("guy"); + authorization.addGroup("dev"); + underTest.index(Arrays.asList(authorization)); - // delete project - indexer.deleteProject("ABC", true); + underTest.deleteProject("ABC", true); - assertThat(esTester.countDocuments("issues", "issueAuthorization")).isZero(); + assertThat(esTester.countDocuments("issues", "authorization")).isZero(); } @Test public void do_not_fail_when_deleting_unindexed_project() { - AuthorizationIndexer indexer = createIndexer(); - indexer.deleteProject("UNKNOWN", true); + underTest.deleteProject("UNKNOWN", true); + assertThat(esTester.countDocuments("issues", "authorization")).isZero(); } @Test public void delete_permissions() { - AuthorizationIndexer indexer = createIndexer(); AuthorizationDao.Dto authorization = new AuthorizationDao.Dto("ABC", System.currentTimeMillis()); authorization.addUser("guy"); authorization.addGroup("dev"); - indexer.index(Arrays.asList(authorization)); + underTest.index(Arrays.asList(authorization)); // has permissions assertThat(esTester.countDocuments("issues", "authorization")).isEqualTo(1); // remove permissions -> dto has no users nor groups authorization = new AuthorizationDao.Dto("ABC", System.currentTimeMillis()); - indexer.index(Arrays.asList(authorization)); + underTest.index(Arrays.asList(authorization)); List docs = esTester.getDocuments("issues", "authorization"); assertThat(docs).hasSize(1); - assertThat((Collection)docs.get(0).sourceAsMap().get(IssueIndexDefinition.FIELD_AUTHORIZATION_USERS)).hasSize(0); - assertThat((Collection)docs.get(0).sourceAsMap().get(IssueIndexDefinition.FIELD_AUTHORIZATION_GROUPS)).hasSize(0); + assertThat((Collection) docs.get(0).sourceAsMap().get(IssueIndexDefinition.FIELD_AUTHORIZATION_USERS)).hasSize(0); + assertThat((Collection) docs.get(0).sourceAsMap().get(IssueIndexDefinition.FIELD_AUTHORIZATION_GROUPS)).hasSize(0); } - private AuthorizationIndexer createIndexer() { - return new AuthorizationIndexer(new DbClient(dbTester.database(), dbTester.myBatis()), esTester.client()); - } } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/no_authorization.xml b/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/no_authorization.xml deleted file mode 100644 index 39ae98765f1..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/no_authorization.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - diff --git a/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/shared.xml b/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/shared.xml deleted file mode 100644 index 955402ac08d..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationDaoTest/shared.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationIndexerTest/index.xml b/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationIndexerTest/index.xml deleted file mode 100644 index 7a5529f12fa..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/permission/index/AuthorizationIndexerTest/index.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - -- 2.39.5