/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.performance;
import static org.hibernate.search.test.integration.VersionTestHelper.getHibernateORMModuleName;
import static org.hibernate.search.test.integration.VersionTestHelper.getWildFlyModuleIdentifier;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.file.Path;
import java.util.Map.Entry;
import java.util.Properties;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.search.test.integration.wildfly.PackagerHelper;
import org.hibernate.search.test.performance.scenario.TestScenario;
import org.hibernate.search.test.performance.scenario.TestScenarioFactory;
import org.hibernate.search.test.performance.util.TargetDirHelper;
import org.hibernate.search.testsupport.TestConstants;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnit;
import org.jboss.shrinkwrap.descriptor.api.spec.se.manifest.ManifestDescriptor;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Tomas Hradec
*/
@RunWith(Arquillian.class)
public class TestRunnerArquillian {
private static final TestScenario scenario = TestScenarioFactory.create();
public static final String RUNNER_PROPERTIES = "runner.properties";
public static final String TARGET_DIR_KEY = "target";
@Deployment
public static Archive<?> createTestArchive() throws Exception {
WebArchive archive = ShrinkWrap
.create( WebArchive.class, TestRunnerArquillian.class.getSimpleName() + ".war" )
.addPackages( true, TestRunnerArquillian.class.getPackage() )
.addClass( TestConstants.class )
.addAsResource( createPersistenceXml(), "META-INF/persistence.xml" )
.addAsLibraries( PackagerHelper.hibernateSearchTestingLibraries() )
.addAsWebInfResource( EmptyAsset.INSTANCE, "beans.xml" )
.add( manifest(), "META-INF/MANIFEST.MF" )
.addAsWebInfResource( reportsOutputDirectory(), "classes/" + RUNNER_PROPERTIES );
return archive;
}
private static StringAsset reportsOutputDirectory() throws Exception {
Path path = TargetDirHelper.getTargetDir();
String absolutePath = path.toAbsolutePath().toString();
//Use Properties to make sure we encode the output correctly,
//especially tricky to deal with escaping of paths:
Properties runnerProperties = new Properties();
runnerProperties.put( TARGET_DIR_KEY, absolutePath );
StringWriter writer = new StringWriter();
runnerProperties.store( writer, "report output path" );
String encodedString = writer.toString();
return new StringAsset( encodedString );
}
private static Asset createPersistenceXml() {
PersistenceDescriptor pd = Descriptors.create( PersistenceDescriptor.class ).version( "2.0" );
PersistenceUnit<PersistenceDescriptor> pu = pd.createPersistenceUnit()
.name( "primary" )
.jtaDataSource( System.getProperty( "datasource", "java:jboss/datasources/ExampleDS" ) );
Properties properties = scenario.getHibernateProperties();
for ( Entry<Object, Object> property : properties.entrySet() ) {
pu.getOrCreateProperties().
createProperty().
name( property.getKey().toString() ).
value( property.getValue().toString() );
}
//Additional properties:
pu.getOrCreateProperties()
.createProperty().name( "jboss.as.jpa.providerModule" ).value( getHibernateORMModuleName() ).up()
.createProperty().name( "wildfly.jpa.hibernate.search.module" ).value( getWildFlyModuleIdentifier() ).up()
;
return new StringAsset( pd.exportAsString() );
}
public static Asset manifest() {
String manifest = Descriptors.create( ManifestDescriptor.class )
.attribute( "Dependencies", "org.apache.commons.lang" )
.exportAsString();
return new StringAsset( manifest );
}
@PersistenceContext
private EntityManager em;
@Test
public void runPerformanceTest() throws IOException {
SessionFactory sf = em.unwrap( Session.class ).getSessionFactory();
scenario.run( sf );
}
}