]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6255 Fix issue on /api/sources when component is a test
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 28 May 2015 10:05:26 +0000 (12:05 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 28 May 2015 10:12:05 +0000 (12:12 +0200)
server/sonar-server/src/main/java/org/sonar/server/source/db/FileSourceDao.java
server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceDaoTest.java
server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceTesting.java
server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java
server/sonar-server/src/test/resources/org/sonar/server/source/db/FileSourceDaoTest/no_line_hashes_when_only_test_data.xml [new file with mode: 0644]
server/sonar-server/src/test/resources/org/sonar/server/source/ws/HashActionTest/show_hashes_on_test_file.xml [new file with mode: 0644]

index 4567c22dc2eb3898da952302ddf1697102a3d633..7962fa25364e3301070b049fb66c658736d084b2 100644 (file)
 package org.sonar.server.source.db;
 
 import com.google.common.base.Function;
+import java.io.Reader;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import javax.annotation.CheckForNull;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.commons.io.IOUtils;
 import org.sonar.api.server.ServerSide;
@@ -31,15 +37,6 @@ import org.sonar.core.source.db.FileSourceDto;
 import org.sonar.core.source.db.FileSourceDto.Type;
 import org.sonar.core.source.db.FileSourceMapper;
 
-import javax.annotation.CheckForNull;
-
-import java.io.InputStream;
-import java.io.Reader;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
 @ServerSide
 public class FileSourceDao implements DaoComponent {
 
@@ -69,36 +66,13 @@ public class FileSourceDao implements DaoComponent {
     }
   }
 
-  public <T> void readDataStream(String fileUuid, Function<InputStream, T> function) {
-    DbSession dbSession = mybatis.openSession(false);
-    Connection connection = dbSession.getConnection();
-    PreparedStatement pstmt = null;
-    ResultSet rs = null;
-    InputStream input = null;
-    try {
-      pstmt = connection.prepareStatement("SELECT binary_data FROM file_sources WHERE file_uuid=?");
-      pstmt.setString(1, fileUuid);
-      rs = pstmt.executeQuery();
-      if (rs.next()) {
-        input = rs.getBinaryStream(1);
-        function.apply(input);
-      }
-    } catch (SQLException e) {
-      throw new IllegalStateException("Fail to read FILE_SOURCES.BINARY_DATA of file " + fileUuid, e);
-    } finally {
-      IOUtils.closeQuietly(input);
-      DbUtils.closeQuietly(connection, pstmt, rs);
-      MyBatis.closeQuietly(dbSession);
-    }
-  }
-
   public <T> void readLineHashesStream(DbSession dbSession, String fileUuid, Function<Reader, T> function) {
     Connection connection = dbSession.getConnection();
     PreparedStatement pstmt = null;
     ResultSet rs = null;
     Reader reader = null;
     try {
-      pstmt = connection.prepareStatement("SELECT line_hashes FROM file_sources WHERE file_uuid=?");
+      pstmt = connection.prepareStatement("SELECT line_hashes FROM file_sources WHERE file_uuid=? AND data_type = '" + Type.SOURCE +"'");
       pstmt.setString(1, fileUuid);
       rs = pstmt.executeQuery();
       if (rs.next()) {
index 94d1a998130891c11ebc8fe917ae0581d3a79104..6f3f0562196aff3331f22cc8f6e1cd5a68727b10 100644 (file)
@@ -21,6 +21,9 @@
 package org.sonar.server.source.db;
 
 import com.google.common.base.Function;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
 import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -30,10 +33,6 @@ import org.sonar.core.persistence.DbSession;
 import org.sonar.core.source.db.FileSourceDto;
 import org.sonar.core.source.db.FileSourceDto.Type;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class FileSourceDaoTest extends AbstractDaoTestCase {
@@ -68,16 +67,6 @@ public class FileSourceDaoTest extends AbstractDaoTestCase {
     assertThat(fileSourceDto.getDataType()).isEqualTo(Type.SOURCE);
   }
 
-  @Test
-  public void select_data() {
-    setupData("shared");
-
-    InputStreamToStringFunction fn = new InputStreamToStringFunction();
-    sut.readDataStream("FILE1_UUID", fn);
-
-    assertThat(fn.result).isNotEmpty();
-  }
-
   @Test
   public void select_line_hashes() {
     setupData("shared");
@@ -98,6 +87,16 @@ public class FileSourceDaoTest extends AbstractDaoTestCase {
     assertThat(fn.result).isNull();
   }
 
+  @Test
+  public void no_line_hashes_when_only_test_data() {
+    setupData("no_line_hashes_when_only_test_data");
+
+    ReaderToStringFunction fn = new ReaderToStringFunction();
+    sut.readLineHashesStream(session, "FILE1_UUID", fn);
+
+    assertThat(fn.result).isNull();
+  }
+
   @Test
   public void insert() {
     setupData("shared");
index 60e5edff68a0c1eb92fa4173f8cf0b97a27dd618..3398223732e9769ca659f3cfd5d0283305509e31 100644 (file)
  */
 package org.sonar.server.source.db;
 
-import org.apache.commons.lang.RandomStringUtils;
-import org.apache.commons.lang.math.RandomUtils;
-import org.sonar.core.source.db.FileSourceDto;
-
 import java.io.IOException;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.Arrays;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.math.RandomUtils;
+import org.sonar.core.source.db.FileSourceDto;
 
 public class FileSourceTesting {
 
@@ -40,7 +39,7 @@ public class FileSourceTesting {
   }
 
   public static void updateDataColumn(Connection connection, String fileUuid, byte[] data) throws SQLException {
-    PreparedStatement stmt = connection.prepareStatement("UPDATE file_sources SET binary_data = ? WHERE file_uuid=? AND data_type='SOURCE'");
+    PreparedStatement stmt = connection.prepareStatement("UPDATE file_sources SET binary_data = ? WHERE file_uuid=? AND data_type='" + FileSourceDto.Type.SOURCE + "'");
     stmt.setBytes(1, data);
     stmt.setString(2, fileUuid);
     stmt.executeUpdate();
index 41b630e3e8c33d1b22ac89a5cadc0e2e00fd6dfa..42599e5ca3867dbb82dcf62a06d3cf46f6a49580 100644 (file)
@@ -51,6 +51,7 @@ public class HashActionTest {
 
   @ClassRule
   public static DbTester db = new DbTester();
+
   @Rule
   public UserSessionRule userSessionRule = UserSessionRule.standalone();
 
@@ -82,6 +83,15 @@ public class HashActionTest {
     assertThat(request.execute().outputAsString()).isEqualTo("987654");
   }
 
+  @Test
+  public void show_hashes_on_test_file() throws Exception {
+    db.prepareDbUnit(getClass(), "show_hashes_on_test_file.xml");
+    userSessionRule.login("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID);
+
+    WsTester.TestRequest request = tester.newGetRequest("api/sources", "hash").setParam("key", "ActionTest.java");
+    assertThat(request.execute().outputAsString()).isEqualTo("987654");
+  }
+
   @Test
   public void hashes_empty_if_no_source() throws Exception {
     db.prepareDbUnit(getClass(), "no_source.xml");
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/source/db/FileSourceDaoTest/no_line_hashes_when_only_test_data.xml b/server/sonar-server/src/test/resources/org/sonar/server/source/db/FileSourceDaoTest/no_line_hashes_when_only_test_data.xml
new file mode 100644 (file)
index 0000000..010394a
--- /dev/null
@@ -0,0 +1,9 @@
+<dataset>
+
+    <file_sources id="101" project_uuid="PRJ_UUID" file_uuid="FILE1_UUID"
+                  binary_data="abcde" data_hash="[null]"
+                  line_hashes="[null]"
+                  src_hash="[null]"
+                  created_at="1500000000000" updated_at="1500000000000"  data_type="TEST" />
+
+</dataset>
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/source/ws/HashActionTest/show_hashes_on_test_file.xml b/server/sonar-server/src/test/resources/org/sonar/server/source/ws/HashActionTest/show_hashes_on_test_file.xml
new file mode 100644 (file)
index 0000000..f577e37
--- /dev/null
@@ -0,0 +1,20 @@
+<dataset>
+
+  <projects id="100" kee="struts" root_id="[null]" qualifier="TRK" scope="PRJ" uuid="ABCD" project_uuid="ABCD" module_uuid="[null]" module_uuid_path="." path="[null]"/>
+  <projects id="101" kee="ActionTest.java" root_id="100" qualifier="CLA" scope="PRJ" uuid="CDEF" project_uuid="ABCD" module_uuid="ABCD" module_uuid_path=".ABCD."
+            path="src/test/java/ActionTest.java"/>
+
+  <file_sources id="100" project_uuid="ABCD" file_uuid="CDEF"
+                binary_data="" data_hash="[null]"
+                line_hashes="[null]"
+                src_hash="[null]"
+                created_at="1414597442000" updated_at="1414683842000" data_type="TEST" />
+
+  <file_sources id="101" project_uuid="ABCD" file_uuid="CDEF"
+                binary_data="" data_hash="hash"
+                line_hashes="987654"
+                src_hash="12345"
+                created_at="1414597442000" updated_at="1414683842000" data_type="SOURCE" />
+
+
+</dataset>