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;
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 {
}
}
- 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()) {
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;
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 {
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");
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");
*/
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 {
}
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();
@ClassRule
public static DbTester db = new DbTester();
+
@Rule
public UserSessionRule userSessionRule = UserSessionRule.standalone();
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");
--- /dev/null
+<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>
--- /dev/null
+<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>