You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UpdateChangeDataOfQProfileChangesTest.java 3.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2020 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.platform.db.migration.version.v86;
  21. import java.sql.SQLException;
  22. import org.junit.Rule;
  23. import org.junit.Test;
  24. import org.sonar.core.util.Uuids;
  25. import org.sonar.db.CoreDbTester;
  26. import org.sonar.server.platform.db.migration.step.DataChange;
  27. import static org.assertj.core.api.Assertions.assertThat;
  28. public class UpdateChangeDataOfQProfileChangesTest {
  29. @Rule
  30. public CoreDbTester db = CoreDbTester.createForSchema(UpdateChangeDataOfQProfileChangesTest.class, "schema.sql");
  31. private DataChange underTest = new UpdateChangeDataOfQProfileChanges(db.database());
  32. @Test
  33. public void change_ruleId_to_ruleUuid() throws SQLException {
  34. insertQProfileChanges("key-1", "severity=MAJOR;ruleUuid=AXJVoXWDOFGkZYIS4z4D");
  35. insertQProfileChanges("key-2", "severity=MAJOR;ruleId=12915");
  36. insertQProfileChanges("key-3", "severity=MAJOR;ruleId=12915;something");
  37. insertQProfileChanges("key-4", "ruleId=12915;something");
  38. underTest.execute();
  39. assertThatQProfileMigrated("key-1", "severity=MAJOR;ruleUuid=AXJVoXWDOFGkZYIS4z4D");
  40. assertThatQProfileMigrated("key-2", "severity=MAJOR;ruleUuid=12915");
  41. assertThatQProfileMigrated("key-3", "severity=MAJOR;ruleUuid=12915;something");
  42. assertThatQProfileMigrated("key-4", "ruleUuid=12915;something");
  43. }
  44. @Test
  45. public void migration_is_reentrant() throws SQLException {
  46. insertQProfileChanges("key-1", "severity=MAJOR;ruleUuid=AXJVoXWDOFGkZYIS4z4D");
  47. insertQProfileChanges("key-2", "severity=MAJOR;ruleId=12915");
  48. insertQProfileChanges("key-3", "severity=MAJOR;ruleId=12915;something");
  49. insertQProfileChanges("key-4", "ruleId=12915;something");
  50. underTest.execute();
  51. // re-entrant
  52. underTest.execute();
  53. assertThatQProfileMigrated("key-1", "severity=MAJOR;ruleUuid=AXJVoXWDOFGkZYIS4z4D");
  54. assertThatQProfileMigrated("key-2", "severity=MAJOR;ruleUuid=12915");
  55. assertThatQProfileMigrated("key-3", "severity=MAJOR;ruleUuid=12915;something");
  56. assertThatQProfileMigrated("key-4", "ruleUuid=12915;something");
  57. }
  58. private void assertThatQProfileMigrated(String key, String changeData) {
  59. assertThat(db.select("select qpc.kee, qpc.change_data "
  60. + "from qprofile_changes qpc where qpc.kee = '" + key + "'").stream().findFirst())
  61. .isNotEmpty()
  62. .hasValueSatisfying(stringObjectMap -> assertThat(stringObjectMap)
  63. .extractingByKeys("KEE", "CHANGE_DATA")
  64. .contains(key, changeData));
  65. }
  66. private void insertQProfileChanges(String kee, String changeData) {
  67. db.executeInsert("qprofile_changes",
  68. "kee", kee,
  69. "rules_profile_uuid", Uuids.createFast(),
  70. "change_type", "any",
  71. "change_data", changeData,
  72. "created_at", System.currentTimeMillis());
  73. }
  74. }