From 17d122c00443de987c029cb0ec9606e50d60f84f Mon Sep 17 00:00:00 2001 From: Guillaume Jambet Date: Thu, 26 Apr 2018 10:26:37 +0200 Subject: [PATCH] SONAR-10597 Introduce UUID in table USERS --- .../org/sonar/db/version/rows-h2.sql | 2 +- .../org/sonar/db/version/schema-h2.ddl | 1 + .../main/java/org/sonar/db/user/UserDao.java | 14 +- .../main/java/org/sonar/db/user/UserDto.java | 11 ++ .../java/org/sonar/db/user/UserMapper.java | 4 +- .../org/sonar/db/user/UserMapper.xml | 9 +- .../sonar/db/property/PropertiesDaoTest.java | 30 ++-- .../java/org/sonar/db/user/UserDaoTest.java | 4 +- .../select_only_enable_users.xml | 4 + .../users_with_permissions.xml | 3 + ...missions_should_be_sorted_by_user_name.xml | 3 + .../migration/version/v72/AddUUIDtoUsers.java | 48 +++++++ .../db/migration/version/v72/DbVersion72.java | 2 + .../version/v72/PopulateUUIDOnUsers.java | 57 ++++++++ .../version/v72/AddUUIDtoUsersTest.java | 59 ++++++++ .../version/v72/DbVersion72Test.java | 2 +- .../version/v72/PopulateUUIDOnUsersTest.java | 129 ++++++++++++++++++ .../version/v72/AddUUIDtoUsers/users.sql | 22 +++ .../v72/PopulateUUIDOnUsersTest/users.sql | 23 ++++ .../LocalAuthenticationTest.java | 22 +-- .../server/issue/ws/SearchActionTest.java | 27 ++-- .../measure/custom/ws/CreateActionTest.java | 4 +- .../measure/custom/ws/SearchActionTest.java | 4 +- .../measure/custom/ws/UpdateActionTest.java | 4 +- .../server/user/DeprecatedUserFinderTest.java | 37 ++--- .../server/user/ws/SearchActionTest.java | 4 +- .../user/DeprecatedUserFinderTest/fixture.xml | 16 --- 27 files changed, 448 insertions(+), 97 deletions(-) create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsers.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsers.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsersTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest.java create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsers/users.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest/users.sql delete mode 100644 server/sonar-server/src/test/resources/org/sonar/server/user/DeprecatedUserFinderTest/fixture.xml diff --git a/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql b/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql index b82e764641b..95b8cf51d7b 100644 --- a/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql +++ b/server/sonar-db-core/src/main/resources/org/sonar/db/version/rows-h2.sql @@ -1,4 +1,4 @@ -INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, EXTERNAL_IDENTITY, EXTERNAL_IDENTITY_PROVIDER, USER_LOCAL, CRYPTED_PASSWORD, SALT, HASH_METHOD, IS_ROOT, ONBOARDED, CREATED_AT, UPDATED_AT) VALUES (1, 'admin', 'Administrator', '', 'admin', 'sonarqube', true, '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', null, 'BCRYPT', false, false, '1418215735482', '1418215735482'); +INSERT INTO USERS(ID, UUID, LOGIN, NAME, EMAIL, EXTERNAL_IDENTITY, EXTERNAL_IDENTITY_PROVIDER, USER_LOCAL, CRYPTED_PASSWORD, SALT, HASH_METHOD, IS_ROOT, ONBOARDED, CREATED_AT, UPDATED_AT) VALUES (1, 'UuidnciQUUs7Zd3KPvFD', 'admin', 'Administrator', '', 'admin', 'sonarqube', true, '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', null, 'BCRYPT', false, false, '1418215735482', '1418215735482'); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; INSERT INTO GROUPS(ID, ORGANIZATION_UUID, NAME, DESCRIPTION, CREATED_AT, UPDATED_AT) VALUES (1, 'AVdqnciQUUs7Zd3KPvFD', 'sonar-administrators', 'System administrators', '2011-09-26 22:27:51.0', '2011-09-26 22:27:51.0'); diff --git a/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl b/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl index dd2e3a3317e..46b8deff215 100644 --- a/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl +++ b/server/sonar-db-core/src/main/resources/org/sonar/db/version/schema-h2.ddl @@ -454,6 +454,7 @@ CREATE INDEX "IX_ARP_ON_ACTIVE_RULE_ID" ON "ACTIVE_RULE_PARAMETERS" ("ACTIVE_RUL CREATE TABLE "USERS" ( "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), + "UUID" VARCHAR(40), "LOGIN" VARCHAR(255), "NAME" VARCHAR(200), "EMAIL" VARCHAR(100), diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java index e58945b21aa..73c04c6e179 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDao.java @@ -32,6 +32,7 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import org.sonar.api.user.UserQuery; import org.sonar.api.utils.System2; +import org.sonar.core.util.UuidFactory; import org.sonar.db.Dao; import org.sonar.db.DbSession; import org.sonar.db.RowNotFoundException; @@ -44,9 +45,12 @@ import static org.sonar.db.DatabaseUtils.executeLargeInputsWithoutOutput; public class UserDao implements Dao { private final System2 system2; + private final UuidFactory uuidFactory; - public UserDao(System2 system2) { + + public UserDao(System2 system2, UuidFactory uuidFactory) { this.system2 = system2; + this.uuidFactory = uuidFactory; } @CheckForNull @@ -102,16 +106,12 @@ public class UserDao implements Dao { public UserDto insert(DbSession session, UserDto dto) { long now = system2.now(); - mapper(session).insert(dto, now); - dto.setCreatedAt(now); - dto.setUpdatedAt(now); + mapper(session).insert(dto.setUuid(uuidFactory.create()).setCreatedAt(now).setUpdatedAt(now)); return dto; } public UserDto update(DbSession session, UserDto dto) { - long now = system2.now(); - mapper(session).update(dto, now); - dto.setUpdatedAt(now); + mapper(session).update(dto.setUpdatedAt(system2.now())); return dto; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java index 32b5e69e835..5c2cd93a2f3 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java @@ -33,6 +33,8 @@ import org.sonar.core.user.DefaultUser; public class UserDto { public static final char SCM_ACCOUNTS_SEPARATOR = '\n'; + /** Technical unique identifier, can't be null */ + private String uuid; private Integer id; private String login; private String name; @@ -55,6 +57,15 @@ public class UserDto { private boolean root = false; private boolean onboarded = false; + public String getUuid() { + return uuid; + } + + UserDto setUuid(String uuid) { + this.uuid = uuid; + return this; + } + public Integer getId() { return id; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java index fa80aba9ac8..e02486dce16 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserMapper.java @@ -62,9 +62,9 @@ public interface UserMapper { */ long countRootUsersButLogin(@Param("login") String login); - void insert(@Param("user") UserDto userDto, @Param("now") long now); + void insert(@Param("user") UserDto userDto); - void update(@Param("user") UserDto userDto, @Param("now") long now); + void update(@Param("user") UserDto userDto); void setRoot(@Param("login") String login, @Param("root") boolean root, @Param("now") long now); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml index 97909a40307..5626e1c4c68 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/user/UserMapper.xml @@ -5,6 +5,7 @@ u.id as id, + u.uuid as uuid, u.login as login, u.name as name, u.email as email, @@ -171,6 +172,7 @@ insert into users ( + uuid, login, name, email, @@ -189,6 +191,7 @@ homepage_type, homepage_parameter ) values ( + #{user.uuid,jdbcType=VARCHAR}, #{user.login,jdbcType=VARCHAR}, #{user.name,jdbcType=VARCHAR}, #{user.email,jdbcType=VARCHAR}, @@ -202,8 +205,8 @@ #{user.hashMethod,jdbcType=VARCHAR}, #{user.root,jdbcType=BOOLEAN}, #{user.onboarded,jdbcType=BOOLEAN}, - #{now,jdbcType=BIGINT}, - #{now,jdbcType=BIGINT}, + #{user.createdAt,jdbcType=BIGINT}, + #{user.updatedAt,jdbcType=BIGINT}, #{user.homepageType,jdbcType=VARCHAR}, #{user.homepageParameter,jdbcType=VARCHAR} ) @@ -222,7 +225,7 @@ salt = #{user.salt, jdbcType=VARCHAR}, crypted_password = #{user.cryptedPassword, jdbcType=BIGINT}, hash_method = #{user.hashMethod, jdbcType=VARCHAR}, - updated_at = #{now, jdbcType=BIGINT}, + updated_at = #{user.updatedAt,jdbcType=BIGINT}, homepage_type = #{user.homepageType, jdbcType=VARCHAR}, homepage_parameter = #{user.homepageParameter, jdbcType=VARCHAR} where diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java index 4d0616529c1..a01c5d52058 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java @@ -44,7 +44,6 @@ import org.sonar.db.component.ComponentTesting; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.organization.OrganizationTesting; import org.sonar.db.user.UserDto; -import org.sonar.db.user.UserTesting; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Sets.newHashSet; @@ -56,6 +55,7 @@ import static org.mockito.Mockito.when; import static org.sonar.db.property.PropertyTesting.newComponentPropertyDto; import static org.sonar.db.property.PropertyTesting.newGlobalPropertyDto; import static org.sonar.db.property.PropertyTesting.newUserPropertyDto; +import static org.sonar.db.user.UserTesting.newUserDto; @RunWith(DataProviderRunner.class) public class PropertiesDaoTest { @@ -83,9 +83,9 @@ public class PropertiesDaoTest { public void shouldFindUsersForNotification() throws SQLException { ComponentDto project1 = insertPrivateProject("uuid_45"); ComponentDto project2 = insertPrivateProject("uuid_56"); - UserDto user1 = insertUser("user1"); - UserDto user2 = insertUser("user2"); - UserDto user3 = insertUser("user3"); + UserDto user1 = dbTester.users().insertUser(u -> u.setLogin("user1")); + UserDto user2 = dbTester.users().insertUser(u -> u.setLogin("user2")); + UserDto user3 = dbTester.users().insertUser(u -> u.setLogin("user3")); insertProperty("notification.NewViolations.Email", "true", project1.getId(), user2.getId()); insertProperty("notification.NewViolations.Twitter", "true", null, user3.getId()); insertProperty("notification.NewViolations.Twitter", "true", project2.getId(), user1.getId()); @@ -122,8 +122,8 @@ public class PropertiesDaoTest { @Test public void hasNotificationSubscribers() throws SQLException { - int userId1 = insertUser("user1").getId(); - int userId2 = insertUser("user2").getId(); + int userId1 = dbTester.users().insertUser(u -> u.setLogin("user1")).getId(); + int userId2 = dbTester.users().insertUser(u -> u.setLogin("user2")).getId(); Long projectId = insertPrivateProject("PROJECT_A").getId(); // global subscription insertProperty("notification.DispatcherWithGlobalSubscribers.Email", "true", null, userId2); @@ -352,7 +352,7 @@ public class PropertiesDaoTest { @Test public void select_global_properties_by_keys() throws Exception { insertPrivateProject("A"); - int userId = insertUser("B").getId(); + int userId = dbTester.users().insertUser(u -> u.setLogin("B")).getId(); String key = "key"; String anotherKey = "anotherKey"; @@ -378,9 +378,7 @@ public class PropertiesDaoTest { public void select_component_properties_by_ids() { ComponentDto project = dbTester.components().insertPrivateProject(); ComponentDto project2 = dbTester.components().insertPrivateProject(); - - UserDto user = UserTesting.newUserDto(); - dbClient.userDao().insert(session, user); + UserDto user = dbTester.users().insertUser(); String key = "key"; String anotherKey = "anotherKey"; @@ -406,9 +404,7 @@ public class PropertiesDaoTest { public void select_properties_by_keys_and_component_ids() { ComponentDto project = dbTester.components().insertPrivateProject(); ComponentDto project2 = dbTester.components().insertPrivateProject(); - - UserDto user = UserTesting.newUserDto(); - dbClient.userDao().insert(session, user); + UserDto user = dbTester.users().insertUser(); String key = "key"; String anotherKey = "anotherKey"; @@ -1029,14 +1025,6 @@ public class PropertiesDaoTest { return project; } - private UserDto insertUser(String login) { - UserDto dto = new UserDto().setLogin(login); - DbSession session = dbTester.getSession(); - dbClient.userDao().insert(session, dto); - session.commit(); - return dto; - } - private static PropertyDtoAssert assertThatDto(@Nullable PropertyDto dto) { return new PropertyDtoAssert(dto); } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDaoTest.java index e5899b9d08a..78145186825 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/user/UserDaoTest.java @@ -360,7 +360,7 @@ public class UserDaoTest { .setLocal(true) .setOnboarded(false)); - UserDto userUpdate = new UserDto() + UserDto userUpdate = newUserDto() .setId(1) .setLogin("john") .setName("John Doo") @@ -488,7 +488,7 @@ public class UserDaoTest { @Test public void does_not_fail_to_deactivate_missing_user() { - underTest.deactivateUser(session, UserTesting.newUserDto()); + underTest.deactivateUser(session, newUserDto()); } @Test diff --git a/server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/select_only_enable_users.xml b/server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/select_only_enable_users.xml index c3a899ddf49..159c76bec00 100644 --- a/server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/select_only_enable_users.xml +++ b/server/sonar-db-dao/src/test/resources/org/sonar/db/permission/template/UserWithPermissionTemplateDaoTest/select_only_enable_users.xml @@ -1,24 +1,28 @@ { + String login = row.getString(2); + if (login == null) { + login = uuidFactory.create(); + } + update.setString(1, login); // login -> uuid + update.setLong(2, system2.now()); + update.setLong(3, row.getLong(1)); + return true; + }); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsersTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsersTest.java new file mode 100644 index 00000000000..29165a3543c --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsersTest.java @@ -0,0 +1,59 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v72; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.db.CoreDbTester; + +import static java.sql.Types.VARCHAR; +import static org.junit.rules.ExpectedException.none; +import static org.sonar.db.CoreDbTester.createForSchema; + +public class AddUUIDtoUsersTest { + + @Rule + public final CoreDbTester dbTester = createForSchema(AddUUIDtoUsers.class, "users.sql"); + + @Rule + public ExpectedException expectedException = none(); + + private AddUUIDtoUsers underTest = new AddUUIDtoUsers(dbTester.database()); + + @Test + public void column_is_added_to_table() throws SQLException { + underTest.execute(); + + dbTester.assertColumnDefinition("users", "uuid", VARCHAR, 40, true); + } + + @Test + public void migration_is_not_reentrant() throws SQLException { + underTest.execute(); + + expectedException.expect(IllegalStateException.class); + + underTest.execute(); + } + + +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java index 1cb135035ac..fa799924aba 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/DbVersion72Test.java @@ -34,7 +34,7 @@ public class DbVersion72Test { @Test public void verify_migration_count() { - verifyMigrationCount(underTest, 7); + verifyMigrationCount(underTest, 9); } } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest.java new file mode 100644 index 00000000000..948a36cff7a --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest.java @@ -0,0 +1,129 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v72; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.stream.Collectors; + +import org.assertj.core.groups.Tuple; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.api.utils.System2; +import org.sonar.api.utils.internal.TestSystem2; +import org.sonar.core.util.UuidFactory; +import org.sonar.core.util.UuidFactoryFast; +import org.sonar.db.CoreDbTester; + +import static java.util.stream.Collectors.toList; +import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.tuple; +import static org.junit.rules.ExpectedException.none; +import static org.sonar.db.CoreDbTester.createForSchema; + +public class PopulateUUIDOnUsersTest { + + private final static long PAST = 10_000_000_000L; + private static final long NOW = 50_000_000_000L; + private System2 system2 = new TestSystem2().setNow(NOW); + + private final static String NO_LOGIN = null; + private final static String NO_UUID = null; + + @Rule + public ExpectedException expectedException = none(); + + @Rule + public CoreDbTester db = createForSchema(PopulateUUIDOnUsersTest.class, "users.sql"); + + private UuidFactory uuidFactory = UuidFactoryFast.getInstance(); + + private PopulateUUIDOnUsers underTest = new PopulateUUIDOnUsers(db.database(), system2, uuidFactory); + + @Test + public void update_uuid_when_login_is_present() throws SQLException { + + String login1 = insertUser(NO_UUID, randomAlphanumeric(10)); + String login2 = insertUser(NO_UUID, randomAlphanumeric(10)); + String login3 = insertUser(NO_UUID, randomAlphanumeric(10)); + + underTest.execute(); + + assertUser( + tuple(login1, login1, PAST, NOW), + tuple(login2, login2, PAST, NOW), + tuple(login3, login3, PAST, NOW) + ); + } + + @Test + public void generate_random_uuid_when_login_is_null() throws SQLException { + insertUser(NO_UUID, NO_LOGIN); + insertUser(NO_UUID, NO_LOGIN); + insertUser(NO_UUID, NO_LOGIN); + + underTest.execute(); + + assertThat(new ArrayList<>(db.select("SELECT distinct UUID FROM USERS"))).hasSize(3); + } + + @Test + public void _do_nothing_when_uuid_is_already_present() throws SQLException { + String login1 = insertUser(NO_UUID, randomAlphanumeric(10)); + String login2 = insertUser("existing-uuid", randomAlphanumeric(10)); + + underTest.execute(); + + assertUser( + tuple(login1, login1, PAST, NOW), + tuple("existing-uuid", login2, PAST, PAST) + ); + } + + @Test + public void is_reentrant() throws SQLException { + String login1 = insertUser(NO_UUID, randomAlphanumeric(10)); + String login2 = insertUser("existing-uuid", randomAlphanumeric(10)); + + underTest.execute(); + underTest.execute(); + + assertUser( + tuple(login1, login1, PAST, NOW), + tuple("existing-uuid", login2, PAST, PAST) + ); + } + + private String insertUser(String uuid, String login) { + db.executeInsert("USERS", "UUID", uuid, "LOGIN", login, "IS_ROOT", false, "ONBOARDED", false, "CREATED_AT", PAST, "UPDATED_AT", PAST); + return login; + } + + private void assertUser(Tuple... expectedTuples) { + assertThat(db.select("SELECT LOGIN, UUID, CREATED_AT, UPDATED_AT FROM USERS") + .stream() + .map(map -> new Tuple(map.get("UUID"), map.get("LOGIN"), map.get("CREATED_AT"), map.get("UPDATED_AT"))) + .collect(toList())) + .containsExactlyInAnyOrder(expectedTuples); + } +} diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsers/users.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsers/users.sql new file mode 100644 index 00000000000..7788824d1bc --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/AddUUIDtoUsers/users.sql @@ -0,0 +1,22 @@ +CREATE TABLE "USERS" ( + "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), + "LOGIN" VARCHAR(255), + "NAME" VARCHAR(200), + "EMAIL" VARCHAR(100), + "CRYPTED_PASSWORD" VARCHAR(100), + "SALT" VARCHAR(40), + "HASH_METHOD" VARCHAR(10), + "ACTIVE" BOOLEAN DEFAULT TRUE, + "SCM_ACCOUNTS" VARCHAR(4000), + "EXTERNAL_IDENTITY" VARCHAR(255), + "EXTERNAL_IDENTITY_PROVIDER" VARCHAR(100), + "IS_ROOT" BOOLEAN NOT NULL, + "USER_LOCAL" BOOLEAN, + "ONBOARDED" BOOLEAN NOT NULL, + "CREATED_AT" BIGINT, + "UPDATED_AT" BIGINT, + "HOMEPAGE_TYPE" VARCHAR(40), + "HOMEPAGE_PARAMETER" VARCHAR(40) +); +CREATE UNIQUE INDEX "USERS_LOGIN" ON "USERS" ("LOGIN"); +CREATE INDEX "USERS_UPDATED_AT" ON "USERS" ("UPDATED_AT"); diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest/users.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest/users.sql new file mode 100644 index 00000000000..9f03d34955f --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v72/PopulateUUIDOnUsersTest/users.sql @@ -0,0 +1,23 @@ +CREATE TABLE "USERS" ( + "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), + "UUID" VARCHAR(40), + "LOGIN" VARCHAR(255), + "NAME" VARCHAR(200), + "EMAIL" VARCHAR(100), + "CRYPTED_PASSWORD" VARCHAR(100), + "SALT" VARCHAR(40), + "HASH_METHOD" VARCHAR(10), + "ACTIVE" BOOLEAN DEFAULT TRUE, + "SCM_ACCOUNTS" VARCHAR(4000), + "EXTERNAL_IDENTITY" VARCHAR(255), + "EXTERNAL_IDENTITY_PROVIDER" VARCHAR(100), + "IS_ROOT" BOOLEAN NOT NULL, + "USER_LOCAL" BOOLEAN, + "ONBOARDED" BOOLEAN NOT NULL, + "CREATED_AT" BIGINT, + "UPDATED_AT" BIGINT, + "HOMEPAGE_TYPE" VARCHAR(40), + "HOMEPAGE_PARAMETER" VARCHAR(40) +); +CREATE UNIQUE INDEX "USERS_LOGIN" ON "USERS" ("LOGIN"); +CREATE INDEX "USERS_UPDATED_AT" ON "USERS" ("UPDATED_AT"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/authentication/LocalAuthenticationTest.java b/server/sonar-server/src/test/java/org/sonar/server/authentication/LocalAuthenticationTest.java index 6ac43702ab6..eed583f2333 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/authentication/LocalAuthenticationTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/authentication/LocalAuthenticationTest.java @@ -29,11 +29,13 @@ import org.junit.rules.ExpectedException; import org.mindrot.jbcrypt.BCrypt; import org.sonar.db.DbTester; import org.sonar.db.user.UserDto; +import org.sonar.db.user.UserTesting; import org.sonar.server.authentication.event.AuthenticationEvent; import org.sonar.server.authentication.event.AuthenticationException; import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric; import static org.assertj.core.api.Assertions.assertThat; +import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonar.server.authentication.LocalAuthentication.HashMethod.BCRYPT; import static org.sonar.server.authentication.LocalAuthentication.HashMethod.SHA1; @@ -49,7 +51,7 @@ public class LocalAuthenticationTest { @Test public void incorrect_hash_should_throw_AuthenticationException() { - UserDto user = new UserDto() + UserDto user = newUserDto() .setHashMethod("ALGON2"); expectedException.expect(AuthenticationException.class); @@ -60,7 +62,7 @@ public class LocalAuthenticationTest { @Test public void null_hash_should_throw_AuthenticationException() { - UserDto user = new UserDto(); + UserDto user = newUserDto(); expectedException.expect(AuthenticationException.class); expectedException.expectMessage("null hash method"); @@ -72,7 +74,7 @@ public class LocalAuthenticationTest { public void authentication_with_bcrypt_with_correct_password_should_work() { String password = randomAlphanumeric(60); - UserDto user = new UserDto() + UserDto user = newUserDto() .setHashMethod(BCRYPT.name()) .setCryptedPassword(BCrypt.hashpw(password, BCrypt.gensalt(12))); @@ -87,7 +89,7 @@ public class LocalAuthenticationTest { RANDOM.nextBytes(saltRandom); String salt = DigestUtils.sha1Hex(saltRandom); - UserDto user = new UserDto() + UserDto user = newUserDto() .setHashMethod(SHA1.name()) .setCryptedPassword(DigestUtils.sha1Hex("--" + salt + "--" + password + "--")) .setSalt(salt); @@ -103,7 +105,7 @@ public class LocalAuthenticationTest { RANDOM.nextBytes(saltRandom); String salt = DigestUtils.sha1Hex(saltRandom); - UserDto user = new UserDto() + UserDto user = newUserDto() .setHashMethod(SHA1.name()) .setCryptedPassword(DigestUtils.sha1Hex("--" + salt + "--" + password + "--")) .setSalt(salt); @@ -120,8 +122,9 @@ public class LocalAuthenticationTest { RANDOM.nextBytes(saltRandom); String salt = DigestUtils.sha1Hex(saltRandom); - UserDto user = new UserDto() + UserDto user = newUserDto() .setHashMethod(SHA1.name()) + .setCryptedPassword(null) .setSalt(salt); expectedException.expect(AuthenticationException.class); @@ -134,7 +137,8 @@ public class LocalAuthenticationTest { public void authentication_with_sha1_with_empty_salt_should_throw_AuthenticationException() { String password = randomAlphanumeric(60); - UserDto user = new UserDto() + UserDto user = newUserDto() + .setSalt(null) .setHashMethod(SHA1.name()) .setCryptedPassword(DigestUtils.sha1Hex("--0242b0b4c0a93ddfe09dd886de50bc25ba000b51--" + password + "--")); @@ -148,7 +152,7 @@ public class LocalAuthenticationTest { public void authentication_with_bcrypt_with_incorrect_password_should_throw_AuthenticationException() { String password = randomAlphanumeric(60); - UserDto user = new UserDto() + UserDto user = newUserDto() .setHashMethod(BCRYPT.name()) .setCryptedPassword(BCrypt.hashpw(password, BCrypt.gensalt(12))); @@ -166,7 +170,7 @@ public class LocalAuthenticationTest { RANDOM.nextBytes(saltRandom); String salt = DigestUtils.sha1Hex(saltRandom); - UserDto user = new UserDto() + UserDto user = newUserDto() .setLogin("myself") .setHashMethod(SHA1.name()) .setCryptedPassword(DigestUtils.sha1Hex("--" + salt + "--" + password + "--")) diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java index 8bd4ed073ea..ccc3aff971a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionTest.java @@ -51,6 +51,7 @@ import org.sonar.db.protobuf.DbIssues; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleTesting; import org.sonar.db.user.UserDto; +import org.sonar.db.user.UserTesting; import org.sonar.server.es.EsTester; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.StartupIndexer; @@ -76,6 +77,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.groups.Tuple.tuple; import static org.sonar.api.web.UserRole.ISSUE_ADMIN; import static org.sonar.db.component.ComponentTesting.newFileDto; +import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_BRANCH; import static org.sonarqube.ws.client.issue.IssuesWsParameters.DEPRECATED_FACET_MODE_DEBT; import static org.sonarqube.ws.client.issue.IssuesWsParameters.FACET_MODE_EFFORT; @@ -183,8 +185,8 @@ public class SearchActionTest { @Test public void response_contains_all_fields_except_additional_fields() { - dbClient.userDao().insert(session, new UserDto().setLogin("simon").setName("Simon").setEmail("simon@email.com")); - dbClient.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); + db.users().insertUser(u -> u.setLogin("simon").setName("Simon").setEmail("simon@email.com")); + db.users().insertUser(u -> u.setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(otherOrganization2, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); @@ -280,8 +282,8 @@ public class SearchActionTest { @Test public void issue_with_comments() { - dbClient.userDao().insert(session, new UserDto().setLogin("john").setName("John")); - dbClient.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); + db.users().insertUser(u -> u.setLogin("john").setName("John")); + db.users().insertUser(u -> u.setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(otherOrganization2, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); @@ -316,8 +318,8 @@ public class SearchActionTest { @Test public void issue_with_comment_hidden() { - dbClient.userDao().insert(session, new UserDto().setLogin("john").setName("John").setEmail("john@email.com")); - dbClient.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); + db.users().insertUser(u -> u.setLogin("john").setName("John").setEmail("john@email.com")); + db.users().insertUser(u -> u.setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(otherOrganization1, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); @@ -351,8 +353,9 @@ public class SearchActionTest { @Test public void load_additional_fields() { - dbClient.userDao().insert(session, new UserDto().setLogin("simon").setName("Simon").setEmail("simon@email.com")); - dbClient.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); + db.users().insertUser(u -> u.setLogin("simon").setName("Simon").setEmail("simon@email.com")); + db.users().insertUser(u -> u.setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); + ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(otherOrganization2, "PROJECT_ID").setDbKey("PROJECT_KEY").setLanguage("java")); indexPermissions(); ComponentDto file = insertComponent(newFileDto(project, null, "FILE_ID").setDbKey("FILE_KEY").setLanguage("js")); @@ -373,8 +376,8 @@ public class SearchActionTest { @Test public void load_additional_fields_with_issue_admin_permission() { - dbClient.userDao().insert(session, new UserDto().setLogin("simon").setName("Simon").setEmail("simon@email.com")); - dbClient.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); + db.users().insertUser(u -> u.setLogin("simon").setName("Simon").setEmail("simon@email.com")); + db.users().insertUser(u -> u.setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com")); ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(otherOrganization1, "PROJECT_ID").setDbKey("PROJECT_KEY").setLanguage("java")); grantPermissionToAnyone(project, ISSUE_ADMIN); indexPermissions(); @@ -567,7 +570,7 @@ public class SearchActionTest { @Test public void filter_by_assigned_to_me() { - dbClient.userDao().insert(session, new UserDto().setLogin("john").setName("John").setEmail("john@email.com")); + dbClient.userDao().insert(session, newUserDto().setLogin("john").setName("John").setEmail("john@email.com")); ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(defaultOrganization, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); @@ -641,7 +644,7 @@ public class SearchActionTest { @Test public void assigned_to_me_facet_is_sticky_relative_to_assignees() { - dbClient.userDao().insert(session, new UserDto().setLogin("alice").setName("Alice").setEmail("alice@email.com")); + dbClient.userDao().insert(session, newUserDto().setLogin("alice").setName("Alice").setEmail("alice@email.com")); ComponentDto project = insertComponent(ComponentTesting.newPublicProjectDto(otherOrganization2, "PROJECT_ID").setDbKey("PROJECT_KEY")); indexPermissions(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java index 962693cc967..495a4c15c10 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/CreateActionTest.java @@ -41,6 +41,7 @@ import org.sonar.db.metric.MetricTesting; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.permission.OrganizationPermission; import org.sonar.db.user.UserDto; +import org.sonar.db.user.UserTesting; import org.sonar.server.component.TestComponentFinder; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.BadRequestException; @@ -59,6 +60,7 @@ import static org.sonar.api.measures.Metric.ValueType.INT; import static org.sonar.api.measures.Metric.ValueType.LEVEL; import static org.sonar.api.measures.Metric.ValueType.STRING; import static org.sonar.api.measures.Metric.ValueType.WORK_DUR; +import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonar.server.util.TypeValidationsTesting.newFullTypeValidations; public class CreateActionTest { @@ -85,7 +87,7 @@ public class CreateActionTest { ws = new WsTester(new CustomMeasuresWs(new CreateAction(dbClient, userSession, System2.INSTANCE, new CustomMeasureValidator(newFullTypeValidations()), new CustomMeasureJsonWriter(new UserJsonWriter(userSession)), TestComponentFinder.from(db)))); - db.getDbClient().userDao().insert(dbSession, new UserDto() + db.getDbClient().userDao().insert(dbSession, newUserDto() .setLogin("login") .setName("Login") .setEmail("login@login.com") diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java index d57eaf6b254..dba9e84de30 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/SearchActionTest.java @@ -39,6 +39,7 @@ import org.sonar.db.component.SnapshotTesting; import org.sonar.db.measure.custom.CustomMeasureDto; import org.sonar.db.metric.MetricDto; import org.sonar.db.user.UserDto; +import org.sonar.db.user.UserTesting; import org.sonar.server.component.TestComponentFinder; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; @@ -50,6 +51,7 @@ import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.db.measure.custom.CustomMeasureTesting.newCustomMeasureDto; import static org.sonar.db.metric.MetricTesting.newMetricDto; +import static org.sonar.db.user.UserTesting.newUserDto; public class SearchActionTest { @@ -78,7 +80,7 @@ public class SearchActionTest { defaultProject = insertDefaultProject(); userSessionRule.logIn().addProjectPermission(UserRole.ADMIN, defaultProject); - db.getDbClient().userDao().insert(dbSession, new UserDto() + db.getDbClient().userDao().insert(dbSession, newUserDto() .setLogin("login") .setName("Login") .setEmail("login@login.com") diff --git a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java index b065df28f12..64a48357f2e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/measure/custom/ws/UpdateActionTest.java @@ -37,6 +37,7 @@ import org.sonar.db.metric.MetricDto; import org.sonar.db.metric.MetricTesting; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.UserDto; +import org.sonar.db.user.UserTesting; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ServerException; @@ -50,6 +51,7 @@ import static org.assertj.core.data.Offset.offset; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.sonar.db.measure.custom.CustomMeasureTesting.newCustomMeasureDto; +import static org.sonar.db.user.UserTesting.newUserDto; import static org.sonar.server.measure.custom.ws.UpdateAction.PARAM_DESCRIPTION; import static org.sonar.server.measure.custom.ws.UpdateAction.PARAM_ID; import static org.sonar.server.measure.custom.ws.UpdateAction.PARAM_VALUE; @@ -76,7 +78,7 @@ public class UpdateActionTest { ws = new WsTester(new CustomMeasuresWs(new UpdateAction(dbClient, userSessionRule, system, validator, new CustomMeasureJsonWriter(new UserJsonWriter(userSessionRule))))); - db.getDbClient().userDao().insert(dbSession, new UserDto() + db.getDbClient().userDao().insert(dbSession, newUserDto() .setLogin("login") .setName("Login") .setEmail("login@login.com") diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/DeprecatedUserFinderTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/DeprecatedUserFinderTest.java index 088476f1206..f38fa07d8d4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/DeprecatedUserFinderTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/DeprecatedUserFinderTest.java @@ -19,40 +19,38 @@ */ package org.sonar.server.user; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.sonar.api.database.model.User; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; +import org.sonar.db.user.UserDto; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; - +import static org.sonar.db.DbTester.create; public class DeprecatedUserFinderTest { @Rule - public DbTester dbTester = DbTester.create(System2.INSTANCE); + public DbTester dbTester = create(System2.INSTANCE); private DeprecatedUserFinder underTest = new DeprecatedUserFinder(dbTester.getDbClient()); - - @Before - public void init() { - dbTester.prepareDbUnit(DeprecatedUserFinderTest.class, "fixture.xml"); - } @Test public void shouldFindUserByLogin() { - - User user = underTest.findByLogin("simon"); - assertThat(user.getId(), is(1)); + + UserDto simon = dbTester.users().insertUser(u -> u.setLogin("simon").setName("Simon Brandhof").setEmail("simon.brandhof@sonarsource.com")); + UserDto evgeny = dbTester.users().insertUser(u -> u.setLogin("godin").setName("Evgeny Mandrikov").setEmail("evgeny.mandrikov@sonarsource.com")); + + User user = underTest.findByLogin(simon.getLogin()); + assertThat(user.getId(), is(simon.getId())); assertThat(user.getLogin(), is("simon")); assertThat(user.getName(), is("Simon Brandhof")); assertThat(user.getEmail(), is("simon.brandhof@sonarsource.com")); - user = underTest.findByLogin("godin"); - assertThat(user.getId(), is(2)); + user = underTest.findByLogin(evgeny.getLogin()); + assertThat(user.getId(), is(evgeny.getId())); assertThat(user.getLogin(), is("godin")); assertThat(user.getName(), is("Evgeny Mandrikov")); assertThat(user.getEmail(), is("evgeny.mandrikov@sonarsource.com")); @@ -63,19 +61,22 @@ public class DeprecatedUserFinderTest { @Test public void shouldFindUserById() { - User user = underTest.findById(1); - assertThat(user.getId(), is(1)); + UserDto simon = dbTester.users().insertUser(u -> u.setLogin("simon").setName("Simon Brandhof").setEmail("simon.brandhof@sonarsource.com")); + UserDto evgeny = dbTester.users().insertUser(u -> u.setLogin("godin").setName("Evgeny Mandrikov").setEmail("evgeny.mandrikov@sonarsource.com")); + + User user = underTest.findById(simon.getId()); + assertThat(user.getId(), is(simon.getId())); assertThat(user.getLogin(), is("simon")); assertThat(user.getName(), is("Simon Brandhof")); assertThat(user.getEmail(), is("simon.brandhof@sonarsource.com")); - user = underTest.findById(2); - assertThat(user.getId(), is(2)); + user = underTest.findById(evgeny.getId()); + assertThat(user.getId(), is(evgeny.getId())); assertThat(user.getLogin(), is("godin")); assertThat(user.getName(), is("Evgeny Mandrikov")); assertThat(user.getEmail(), is("evgeny.mandrikov@sonarsource.com")); - user = underTest.findById(3); + user = underTest.findById(999); assertThat(user, nullValue()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/SearchActionTest.java index 1b30f2fe0d8..8659995132f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/SearchActionTest.java @@ -263,7 +263,7 @@ public class SearchActionTest { public void only_return_login_and_name_when_not_logged() throws Exception { userSession.anonymous(); - dbClient.userDao().insert(dbSession, UserTesting.newUserDto("john", "John", "john@email.com")); + dbClient.userDao().insert(dbSession, newUserDto("john", "John", "john@email.com")); dbSession.commit(); userIndexer.indexOnStartup(null); @@ -288,7 +288,7 @@ public class SearchActionTest { String name = String.format("User %d", index); List scmAccounts = singletonList(String.format("user-%d", index)); - UserDto userDto = dbClient.userDao().insert(dbSession, new UserDto() + UserDto userDto = dbClient.userDao().insert(dbSession, newUserDto() .setActive(true) .setEmail(email) .setLogin(login) diff --git a/server/sonar-server/src/test/resources/org/sonar/server/user/DeprecatedUserFinderTest/fixture.xml b/server/sonar-server/src/test/resources/org/sonar/server/user/DeprecatedUserFinderTest/fixture.xml deleted file mode 100644 index 61028358669..00000000000 --- a/server/sonar-server/src/test/resources/org/sonar/server/user/DeprecatedUserFinderTest/fixture.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - -- 2.39.5