]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5237 - Moved Latching into Queue. Defaults to SYNCH
authorStephane Gamard <stephane.gamard@searchbox.com>
Wed, 30 Apr 2014 08:30:49 +0000 (10:30 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Wed, 30 Apr 2014 08:31:17 +0000 (10:31 +0200)
28 files changed:
sonar-core/src/main/java/org/sonar/core/cluster/NullQueue.java
sonar-core/src/main/java/org/sonar/core/cluster/WorkQueue.java
sonar-core/src/main/java/org/sonar/core/persistence/DbSession.java
sonar-core/src/test/java/org/sonar/core/persistence/AbstractDaoTestCase.java
sonar-core/src/test/java/org/sonar/core/persistence/TestDatabase.java
sonar-server/src/main/java/org/sonar/server/cluster/LocalNonBlockingWorkQueue.java
sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/empty.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert-result.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_all-result.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_parameter-result.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_parameter.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectAll.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectById.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectNonManual.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectParameters.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_name.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_rule_key.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_sub_characteristic_id.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_enables_and_non_manual.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_parameters_by_rule_id.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_parameters_by_rule_ids.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_tags_by_rule_id.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_tags_by_rule_ids.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update-result.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update_parameter-result.xml [new file with mode: 0644]
sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update_parameter.xml [new file with mode: 0644]

index 4e1aebf00439e39d7c720204acfe90eca54d83c3..218685d78dc8396f2b38bfd91c5e771e9096b039 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.core.cluster;
 
+import java.util.Collection;
+
 
 
 public class NullQueue implements WorkQueue {
@@ -29,7 +31,7 @@ public class NullQueue implements WorkQueue {
   }
 
   @Override
-  public void enqueue(Iterable<QueueAction> actions) {
+  public void enqueue(Collection<QueueAction> actions) {
 
   }
 }
index c75d5b38e3b04e03405deccd617cd3f5db5e458f..b9f6b3c0db1a734a7b72da3f738fed0135a94a89 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.core.cluster;
 
+import java.util.Collection;
+
 
 
 
@@ -26,7 +28,7 @@ public interface WorkQueue {
 
   void enqueue(QueueAction action);
 
-  void enqueue(Iterable<QueueAction> actions);
+  void enqueue(Collection<QueueAction> actions);
 
   /* This is because of core vs server packages... */
 //  void enqueue(ClusterAction.Type type, ClusterAction.Method method, String ref, Serializable key);
index 3e9ee5a996c0e61f9fe17bb50b84824a7b792b2f..4b5dcaa89b0b64f7f79cad973dc59eb594701abc 100644 (file)
@@ -54,29 +54,16 @@ public class DbSession implements SqlSession {
     this.actions.add(action);
   }
 
-  private void enqueueActions(){
-    CountDownLatch latch = new CountDownLatch(actions.size());
-    for(QueueAction action:actions){
-      action.setLatch(latch);
-      queue.enqueue(action);
-    }
-    try {
-      latch.await();
-    } catch (InterruptedException e) {
-      LOG.error("ES update has been interrupted: {}",e.getMessage());
-    }
-  }
-
   @Override
   public void commit() {
     session.commit();
-    enqueueActions();
+    queue.enqueue(actions);
   }
 
   @Override
   public void commit(boolean force) {
     session.commit(force);
-    enqueueActions();
+    queue.enqueue(actions);
   }
 
   /**
index 26843e8e90d13f392cebd9364ee34e4ade0c937d..f4db47a783ee20a777040bf3d86fee0a88b81586 100644 (file)
@@ -19,8 +19,9 @@
  */
 package org.sonar.core.persistence;
 
-import org.sonar.core.cluster.WorkQueue;
+import org.sonar.core.cluster.NullQueue;
 
+import org.sonar.core.cluster.WorkQueue;
 import com.google.common.collect.Maps;
 import com.google.common.io.Closeables;
 import org.apache.commons.io.FileUtils;
@@ -56,7 +57,6 @@ import java.util.Map;
 import java.util.Properties;
 
 import static org.mockito.Mockito.mock;
-
 import static org.junit.Assert.fail;
 
 public abstract class AbstractDaoTestCase {
@@ -65,7 +65,7 @@ public abstract class AbstractDaoTestCase {
   private static DatabaseCommands databaseCommands;
   private static IDatabaseTester databaseTester;
   private static MyBatis myBatis;
-  private WorkQueue queue = mock(WorkQueue.class);
+  private WorkQueue queue = new NullQueue();
 
 
   @Before
index a8c5dd16d5caeafcc7f8f7afa2b9c1726893ba2a..6f9941d0966250ed060e4187d37ffcb8ff4ee492 100644 (file)
@@ -19,8 +19,9 @@
  */
 package org.sonar.core.persistence;
 
-import org.sonar.core.cluster.WorkQueue;
+import org.sonar.core.cluster.NullQueue;
 
+import org.sonar.core.cluster.WorkQueue;
 import com.google.common.collect.Maps;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.dbutils.DbUtils;
@@ -65,7 +66,6 @@ import java.util.Map;
 import java.util.Properties;
 
 import static org.mockito.Mockito.mock;
-
 import static org.junit.Assert.fail;
 
 /**
@@ -80,7 +80,7 @@ public class TestDatabase extends ExternalResource {
   private DatabaseCommands commands;
   private IDatabaseTester tester;
   private MyBatis myBatis;
-  private WorkQueue queue = mock(WorkQueue.class);
+  private WorkQueue queue = new NullQueue();
   private String schemaPath = null;
 
   public TestDatabase schema(Class baseClass, String filename) {
index 8afcdb10c647a5a8d7249d03c85dd34718dc84e0..c11204912c73c36918fd337769fcc78e735020dc 100644 (file)
  */
 package org.sonar.server.cluster;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.sonar.api.ServerComponent;
 import org.sonar.core.cluster.QueueAction;
 import org.sonar.core.cluster.WorkQueue;
 
+import java.util.Collection;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 
 public class LocalNonBlockingWorkQueue extends LinkedBlockingQueue<Runnable>
-  implements ServerComponent, WorkQueue{
+  implements ServerComponent, WorkQueue {
+
+  private static final Logger LOG = LoggerFactory.getLogger(LocalNonBlockingWorkQueue.class);
 
-  public LocalNonBlockingWorkQueue(){
+  public LocalNonBlockingWorkQueue() {
     super();
   }
 
   @Override
   public void enqueue(QueueAction action) {
+    CountDownLatch latch = new CountDownLatch(1);
+    action.setLatch(latch);
     try {
-      this.offer(action, 1000,TimeUnit.SECONDS);
+      this.offer(action, 1000, TimeUnit.SECONDS);
+      latch.await();
     } catch (InterruptedException e) {
-      //TODO throw a runtime error here.
+      LOG.error("ES update has been interrupted: {}", e.getMessage());
     }
   }
 
   @Override
-  public void enqueue(Iterable<QueueAction> actions) {
-    for (QueueAction action : actions) {
-      enqueue(action);
+  public void enqueue(Collection<QueueAction> actions) {
+    CountDownLatch latch = new CountDownLatch(actions.size());
+    try {
+      for (QueueAction action : actions) {
+        action.setLatch(latch);
+        this.offer(action, 1000, TimeUnit.SECONDS);
+      }
+      latch.await();
+    } catch (InterruptedException e) {
+      LOG.error("ES update has been interrupted: {}", e.getMessage());
     }
   }
 }
index 4b3521cac18255376dc2b92e6648b7aea3f36661..28bda726b6bf1791abb4c91f262d3aed14392a9d 100644 (file)
@@ -176,7 +176,7 @@ class ServerComponents {
       System2.INSTANCE,
 
       /* new RuleDao working with ES */
-      RuleDao.class
+      org.sonar.server.rule2.RuleDao.class
     ));
     components.addAll(CorePropertyDefinitions.all());
     components.addAll(DatabaseMigrations.CLASSES);
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/empty.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/empty.xml
new file mode 100644 (file)
index 0000000..871dedc
--- /dev/null
@@ -0,0 +1,3 @@
+<dataset>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert-result.xml
new file mode 100644 (file)
index 0000000..e7e1d53
--- /dev/null
@@ -0,0 +1,33 @@
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<dataset>
+
+  <rules id="1" plugin_rule_key="NewRuleKey" plugin_name="plugin" name="new name" description="new description" status="DEPRECATED"
+         plugin_config_key="NewConfigKey" priority="0" cardinality="MULTIPLE" language="dart" created_at="2013-12-16" updated_at="2013-12-17" parent_id="3"
+         note_data="[null]" note_user_login="[null]" note_created_at="[null]" note_updated_at="[null]"
+         characteristic_id="100" default_characteristic_id="101"
+         remediation_function="linear" default_remediation_function="linear_offset"
+         remediation_coeff="1h" default_remediation_coeff="5d"
+         remediation_offset="5min" default_remediation_offset="10h"
+         effort_to_fix_description="squid.S115.effortToFix"
+      />
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_all-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_all-result.xml
new file mode 100644 (file)
index 0000000..878e3d5
--- /dev/null
@@ -0,0 +1,43 @@
+<!--
+  ~ SonarQube, open source software quality management tool.
+  ~ Copyright (C) 2008-2014 SonarSource
+  ~ mailto:contact AT sonarsource DOT com
+  ~
+  ~ SonarQube 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.
+  ~
+  ~ SonarQube 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.
+  -->
+
+<dataset>
+
+  <rules id="1" plugin_rule_key="NewRuleKey" plugin_name="plugin" name="new name" description="new description" status="DEPRECATED"
+         plugin_config_key="NewConfigKey" priority="0" cardinality="MULTIPLE" language="dart" created_at="2013-12-16" updated_at="2013-12-17" parent_id="3"
+         note_data="[null]" note_user_login="[null]" note_created_at="[null]" note_updated_at="[null]"
+         characteristic_id="100" default_characteristic_id="101"
+         remediation_function="linear" default_remediation_function="linear_offset"
+         remediation_coeff="1h" default_remediation_coeff="5d"
+         remediation_offset="5min" default_remediation_offset="10h"
+         effort_to_fix_description="squid.S115.effortToFix"
+      />
+
+  <rules id="2" plugin_rule_key="NewRuleKey2" plugin_name="plugin2" name="new name2" description="new description2" status="BETA"
+         plugin_config_key="NewConfigKey2" priority="2" cardinality="SINGLE" language="js" created_at="2013-12-14" updated_at="2013-12-15" parent_id="[null]"
+         note_data="[null]" note_user_login="[null]" note_created_at="[null]" note_updated_at="[null]"
+         characteristic_id="102" default_characteristic_id="103"
+         remediation_function="linear_offset" default_remediation_function="linear"
+         remediation_coeff="5d" default_remediation_coeff="1h"
+         remediation_offset="10h" default_remediation_offset="5min"
+         effort_to_fix_description="squid.S115.effortToFix2"
+      />
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_parameter-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_parameter-result.xml
new file mode 100644 (file)
index 0000000..5208b7a
--- /dev/null
@@ -0,0 +1,3 @@
+<dataset>
+  <rules_parameters id="1" rule_id="1" name="max" param_type="INTEGER" default_value="30" description="My Parameter"/>
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_parameter.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/insert_parameter.xml
new file mode 100644 (file)
index 0000000..871dedc
--- /dev/null
@@ -0,0 +1,3 @@
+<dataset>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectAll.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectAll.xml
new file mode 100644 (file)
index 0000000..04f7a7f
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"
+    note_data="Rule note with accents éèà" note_user_login="polop.palap" note_created_at="2013-12-25"
+    characteristic_id="100" default_characteristic_id="101"
+    remediation_function="linear" default_remediation_function="linear_offset"
+    remediation_coeff="1h" default_remediation_coeff="5d"
+    remediation_offset="5min" default_remediation_offset="10h"
+    effort_to_fix_description="squid.S115.effortToFix"
+  />
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectById.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectById.xml
new file mode 100644 (file)
index 0000000..dc8fe1e
--- /dev/null
@@ -0,0 +1,6 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidComparison" plugin_name="checkstyle" name="Avoid Comparison" description="Should avoid ==" status="READY"/>
+  <rules id="2" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"/>
+
+</dataset>
\ No newline at end of file
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectNonManual.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectNonManual.xml
new file mode 100644 (file)
index 0000000..f5b69dc
--- /dev/null
@@ -0,0 +1,6 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"/>
+  <rules id="2" plugin_rule_key="AvoidNull" plugin_name="manual" name="Manual Rule" description="Should not appear" status="READY"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectParameters.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/selectParameters.xml
new file mode 100644 (file)
index 0000000..9753a48
--- /dev/null
@@ -0,0 +1,6 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"/>
+  <rules_parameters id="1" rule_id="1" name="myParameter" param_type="plop" default_value="plouf" description="My Parameter"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_name.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_name.xml
new file mode 100644 (file)
index 0000000..dc8fe1e
--- /dev/null
@@ -0,0 +1,6 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidComparison" plugin_name="checkstyle" name="Avoid Comparison" description="Should avoid ==" status="READY"/>
+  <rules id="2" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"/>
+
+</dataset>
\ No newline at end of file
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_rule_key.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_rule_key.xml
new file mode 100644 (file)
index 0000000..dc8fe1e
--- /dev/null
@@ -0,0 +1,6 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidComparison" plugin_name="checkstyle" name="Avoid Comparison" description="Should avoid ==" status="READY"/>
+  <rules id="2" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"/>
+
+</dataset>
\ No newline at end of file
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_sub_characteristic_id.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_by_sub_characteristic_id.xml
new file mode 100644 (file)
index 0000000..a6677ee
--- /dev/null
@@ -0,0 +1,61 @@
+<dataset>
+
+  <!-- Root characteristic -->
+  <characteristics id="1" kee="PORTABILITY" name="Portability" parent_id="[null]" characteristic_order="1"
+                   enabled="[true]"
+                   created_at="2013-11-20" updated_at="2013-11-22"/>
+
+  <!-- Sub characteristics of root characteristic -->
+  <characteristics id="2" kee="COMPILER_RELATED_PORTABILITY" name="Compiler related portability" parent_id="1" rcharacteristic_order="[null]"
+                   enabled="[true]"
+                   created_at="2013-11-20" updated_at="2013-11-22"/>
+  <characteristics id="3" kee="HARDWARE_RELATED_PORTABILITY" name="Hardware related portability " parent_id="1" rcharacteristic_order="[null]"
+                   enabled="[true]"
+                   created_at="2013-11-20" updated_at="2013-11-22"/>
+
+  <!-- Disabled root characteristic -->
+  <characteristics id="10" kee="DISABLED_ROOT_CHARACTERISTIC" name="Disabled root characteristic" parent_id="[null]" characteristic_order="2"
+                   enabled="[false]"
+                   created_at="2013-11-20" updated_at="2013-11-22"/>
+
+  <!-- Disabled characteristic -->
+  <characteristics id="11" kee="DISABLED_CHARACTERISTIC" name="Disabled characteristic" parent_id="10" characteristic_order="[null]"
+                   enabled="[false]"
+                   created_at="2013-11-20" updated_at="2013-11-22"/>
+
+  <!-- Rule linked to a sub characteristic -->
+  <rules id="1" plugin_rule_key="UselessImportCheck" plugin_name="squid" name="UselessImportCheck" description="Useless imports should be removed" status="READY"
+         characteristic_id="2" default_characteristic_id="50"
+         remediation_function="LINEAR_OFFSET" default_remediation_function="LINEAR_OFFSET"
+         remediation_coeff="5d" default_remediation_coeff="5d"
+         remediation_offset="10h" default_remediation_offset="10h" updated_at="2014-02-19"/>
+
+  <!-- Rule linked to a sub characteristic -->
+  <rules id="2" plugin_rule_key="LeftCurlyBraceStartLineCheck" plugin_name="squid" name="LeftCurlyBraceStartLineCheck" description="Left curly braces should be located at the beginning of lines of code" status="READY"
+         characteristic_id="3" default_characteristic_id="50"
+         remediation_function="LINEAR_OFFSET" default_remediation_function="LINEAR_OFFSET"
+         remediation_coeff="5d" default_remediation_coeff="5d"
+         remediation_offset="10h" default_remediation_offset="10h" updated_at="2014-02-19"/>
+
+  <!-- Rule linked to a disabled sub characteristic -> should never be returned -->
+  <rules id="3" plugin_rule_key="CallToFileDeleteOnExitMethod" plugin_name="squid" name="CallToFileDeleteOnExitMethod" description="CallToFileDeleteOnExitMethod" status="READY"
+         characteristic_id="11" default_characteristic_id="50"
+         remediation_function="LINEAR" default_remediation_function="LINEAR_OFFSET"
+         remediation_coeff="5d" default_remediation_coeff="5d"
+         remediation_offset="[null]" default_remediation_offset="10h" updated_at="2014-02-19"/>
+
+  <!-- Removed rule linked to one enable sub characteristic -->
+  <rules id="4" plugin_rule_key="ObjectFinalizeOverridenCallsSuperFinalizeCheck" plugin_name="squid" name="ObjectFinalizeOverridenCallsSuperFinalizeCheck" description="super.finalize() should be called at the end of Object.finalize() implementations" status="REMOVED"
+         characteristic_id="3" default_characteristic_id="50"
+         remediation_function="LINEAR" default_remediation_function="LINEAR_OFFSET"
+         remediation_coeff="5d" default_remediation_coeff="5min"
+         remediation_offset="[null]" default_remediation_offset="10h" updated_at="2014-02-19"/>
+
+  <!-- Rule linked to a sub characteristic, but only default characteristic is linked  -->
+  <rules id="5" plugin_rule_key="RightCurlyBraceStartLineCheck" plugin_name="squid" name="RightCurlyBraceStartLineCheck" description="Right curly braces should be located at the beginning of lines of code" status="READY"
+         characteristic_id="[null]" default_characteristic_id="3"
+         remediation_function="[null]" default_remediation_function="LINEAR"
+         remediation_coeff="[null]" default_remediation_coeff="5d"
+         remediation_offset="[null]" default_remediation_offset="[null]" updated_at="2014-02-19"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_enables_and_non_manual.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_enables_and_non_manual.xml
new file mode 100644 (file)
index 0000000..b29914e
--- /dev/null
@@ -0,0 +1,27 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"
+         note_data="Rule note with accents éèà" note_user_login="polop.palap" note_created_at="2013-12-25"
+         characteristic_id="100" default_characteristic_id="101"
+         remediation_function="LINEAR" default_remediation_function="LINEAR_OFFSET"
+         remediation_coeff="1h" default_remediation_coeff="5d"
+         remediation_offset="5min" default_remediation_offset="10h"
+         effort_to_fix_description="squid.S115.effortToFix"/>
+
+  <rules id="2" plugin_rule_key="AvoidNull" plugin_name="squid" name="Avoid Null" description="Should avoid NULL" status="REMOVED"
+         note_data="[null]" note_user_login="[null]" note_created_at="[null]"
+         characteristic_id="[null]" default_characteristic_id="[null]"
+         remediation_function="[null]" default_remediation_function="[null]"
+         remediation_coeff="[null]" default_remediation_coeff="[null]"
+         remediation_offset="[null]" default_remediation_offset="[null]"
+         effort_to_fix_description="[null]"/>
+
+  <rules id="3" plugin_rule_key="AvoidNull" plugin_name="manual" name="Manual Rule" description="Should not appear" status="READY"
+         note_data="[null]" note_user_login="[null]" note_created_at="[null]"
+         characteristic_id="[null]" default_characteristic_id="[null]"
+         remediation_function="[null]" default_remediation_function="[null]"
+         remediation_coeff="[null]" default_remediation_coeff="[null]"
+         remediation_offset="[null]" default_remediation_offset="[null]"
+         effort_to_fix_description="[null]"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_parameters_by_rule_id.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_parameters_by_rule_id.xml
new file mode 100644 (file)
index 0000000..3b21b8a
--- /dev/null
@@ -0,0 +1,8 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"/>
+  <rules_parameters id="1" rule_id="1" name="myParameter" param_type="plop" default_value="plouf" description="My Parameter"/>
+  <rules id="2" plugin_rule_key="Unused" plugin_name="unused" name="Unused Rule" description="Not used" status="REMOVED"/>
+  <rules_parameters id="2" rule_id="2" name="otherParam" param_type="plop" default_value="plouf" description="Other Parameter"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_parameters_by_rule_ids.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_parameters_by_rule_ids.xml
new file mode 100644 (file)
index 0000000..5d840d5
--- /dev/null
@@ -0,0 +1,7 @@
+<dataset>
+
+  <rules_parameters id="1" rule_id="1" name="myParameter" param_type="plop" default_value="plouf" description="My Parameter"/>
+
+  <rules_parameters id="2" rule_id="2" name="otherParam" param_type="plop" default_value="plouf" description="Other Parameter"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_tags_by_rule_id.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_tags_by_rule_id.xml
new file mode 100644 (file)
index 0000000..8d252e5
--- /dev/null
@@ -0,0 +1,11 @@
+<dataset>
+
+  <rule_tags id="3" tag="tag1"/>
+  <rule_tags id="4" tag="tag3"/>
+  <rule_tags id="5" tag="tag5"/>
+
+  <rules_rule_tags id="3" rule_id="3" rule_tag_id="3" tag_type="SYSTEM"/>
+  <rules_rule_tags id="4" rule_id="3" rule_tag_id="4" tag_type="SYSTEM"/>
+  <rules_rule_tags id="5" rule_id="4" rule_tag_id="5" tag_type="SYSTEM"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_tags_by_rule_ids.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/select_tags_by_rule_ids.xml
new file mode 100644 (file)
index 0000000..8d252e5
--- /dev/null
@@ -0,0 +1,11 @@
+<dataset>
+
+  <rule_tags id="3" tag="tag1"/>
+  <rule_tags id="4" tag="tag3"/>
+  <rule_tags id="5" tag="tag5"/>
+
+  <rules_rule_tags id="3" rule_id="3" rule_tag_id="3" tag_type="SYSTEM"/>
+  <rules_rule_tags id="4" rule_id="3" rule_tag_id="4" tag_type="SYSTEM"/>
+  <rules_rule_tags id="5" rule_id="4" rule_tag_id="5" tag_type="SYSTEM"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update-result.xml
new file mode 100644 (file)
index 0000000..5c2ad74
--- /dev/null
@@ -0,0 +1,21 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="NewRuleKey" plugin_name="plugin" name="new name" description="new description" status="DEPRECATED"
+    plugin_config_key="NewConfigKey" priority="0" cardinality="MULTIPLE" language="dart" created_at="2011-04-25 01:05:00" updated_at="2013-12-17" parent_id="3"
+    note_data="My note" note_user_login="admin" note_created_at="2013-12-19" note_updated_at="2013-12-20"
+    characteristic_id="100" default_characteristic_id="101"
+    remediation_function="linear" default_remediation_function="linear_offset"
+    remediation_coeff="1h" default_remediation_coeff="5d"
+    remediation_offset="5min" default_remediation_offset="10h"
+    effort_to_fix_description="squid.S115.effortToFix"
+  />
+
+  <rules id="2" plugin_rule_key="Parent1" plugin_name="checkstyle" name="Parent Rule 1" description="Parent Rule 1" status="READY"
+    plugin_config_key="Parent1" priority="2" cardinality="SINGLE" language="golo" created_at="1981-10-24 15:20:00" updated_at="[null]" parent_id="[null]"
+    note_created_at="[null]" note_data="[null]" note_updated_at="[null]" note_user_login="[null]"/>
+
+  <rules id="3" plugin_rule_key="Parent2" plugin_name="checkstyle" name="Parent Rule 2" description="Parent Rule 2" status="READY"
+    plugin_config_key="Parent2" priority="2" cardinality="SINGLE" language="dart" created_at="1982-12-14 03:15:00" updated_at="[null]" parent_id="[null]"
+    note_created_at="[null]" note_data="[null]" note_updated_at="[null]" note_user_login="[null]"/>
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update.xml
new file mode 100644 (file)
index 0000000..d7e11ca
--- /dev/null
@@ -0,0 +1,12 @@
+<dataset>
+
+  <rules id="1" plugin_rule_key="AvoidNull" plugin_name="checkstyle" name="Avoid Null" description="Should avoid NULL" status="READY"
+    plugin_config_key="AvoidNull" priority="2" cardinality="SINGLE" language="golo" created_at="2011-04-25 01:05:00" parent_id="2"/>
+
+  <rules id="2" plugin_rule_key="Parent1" plugin_name="checkstyle" name="Parent Rule 1" description="Parent Rule 1" status="READY"
+    plugin_config_key="Parent1" priority="2" cardinality="SINGLE" language="golo" created_at="1981-10-24 15:20:00" />
+
+  <rules id="3" plugin_rule_key="Parent2" plugin_name="checkstyle" name="Parent Rule 2" description="Parent Rule 2" status="READY"
+    plugin_config_key="Parent2" priority="2" cardinality="SINGLE" language="dart" created_at="1982-12-14 03:15:00" />
+
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update_parameter-result.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update_parameter-result.xml
new file mode 100644 (file)
index 0000000..d618894
--- /dev/null
@@ -0,0 +1,3 @@
+<dataset>
+  <rules_parameters id="1" rule_id="1" name="format" param_type="STRING" default_value="^[a-z]+(\.[a-z][a-z0-9]*)*$" description="Regular expression used to check the package names against."/>
+</dataset>
diff --git a/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update_parameter.xml b/sonar-server/src/test/resources/org/sonar/server/rule2/RuleDaoTest/update_parameter.xml
new file mode 100644 (file)
index 0000000..5208b7a
--- /dev/null
@@ -0,0 +1,3 @@
+<dataset>
+  <rules_parameters id="1" rule_id="1" name="max" param_type="INTEGER" default_value="30" description="My Parameter"/>
+</dataset>