package org.societies.integration.test.bit.userfeedback; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.internal.useragent.model.ExpProposalContent; import java.sql.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MySQLHelper { private static final Logger log = LoggerFactory.getLogger(MySQLHelper.class); private Connection conn; public MySQLHelper(String url, String username, String password) throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, username, password); } public int clearTable(String table) throws SQLException { log.info("Clearing table " + table); Statement statement = conn.createStatement(); int count = statement.executeUpdate("DELETE FROM `" + table + "`"); statement.close(); return count; } public String assertNotificationStored(int type, ExpProposalContent content) throws SQLException { String sql = "SELECT requestId \n" + " FROM userfeedbackbean \n" + " WHERE proposalText=? \n" + " AND type=?"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, content.getProposalText()); statement.setInt(2, type); ResultSet resultSet = statement.executeQuery(); if (!resultSet.next()) { printTableContents("userfeedbackbean"); Assert.fail("No record found in database table 'userfeedbackbean' with type " + type + " and propText=[" + content.getProposalText() + "]"); } String id = resultSet.getString(1); sql = "SELECT `value` FROM `userfeedbackbean_options` WHERE `requestId`=?"; statement = conn.prepareStatement(sql); statement.setString(1, id); resultSet = statement.executeQuery(); List<String> expectedOptions = new ArrayList<String>(); List<String> actualOptions = new ArrayList<String>(); Collections.addAll(expectedOptions, content.getOptions()); while (resultSet.next()) { actualOptions.add(resultSet.getString(1)); } Tester.compareLists(expectedOptions, actualOptions); return id; } private void printTableContents(String tableName) throws SQLException { String sql = "SELECT * FROM " + tableName; log.debug("Printing table contents: " + tableName); PreparedStatement statement = conn.prepareStatement(sql); ResultSet resultSet = statement.executeQuery(); StringBuilder builder = new StringBuilder(); StringBuilder headerBuilder = new StringBuilder(); final int cols = statement.getMetaData().getColumnCount(); headerBuilder.append(" # "); for (int col = 1; col <= cols; col++) { headerBuilder.append(" | "); headerBuilder.append(statement.getMetaData().getColumnName(col)); } // initial new line builder.append("Contents of table '"); builder.append(tableName); builder.append("'\n"); // ---------------- for (int i = 0; i < headerBuilder.length(); i++) builder.append("-"); builder.append("\n"); // header builder.append(headerBuilder.toString()); builder.append("\n"); // ---------------- for (int i = 0; i < headerBuilder.length(); i++) builder.append("-"); builder.append("\n"); // body int row = 0; while (resultSet.next()) { builder.append(++row); for (int col = 1; col <= cols; col++) { headerBuilder.append(" | "); headerBuilder.append(resultSet.getObject(col)); } builder.append("\n"); } // ---------------- for (int i = 0; i < headerBuilder.length(); i++) builder.append("-"); builder.append("\n"); // total row builder.append("Total row count: "); builder.append(row); log.info(builder.toString()); } }