package org.jboss.resteasy.test.client; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.resteasy.test.client.resource.ClientDynamicFeaturesClientFeature1; import org.jboss.resteasy.test.client.resource.ClientDynamicFeaturesClientFeature2; import org.jboss.resteasy.test.client.resource.ClientDynamicFeaturesDualFeature1; import org.jboss.resteasy.test.client.resource.ClientDynamicFeaturesDualFeature2; import org.jboss.resteasy.test.client.resource.ClientDynamicFeaturesServerFeature1; import org.jboss.resteasy.test.client.resource.ClientDynamicFeaturesServerFeature2; import org.jboss.resteasy.utils.TestUtil; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import javax.ws.rs.container.DynamicFeature; import java.util.Iterator; import java.util.Set; /** * @tpSubChapter Resteasy-client * @tpChapter Integration tests * @tpTestCaseDetails Regression test for RESTEASY-1083 * @tpSince RESTEasy 3.0.16 */ @RunWith(Arquillian.class) public class ClientDynamicFeaturesTest { private static final String CLIENT_FEATURE_ERROR_MSG = "Wrong count of client features"; private static final String SERVER_FEATURE_ERROR_MSG = "Wrong count of server features"; /** * Test needs to be run on deployment. * @return */ @Deployment public static Archive<?> deploy() { WebArchive war = TestUtil.prepareArchive(ClientDynamicFeaturesTest.class.getSimpleName()); war.addClasses(ClientDynamicFeaturesClientFeature1.class, ClientDynamicFeaturesClientFeature2.class, ClientDynamicFeaturesDualFeature2.class, ClientDynamicFeaturesDualFeature1.class, ClientDynamicFeaturesServerFeature2.class, ClientDynamicFeaturesServerFeature1.class); return TestUtil.finishContainerPrepare(war, null, (Class<?>[]) null); } /** * @tpTestDetails Check dynamic feature counts. * @tpSince RESTEasy 3.0.16 */ @Test public void testDynamicFeatures() throws Exception { ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance(); factory.registerProvider(ClientDynamicFeaturesClientFeature1.class, 0, false, null); factory.registerProvider(ClientDynamicFeaturesServerFeature1.class, 0, false, null); factory.registerProvider(ClientDynamicFeaturesDualFeature1.class, 0, false, null); ClientDynamicFeaturesClientFeature2 clientFeature = new ClientDynamicFeaturesClientFeature2(); ClientDynamicFeaturesServerFeature2 serverFeature = new ClientDynamicFeaturesServerFeature2(); ClientDynamicFeaturesDualFeature2 feature = new ClientDynamicFeaturesDualFeature2(); factory.registerProviderInstance(clientFeature, null, 0, false); factory.registerProviderInstance(serverFeature, null, 0, false); factory.registerProviderInstance(feature, null, 0, false); Set<DynamicFeature> clientFeatureSet = factory.getClientDynamicFeatures(); Set<DynamicFeature> serverFeatureSet = factory.getServerDynamicFeatures(); Assert.assertEquals(CLIENT_FEATURE_ERROR_MSG, 1, countFeatures(clientFeatureSet, "ClientDynamicFeaturesClientFeature1")); Assert.assertEquals(CLIENT_FEATURE_ERROR_MSG, 1, countFeatures(clientFeatureSet, "ClientDynamicFeaturesClientFeature2")); Assert.assertEquals(CLIENT_FEATURE_ERROR_MSG, 1, countFeatures(clientFeatureSet, "ClientDynamicFeaturesDualFeature1")); Assert.assertEquals(CLIENT_FEATURE_ERROR_MSG, 1, countFeatures(clientFeatureSet, "ClientDynamicFeaturesDualFeature2")); Assert.assertEquals(SERVER_FEATURE_ERROR_MSG, 1, countFeatures(serverFeatureSet, "ClientDynamicFeaturesServerFeature1")); Assert.assertEquals(SERVER_FEATURE_ERROR_MSG, 1, countFeatures(serverFeatureSet, "ClientDynamicFeaturesServerFeature2")); Assert.assertEquals(SERVER_FEATURE_ERROR_MSG, 1, countFeatures(serverFeatureSet, "ClientDynamicFeaturesDualFeature1")); Assert.assertEquals(SERVER_FEATURE_ERROR_MSG, 1, countFeatures(serverFeatureSet, "ClientDynamicFeaturesDualFeature2")); } private int countFeatures(Set<DynamicFeature> featureSet, String feature) { int count = 0; for (Iterator<DynamicFeature> it = featureSet.iterator(); it.hasNext(); ) { Class<?> clazz = it.next().getClass(); if (clazz.getName().contains(feature)) { count++; } } return count; } }