You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
9.0 KiB
236 lines
9.0 KiB
package de.superx; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
import java.io.File; |
|
import java.io.FileReader; |
|
import java.io.IOException; |
|
import java.io.Reader; |
|
import java.sql.Connection; |
|
import java.sql.SQLException; |
|
import java.util.HashMap; |
|
import java.util.List; |
|
import java.util.Map; |
|
import java.util.Map.Entry; |
|
import java.util.Optional; |
|
|
|
import javax.sql.DataSource; |
|
|
|
import org.apache.commons.csv.CSVFormat; |
|
import org.apache.commons.csv.CSVRecord; |
|
import org.apache.log4j.Logger; |
|
import org.h2.tools.Server; |
|
import org.junit.After; |
|
import org.junit.Before; |
|
import org.junit.Ignore; |
|
import org.junit.runner.RunWith; |
|
import org.pentaho.di.core.database.DataSourceNamingException; |
|
import org.pentaho.di.core.database.DataSourceProviderFactory; |
|
import org.pentaho.di.core.database.DataSourceProviderInterface; |
|
import org.springframework.beans.factory.annotation.Autowired; |
|
import org.springframework.core.io.FileSystemResource; |
|
import org.springframework.jdbc.core.JdbcTemplate; |
|
import org.springframework.jdbc.core.simple.SimpleJdbcInsert; |
|
import org.springframework.jdbc.datasource.init.ScriptException; |
|
import org.springframework.jdbc.datasource.init.ScriptUtils; |
|
import org.springframework.test.context.ContextConfiguration; |
|
import org.springframework.test.context.junit4.SpringRunner; |
|
|
|
import de.superx.bianalysis.models.Right; |
|
import de.superx.bianalysis.models.RightParam; |
|
import de.superx.bianalysis.service.UserRestrictionService; |
|
import de.superx.common.SxUser; |
|
import de.superx.jdbc.entity.Konstante; |
|
import de.superx.jdbc.repository.KonstanteRepository; |
|
import de.superx.spring.TestUserServiceImpl; |
|
import de.superx.spring.service.UserService; |
|
|
|
@Ignore |
|
@RunWith(SpringRunner.class) |
|
@ContextConfiguration(classes = { TestApplicationConfigPg.class }) |
|
public class BaseDbTest { |
|
|
|
// protected static void createTestDb() throws SQLException { |
|
// // TODO This kind of works but still problems with SxPool init |
|
// try (Connection con = DriverManager.getConnection(H2_MEM_URL)) { |
|
// DataSource ds = new SingleConnectionDataSource(con, true); |
|
// JdbcTemplate jt = new JdbcTemplate(ds); |
|
// jt.execute("RUNSCRIPT FROM '" + dbPath + File.separator + "head_eduetl.sql'"); |
|
// } |
|
// } |
|
|
|
private static Logger logger = Logger.getLogger(BaseDbTest.class); |
|
|
|
public static final String LOGGING_PROPERTIES_PATH = String.join(File.separator, "test", "conf", |
|
"logging_unittests.properties"); |
|
public static final String logConfigPath = new File(LOGGING_PROPERTIES_PATH).getAbsolutePath(); |
|
public static final String MANDANTEN_ID = "test"; |
|
|
|
|
|
@Autowired |
|
public DataSource dataSource; |
|
|
|
@Autowired |
|
public KonstanteRepository konstanteRepository; |
|
|
|
@Autowired |
|
private |
|
UserService userService; |
|
|
|
protected SxUser user; |
|
|
|
@After |
|
public void after() { |
|
user.getRightsMap().clear(); |
|
new JdbcTemplate(dataSource).execute("TRUNCATE table public.user_dimension_grants"); |
|
} |
|
|
|
@Before |
|
public void baseInit() throws SQLException { |
|
// Kettle DataSourceProvider |
|
try (Connection con = dataSource.getConnection()) { |
|
logger.info("Set Kettle DataSourceProvider to " + con.getMetaData().getURL()); |
|
} |
|
DataSourceProviderFactory |
|
.setDataSourceProviderInterface(new DataSourceProviderInterface() { |
|
|
|
@Override |
|
public DataSource getNamedDataSource(String datasourceName) throws DataSourceNamingException { |
|
return dataSource; |
|
} |
|
|
|
@Override |
|
public DataSource getNamedDataSource(String datasourceName, DatasourceType type) throws DataSourceNamingException { |
|
return getNamedDataSource(datasourceName); |
|
} |
|
|
|
}); |
|
// Testuser intialisieren |
|
TestUserServiceImpl tusi = (TestUserServiceImpl) userService; |
|
user = tusi.createTestUser(true, null); |
|
Map<String, Map<String,String>> rights = new HashMap<>(); |
|
rights.put("RIGHT_CS_BIA_STANDARDREPORTS_ADMIN", null); |
|
user.setRights(rights, null); |
|
new UserRestrictionService(user, dataSource); |
|
} |
|
|
|
protected void executeSqlScript(String filePath) throws ScriptException, SQLException { |
|
ScriptUtils.executeSqlScript(dataSource.getConnection(), new FileSystemResource(new File(filePath))); |
|
} |
|
|
|
protected void loadCsvFileIntoTable(String filePath, String tableName) throws IOException { |
|
loadCsvFileIntoTable(filePath, tableName, ';'); |
|
} |
|
|
|
protected void loadCsvFileIntoTable(String filePath, String tableName, char delimiter) throws IOException { |
|
Iterable<CSVRecord> records = null; |
|
Reader in = new FileReader(filePath); |
|
records = CSVFormat.RFC4180 |
|
.withDelimiter(delimiter) |
|
.withFirstRecordAsHeader() |
|
.withNullString("") |
|
.withTrim() |
|
.withEscape('\\') |
|
.parse(in); |
|
SimpleJdbcInsert insertActor = new SimpleJdbcInsert(dataSource).withTableName(tableName); |
|
for (CSVRecord record : records) { |
|
insertActor.execute(record.toMap()); |
|
} |
|
} |
|
|
|
protected void validateResultRowCount(String sqlSelect, int expectedRowCount) { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
List<Map<String, Object>> resultRows = jt.queryForList(sqlSelect); |
|
assertEquals("Result has to be exactly " + expectedRowCount +" rows", expectedRowCount, resultRows.size()); |
|
} |
|
|
|
protected void validateSingleRow(String sqlSelect, Map<String,Object> expectedResult) { |
|
JdbcTemplate jt = new JdbcTemplate(dataSource); |
|
List<Map<String, Object>> resultRows = jt.queryForList(sqlSelect); |
|
assertEquals("Result has to be exactly 1 row", 1, resultRows.size()); |
|
Map<String, Object> row = resultRows.get(0); |
|
for (Entry<String, Object> expected : expectedResult.entrySet()) { |
|
Object content = row.get(expected.getKey()); |
|
assertEquals("Expect field " + expected.getKey() + " with value " + expected.getValue(), expected.getValue(), content); |
|
} |
|
} |
|
|
|
protected void startDebugWebserver() throws SQLException { |
|
try (Connection con = dataSource.getConnection().unwrap(Connection.class)) { |
|
Server.startWebServer(con); // uncomment for local (e.g. dev env) debugging |
|
} |
|
} |
|
|
|
public void setApnr(String beschreibung, Integer apnr) { |
|
Optional<Konstante> optk = konstanteRepository.findByBeschreibung(beschreibung); |
|
if (optk.isPresent()) { |
|
Konstante konstante = optk.get(); |
|
konstante.apnr = apnr; |
|
konstanteRepository.save(konstante); |
|
} else { |
|
// should be present, but if not create new Konstante |
|
Konstante k = new Konstante(); |
|
k.apnr = apnr; |
|
k.beschreibung = beschreibung; |
|
k = konstanteRepository.save(k); |
|
} |
|
} |
|
|
|
protected TestUserServiceImpl getTestUserService() { |
|
return (TestUserServiceImpl) userService; |
|
} |
|
|
|
|
|
// public void setDbtDataBaseProperties(DbtManager manager) { |
|
// String password = ((HikariDataSource)dataSource).getPassword(); |
|
// String jdbcUrl = ((HikariDataSource)dataSource).getJdbcUrl(); |
|
// String cleanUrl = jdbcUrl.substring(5); // remove "jdbc:" |
|
// URI uri = URI.create(cleanUrl); |
|
// String host = uri.getHost(); |
|
// int port = uri.getPort(); // returns -1 if no port specified |
|
// String finalPort = String.valueOf(port != -1 ? Integer.valueOf(port) : "5432"); |
|
|
|
// String username = ""; |
|
// String dbName = ""; |
|
// try(Connection con = dataSource.getConnection()){ |
|
// username = con.getMetaData().getUserName(); |
|
// dbName = con.getCatalog(); |
|
// } catch (SQLException e) { |
|
// e.printStackTrace(); |
|
// } |
|
// |
|
// //manager.setTestDataBaseProperties(username, password, host, finalPort, dbName); |
|
// } |
|
// |
|
|
|
|
|
protected void setRightParamValue(Right right, RightParam rightParam, String paramValue) { |
|
setRightParamValue(right, rightParam, paramValue, true); |
|
} |
|
|
|
protected void setRightParamValue(Right right, RightParam rightParam, String paramValue, boolean truncate) { |
|
if(truncate) { |
|
new JdbcTemplate(dataSource).execute("TRUNCATE table public.user_dimension_grants"); |
|
} |
|
Map<String, String> paramAndValue = user.getRightsMap().get(right.getString()); |
|
if(paramAndValue == null) { |
|
paramAndValue = new HashMap<>(); |
|
} |
|
paramAndValue.put(rightParam.getString(), paramValue); |
|
user.getRightsMap().put(right.getString(), paramAndValue); |
|
|
|
UserRestrictionService builder = new UserRestrictionService(user, dataSource); |
|
builder.applyMetadataRestrictions(); |
|
builder.applyOrgunitRestrictions(); |
|
} |
|
|
|
protected void setRight(Right right) { |
|
Map<String, Map<String, String>> rightsMap = user.getRightsMap(); |
|
rightsMap.clear(); |
|
rightsMap.put(right.getString(), null); |
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|