package io.ebean; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.deploy.BeanDescriptor; import org.tests.model.basic.Country; import org.avaje.agentloader.AgentLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.sql.Types; public class BaseTestCase { protected static Logger logger = LoggerFactory.getLogger(BaseTestCase.class); static { logger.debug("... preStart"); if (!AgentLoader.loadAgentFromClasspath("ebean-agent", "debug=1;packages=com.avaje.tests,org.avaje.test")) { logger.info("avaje-ebeanorm-agent not found in classpath - not dynamically loaded"); } } /** * Return the generated sql trimming column alias if required. */ protected String sqlOf(Query<?> query) { return trimSql(query.getGeneratedSql(), 0); } /** * Return the generated sql trimming column alias if required. */ protected String sqlOf(Query<?> query, int columns) { return trimSql(query.getGeneratedSql(), columns); } /** * Trim out column alias if required from the generated sql. */ protected String trimSql(String sql, int columns) { for (int i = 0; i <= columns; i++) { sql = sql.replace(" c" + i + ",", ","); } for (int i = 0; i <= columns; i++) { sql = sql.replace(" c" + i + " ", " "); } return sql; } /** * MS SQL Server does not allow setting explicit values on identity columns * so tests that do this need to be skipped for SQL Server. */ public boolean isSqlServer() { return Platform.SQLSERVER == platform(); } public boolean isH2() { return Platform.H2 == platform(); } public boolean isOracle() { return Platform.ORACLE == platform(); } public boolean isPostgres() { return Platform.POSTGRES == platform(); } public boolean isMySql() { return Platform.MYSQL == platform(); } public boolean isPlatformBooleanNative() { return Types.BOOLEAN == spiEbeanServer().getDatabasePlatform().getBooleanDbType(); } public boolean isPlatformOrderNullsSupport() { return isH2() || isPostgres(); } /** * Wait for the L2 cache to propagate changes post-commit. */ protected void awaitL2Cache() { // do nothing, used to thread sleep } protected <T> BeanDescriptor<T> getBeanDescriptor(Class<T> cls) { return spiEbeanServer().getBeanDescriptor(cls); } protected Platform platform() { return spiEbeanServer().getDatabasePlatform().getPlatform(); } protected SpiEbeanServer spiEbeanServer() { return (SpiEbeanServer) Ebean.getDefaultServer(); } protected EbeanServer server() { return Ebean.getDefaultServer(); } protected void loadCountryCache() { Ebean.find(Country.class) .setLoadBeanCache(true) .findList(); } }