]> source.dussan.org Git - sonarqube.git/commitdiff
Fix cache of MyBatis configuration extensions in unit tests
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Fri, 27 Nov 2020 02:32:28 +0000 (20:32 -0600)
committersonartech <sonartech@sonarsource.com>
Mon, 30 Nov 2020 20:07:06 +0000 (20:07 +0000)
The cache used a map with an ineffective key, that changed in every call. It now depends on the set of extensions being loaded.

server/sonar-db-dao/src/testFixtures/java/org/sonar/db/DbTester.java
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/TestDbImpl.java

index 33c99ce4421228694af742d9f8f0bba667199420..bab3211c8816a9517cf89020db15640cebe21e0a 100644 (file)
@@ -28,7 +28,6 @@ import java.util.Map;
 import java.util.stream.Stream;
 import javax.annotation.Nullable;
 import org.apache.commons.dbcp2.BasicDataSource;
-import org.apache.commons.lang.StringUtils;
 import org.picocontainer.containers.TransientPicoContainer;
 import org.sonar.api.utils.System2;
 import org.sonar.core.util.SequenceUuidFactory;
@@ -174,11 +173,6 @@ public class DbTester extends AbstractDbTester<TestDbImpl> {
     return this;
   }
 
-  public DbTester enableOrganizations() {
-    properties().insertInternal("organization.enabled", "true");
-    return this;
-  }
-
   @Override
   protected void before() {
     db.start();
@@ -199,10 +193,6 @@ public class DbTester extends AbstractDbTester<TestDbImpl> {
     }
   }
 
-  public boolean hasDefaultOrganization() {
-    return defaultOrganization != null;
-  }
-
   public OrganizationDto getDefaultOrganization() {
     checkState(defaultOrganization != null, "Default organization has not been created");
     return defaultOrganization;
index a8612bcbb2524b8119341e05db481fbcc2941b95..1f7f2e082aeef5be04e95ff8cc7c034357c31f1f 100644 (file)
  */
 package org.sonar.db;
 
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 import javax.annotation.Nullable;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.StringUtils;
@@ -35,7 +38,7 @@ import org.sonar.process.logging.LogbackHelper;
 class TestDbImpl extends CoreTestDb {
   private static TestDbImpl defaultSchemaBaseTestDb;
   // instantiating MyBatis objects is costly => we cache them for default schema
-  private static final Map<MyBatisConfExtension[], TestDbImpl> defaultSchemaTestDbsWithExtensions = new HashMap<>();
+  private static final Map<List<String>, TestDbImpl> defaultSchemaTestDbsWithExtensions = new HashMap<>();
 
   private boolean isDefault;
   private MyBatis myBatis;
@@ -86,15 +89,19 @@ class TestDbImpl extends CoreTestDb {
   }
 
   static TestDbImpl create(@Nullable String schemaPath, MyBatisConfExtension... confExtensions) {
-    MyBatisConfExtension[] extensionArray = confExtensions.length == 0 ? null : confExtensions;
     if (schemaPath == null) {
       if (defaultSchemaBaseTestDb == null) {
         defaultSchemaBaseTestDb = new TestDbImpl(null);
       }
-      if (extensionArray != null) {
+      if (confExtensions.length > 0) {
+        List<String> key = Arrays.stream(confExtensions)
+          .flatMap(MyBatisConfExtension::getMapperClasses)
+          .map(Class::getName)
+          .sorted()
+          .collect(Collectors.toList());
         return defaultSchemaTestDbsWithExtensions.computeIfAbsent(
-          extensionArray,
-          extensions -> new TestDbImpl(defaultSchemaBaseTestDb, newMyBatis(defaultSchemaBaseTestDb.getDatabase(), extensions)));
+          key,
+          k -> new TestDbImpl(defaultSchemaBaseTestDb, newMyBatis(defaultSchemaBaseTestDb.getDatabase(), confExtensions)));
       }
       return defaultSchemaBaseTestDb;
     }