From: Julien Lancelot Date: Thu, 28 May 2015 10:05:26 +0000 (+0200) Subject: SONAR-6255 Fix issue on /api/sources when component is a test X-Git-Tag: 5.2-RC1~1789 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8657ef72563a38e97fb6be3308420c4dce0cf9e5;p=sonarqube.git SONAR-6255 Fix issue on /api/sources when component is a test --- diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/db/FileSourceDao.java b/server/sonar-server/src/main/java/org/sonar/server/source/db/FileSourceDao.java index 4567c22dc2e..7962fa25364 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/db/FileSourceDao.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/db/FileSourceDao.java @@ -21,6 +21,12 @@ 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 void readDataStream(String fileUuid, Function 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 void readLineHashesStream(DbSession dbSession, String fileUuid, Function 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()) { diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceDaoTest.java index 94d1a998130..6f3f0562196 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceDaoTest.java @@ -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"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceTesting.java b/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceTesting.java index 60e5edff68a..3398223732e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceTesting.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/db/FileSourceTesting.java @@ -19,15 +19,14 @@ */ 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(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java index 41b630e3e8c..42599e5ca38 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java @@ -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 index 00000000000..010394a156e --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/source/db/FileSourceDaoTest/no_line_hashes_when_only_test_data.xml @@ -0,0 +1,9 @@ + + + + + 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 index 00000000000..f577e371d76 --- /dev/null +++ b/server/sonar-server/src/test/resources/org/sonar/server/source/ws/HashActionTest/show_hashes_on_test_file.xml @@ -0,0 +1,20 @@ + + + + + + + + + + +