package org.infinispan.hibernate.search; import static org.junit.Assert.assertEquals; import org.hibernate.search.spi.SearchIntegratorBuilder; import org.hibernate.search.test.util.HibernateManualConfiguration; import org.hibernate.search.testsupport.BytemanHelper; import org.hibernate.search.testsupport.BytemanHelper.BytemanAccessor; import org.hibernate.search.testsupport.setup.SearchConfigurationForTest; import org.jboss.byteman.contrib.bmunit.BMRule; import org.jboss.byteman.contrib.bmunit.BMUnitRunner; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; /** * Verifies the {@link org.infinispan.hibernate.search.spi.InfinispanIntegration#WRITE_METADATA_ASYNC} setting is * correctly applied to the Infinispan directory. * * @author Sanne Grinovero <sanne@hibernate.org> (C) 2014 Red Hat Inc. * @author Gunnar Morling * @since 5.0 */ @RunWith(BMUnitRunner.class) public class AsyncMetadataConfigurationTest { @Rule public BytemanAccessor byteman = BytemanHelper.createAccessor(); @Test @BMRule(targetClass = "org.infinispan.lucene.impl.DirectoryBuilderImpl", targetMethod = "create", helper = "org.hibernate.search.testsupport.BytemanHelper", action = "assertBooleanValue($0.writeFileListAsync, true); countInvocation();", name = "verifyAsyncMetadataOptionApplied") public void verifyAsyncMetadataOptionApplied() throws Exception { buildSearchFactoryWithAsyncOption(false, true); } @Test @BMRule(targetClass = "org.infinispan.lucene.impl.DirectoryBuilderImpl", targetMethod = "create", helper = "org.hibernate.search.testsupport.BytemanHelper", action = "assertBooleanValue($0.writeFileListAsync, false); countInvocation();", name = "verifyAsyncMetadataDisabledByDefault") public void verifyAsyncMetadataDisabledByDefault() throws Exception { buildSearchFactoryWithAsyncOption(false, null); } @Test @BMRule(targetClass = "org.infinispan.lucene.impl.DirectoryBuilderImpl", targetMethod = "create", helper = "org.hibernate.search.testsupport.BytemanHelper", action = "assertBooleanValue($0.writeFileListAsync, false); countInvocation();", name = "verifyAsyncMetadataOptionExplicitDisabled") public void verifyAsyncMetadataOptionExplicitDisabled() throws Exception { buildSearchFactoryWithAsyncOption(false, false); } @Test @BMRule(targetClass = "org.infinispan.lucene.impl.DirectoryBuilderImpl", targetMethod = "create", helper = "org.hibernate.search.testsupport.BytemanHelper", action = "assertBooleanValue($0.writeFileListAsync, false); countInvocation();", name = "verifyAsyncMetadataOptionExplicitlyDisabledForAsyncBackend") public void verifyAsyncMetadataOptionExplicitlyDisabledForAsyncBackend() throws Exception { buildSearchFactoryWithAsyncOption(true, false); } private void buildSearchFactoryWithAsyncOption(Boolean backendAsync, Boolean async) { SearchConfigurationForTest configuration = new HibernateManualConfiguration() .addClass(SimpleEmail.class) .addProperty("hibernate.search.default.directory_provider", "infinispan") .addProperty("hibernate.search.infinispan.configuration_resourcename", "localonly-infinispan.xml"); if (backendAsync != null) { configuration.addProperty("hibernate.search.default.worker.execution", backendAsync ? "async" : "sync"); } if (async != null) { configuration.addProperty("hibernate.search.default.write_metadata_async", async.toString()); } new SearchIntegratorBuilder().configuration(configuration).buildSearchIntegrator(); assertEquals("The directory provider was not started", 1, byteman.getAndResetInvocationCount()); } }