/*
* 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.integration.wildfly;
import static org.hibernate.search.test.integration.VersionTestHelper.getHibernateORMModuleName;
import static org.hibernate.search.test.integration.VersionTestHelper.getWildFlyModuleIdentifier;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Scanner;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.hibernate.search.test.integration.VersionTestHelper;
import org.hibernate.search.test.integration.wildfly.controller.MemberRegistration;
import org.hibernate.search.test.integration.wildfly.model.Member;
import org.hibernate.search.test.integration.wildfly.util.Resources;
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.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.jboss.shrinkwrap.descriptor.api.application6.ApplicationDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceDescriptor;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Example of an integration test using JBoss AS 7 and Arquillian.
*
* @author Davide D'Alto
* @author Sanne Grinovero
*/
@RunWith(Arquillian.class)
public class ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT {
private static final String EXPECTED_SEARCH_VERSION_RESOURCE = "expectedHibernateSearchVersion";
@Deployment
public static Archive<?> createTestArchive() throws IllegalArgumentException, IOException {
WebArchive war = ShrinkWrap
.create( WebArchive.class, "ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT.war" )
.addAsWebInfResource( webXml(), "web.xml" );
JavaArchive ejb = ShrinkWrap
.create( JavaArchive.class, "ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT.jar" )
.addClasses( ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT.class, Member.class, MemberRegistration.class, Resources.class )
.addAsManifestResource( persistenceXml(), "persistence.xml" )
.addAsManifestResource( EmptyAsset.INSTANCE, "beans.xml" );
String applicationXml = Descriptors.create( ApplicationDescriptor.class )
.createModule()
.ejb( ejb.getName() ).up()
.createModule()
.getOrCreateWeb()
.webUri( war.getName() ).up().up()
.exportAsString();
EnterpriseArchive ear = ShrinkWrap
.create( EnterpriseArchive.class, ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT.class.getSimpleName() + ".ear" )
.addAsModules( ejb )
.addAsModule( war )
.addAsResource( jbossDeploymentXml(), "/jboss-deployment-structure.xml" )
.setApplicationXML( new StringAsset( applicationXml ) );
return ear;
}
private static Asset webXml() {
String webXml = Descriptors.create( org.jboss.shrinkwrap.descriptor.api.webapp31.WebAppDescriptor.class )
.createEnvEntry()
.envEntryName( EXPECTED_SEARCH_VERSION_RESOURCE )
.envEntryValue( VersionTestHelper.getDependencyVersionHibernateSearch() )
.envEntryType( "java.lang.String" )
.up()
.exportAsString();
return new StringAsset( webXml );
}
private static Asset jbossDeploymentXml() throws IOException {
String text;
try ( InputStream inputStream = ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT.class.getClassLoader().getResourceAsStream( "jboss-deployment-structure-ModuleMemberRegistrationEarArchiveWithJbossDeploymentIT.xml" ) ) {
try ( Scanner scanner = new Scanner( inputStream, "UTF-8" ) ) {
text = scanner.useDelimiter( "\\A" ).next();
}
}
String finalXml = text.replace( (CharSequence)"${project.slot}", (CharSequence)VersionTestHelper.getModuleSlotString() );
return new StringAsset( finalXml );
}
private static Asset persistenceXml() {
String persistenceXml = Descriptors.create( PersistenceDescriptor.class )
.version( "2.0" )
.createPersistenceUnit()
.name( "primary" )
.jtaDataSource( "java:jboss/datasources/ExampleDS" )
// The deployment Scanner is disabled as the JipiJapa integration is not available because of the custom Hibernate ORM module:
.clazz( Member.class.getName() )
.getOrCreateProperties()
.createProperty().name( "hibernate.hbm2ddl.auto" ).value( "create-drop" ).up()
.createProperty().name( "hibernate.search.default.directory_provider" ).value( "ram" ).up()
.createProperty().name( "hibernate.search.default.lucene_version" ).value( "LUCENE_CURRENT" ).up()
.createProperty().name( "wildfly.jpa.hibernate.search.module" ).value( getWildFlyModuleIdentifier() ).up()
.createProperty().name( "jboss.as.jpa.providerModule" ).value( getHibernateORMModuleName() ).up()
.up().up()
.exportAsString();
return new StringAsset( persistenceXml );
}
@Resource(name = EXPECTED_SEARCH_VERSION_RESOURCE)
String expectedSearchVersion;
@Inject
MemberRegistration memberRegistration;
@Test
public void HibernateSearchVersion() throws Exception {
assertEquals( expectedSearchVersion, memberRegistration.getHibernateSearchVersionString() );
}
@Test
public void testRegister() throws Exception {
Member newMember = memberRegistration.getNewMember();
newMember.setName( "Davide D'Alto" );
newMember.setEmail( "davide@mailinator.com" );
newMember.setPhoneNumber( "2125551234" );
memberRegistration.register();
assertNotNull( newMember.getId() );
}
@Test
public void testNewMemberSearch() throws Exception {
Member newMember = memberRegistration.getNewMember();
newMember.setName( "Peter O'Tall" );
newMember.setEmail( "peter@mailinator.com" );
newMember.setPhoneNumber( "4643646643" );
memberRegistration.register();
List<Member> search = memberRegistration.search( "Peter" );
assertFalse( "Expected at least one result after the indexing", search.isEmpty() );
assertEquals( "Search hasn't found a new member", newMember.getName(), search.get( 0 ).getName() );
}
@Test
public void testNonExistingMember() throws Exception {
List<Member> search = memberRegistration.search( "TotallyInventedName" );
assertNotNull( "Search should never return null", search );
assertTrue( "Search results should be empty", search.isEmpty() );
}
}