package org.jboss.resteasy.test.skeleton.key; import static org.jboss.resteasy.test.TestPortProvider.generateURL; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import org.infinispan.Cache; import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.global.GlobalConfiguration; import org.infinispan.configuration.global.GlobalConfigurationBuilder; import org.infinispan.eviction.EvictionStrategy; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.manager.EmbeddedCacheManager; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.jwt.JsonSerialization; import org.jboss.resteasy.plugins.server.netty.NettyJaxrsServer; import org.jboss.resteasy.skeleton.key.SkeletonKeyContextResolver; import org.jboss.resteasy.skeleton.key.idm.adapters.infinispan.InfinispanIDM; import org.jboss.resteasy.skeleton.key.idm.service.RealmFactory; import org.jboss.resteasy.skeleton.key.idm.service.TokenManagement; import org.jboss.resteasy.skeleton.key.representations.idm.PublishedRealmRepresentation; import org.jboss.resteasy.skeleton.key.representations.idm.RealmRepresentation; import org.jboss.resteasy.spi.Registry; import org.jboss.resteasy.spi.ResteasyDeployment; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.resteasy.test.TestPortProvider; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; /** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class SkeletonTestBase { protected static NettyJaxrsServer server; protected static ResteasyDeployment deployment; protected static InfinispanIDM idm; protected static WebTarget realm; protected static ResteasyClient client; protected static PublishedRealmRepresentation realmInfo; @BeforeClass public static void beforeClass() throws Exception { server = new NettyJaxrsServer(); server.setPort(TestPortProvider.getPort()); server.setRootResourcePath("/"); server.start(); deployment = server.getDeployment(); } @AfterClass public static void afterClass() throws Exception { server.stop(); server = null; deployment = null; client.close(); } public Registry getRegistry() { return deployment.getRegistry(); } public ResteasyProviderFactory getProviderFactory() { return deployment.getProviderFactory(); } /** * @param resource */ public static void addPerRequestResource(Class<?> resource) { deployment.getRegistry().addPerRequestResource(resource); } public static void setupIDM(String realmJson) throws Exception { idm = new InfinispanIDM(getDefaultCache()); RealmFactory factory = new RealmFactory(idm); deployment.getProviderFactory().register(new SkeletonKeyContextResolver(true)); deployment.getRegistry().addSingletonResource(factory); TokenManagement tokenManagement = new TokenManagement(idm); deployment.getRegistry().addSingletonResource(tokenManagement); RealmRepresentation r = loadJson(realmJson); client = new ResteasyClientBuilder().build(); WebTarget target = client.target(generateURL("/realms")); Response response = target.request().post(Entity.json(r)); Assert.assertEquals(201, response.getStatus()); Assert.assertNotNull(response.getLocation()); realm = client.target(response.getLocation()); realmInfo = response.readEntity(PublishedRealmRepresentation.class); response.close(); } public static Cache getDefaultCache() { GlobalConfiguration gconfig = new GlobalConfigurationBuilder() .globalJmxStatistics() .allowDuplicateDomains(true) .enable() .jmxDomain("custom-cache") .build(); Configuration configuration = new ConfigurationBuilder() .eviction() .strategy(EvictionStrategy.NONE) .maxEntries(5000) .jmxStatistics().enable() .build(); EmbeddedCacheManager manager = new DefaultCacheManager(gconfig, configuration); return manager.getCache("custom-cache"); } public static RealmRepresentation loadJson(String path) throws IOException { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path); ByteArrayOutputStream os = new ByteArrayOutputStream(); int c; while ( (c = is.read()) != -1) { os.write(c); } byte[] bytes = os.toByteArray(); System.out.println(new String(bytes)); return JsonSerialization.fromBytes(RealmRepresentation.class, bytes); } }