// Path: resteasy/src/test/java/org/pac4j/jax/rs/rules/RestEasyUndertowServletRule.java
// public class RestEasyUndertowServletRule extends ExternalResource implements SessionContainerRule {
// 
//     private UndertowJaxrsServer server;
// 
//     private Client client;
// 
//     public class MyApp extends Application {
// 
//         @Override
//         public Set<Class<?>> getClasses() {
//             Set<Class<?>> classes = getResources();
//             classes.add(ServletJaxRsContextFactoryProvider.class);
//             classes.add(Pac4JProfileInjectorFactory.class);
//             return classes;
//         }
// 
//         @Override
//         public Set<Object> getSingletons() {
//             return Sets.newLinkedHashSet(
//                     new JaxRsConfigProvider(getConfig()),
//                     new Pac4JSecurityFeature());
//         }
//     }
// 
//     @Override
//     public Set<Class<?>> getResources() {
//         Set<Class<?>> resources = SessionContainerRule.super.getResources();
//         resources.add(RestEasyResource.class);
//         return resources;
//     }
// 
//     @Override
//     protected void before() throws Throwable {
//         // Used by Jersey Client to store cookies
//         CookieHandler.setDefault(new CookieManager());
// 
//         // we don't need a resteasy client, and the jersey one works better with redirect
//         client = new JerseyClientBuilder().build();
// 
//         // TODO use an autogenerated port...
//         System.setProperty("org.jboss.resteasy.port", "24257");
//         server = new UndertowJaxrsServer().start();
// 
//         ResteasyDeployment deployment = new ResteasyDeployment();
//         deployment.setInjectorFactoryClass(CdiInjectorFactory.class.getName());
//         deployment.setApplication(new MyApp());
//         DeploymentInfo di = server.undertowDeployment(deployment)
//                 .setContextPath("/")
//                 .setDeploymentName("DI")
//                 .setClassLoader(getClass().getClassLoader())
//                 .addListeners(Servlets.listener(Listener.class));
//         server.deploy(di);
//     }
// 
//     @Override
//     protected void after() {
//         server.stop();
//         // server.stop is not instantaneous
//         Awaitility.await().atMost(Duration.ofSeconds(5)).until(() -> {
//             try {
//                 getTarget("/").request().get();
//             } catch (ProcessingException e) {
//                 return true;
//             }
//             return false;
//         });
//         client.close();
//         CookieHandler.setDefault(null);
//     }
// 
//     @Override
//     public WebTarget getTarget(String url) {
//         return client.target(TestPortProvider.generateURL(url));
//     }
// 
//     @Override
//     public String cookieName() {
//         return SessionCookieConfig.DEFAULT_SESSION_ID;
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/rules/SessionContainerRule.java
// public interface SessionContainerRule extends ContainerRule {
//     
//     @Override
//     default Set<Class<?>> getResources() {
//         Set<Class<?>> resources = ContainerRule.super.getResources();
//         resources.add(TestSessionResource.class);
//         return resources;
//     }
// }


import org.pac4j.jax.rs.rules.RestEasyUndertowServletRule;
import org.pac4j.jax.rs.rules.SessionContainerRule;
package org.pac4j.jax.rs;


/**
 *
 * @author Victor Noel - Linagora
 * @since 1.0.0
 *
 */
public class RestEasyUndertowServletTest extends AbstractSessionTest {

    @Override
    protected SessionContainerRule createContainer() {
// Path: resteasy/src/test/java/org/pac4j/jax/rs/rules/RestEasyUndertowServletRule.java
// public class RestEasyUndertowServletRule extends ExternalResource implements SessionContainerRule {
// 
//     private UndertowJaxrsServer server;
// 
//     private Client client;
// 
//     public class MyApp extends Application {
// 
//         @Override
//         public Set<Class<?>> getClasses() {
//             Set<Class<?>> classes = getResources();
//             classes.add(ServletJaxRsContextFactoryProvider.class);
//             classes.add(Pac4JProfileInjectorFactory.class);
//             return classes;
//         }
// 
//         @Override
//         public Set<Object> getSingletons() {
//             return Sets.newLinkedHashSet(
//                     new JaxRsConfigProvider(getConfig()),
//                     new Pac4JSecurityFeature());
//         }
//     }
// 
//     @Override
//     public Set<Class<?>> getResources() {
//         Set<Class<?>> resources = SessionContainerRule.super.getResources();
//         resources.add(RestEasyResource.class);
//         return resources;
//     }
// 
//     @Override
//     protected void before() throws Throwable {
//         // Used by Jersey Client to store cookies
//         CookieHandler.setDefault(new CookieManager());
// 
//         // we don't need a resteasy client, and the jersey one works better with redirect
//         client = new JerseyClientBuilder().build();
// 
//         // TODO use an autogenerated port...
//         System.setProperty("org.jboss.resteasy.port", "24257");
//         server = new UndertowJaxrsServer().start();
// 
//         ResteasyDeployment deployment = new ResteasyDeployment();
//         deployment.setInjectorFactoryClass(CdiInjectorFactory.class.getName());
//         deployment.setApplication(new MyApp());
//         DeploymentInfo di = server.undertowDeployment(deployment)
//                 .setContextPath("/")
//                 .setDeploymentName("DI")
//                 .setClassLoader(getClass().getClassLoader())
//                 .addListeners(Servlets.listener(Listener.class));
//         server.deploy(di);
//     }
// 
//     @Override
//     protected void after() {
//         server.stop();
//         // server.stop is not instantaneous
//         Awaitility.await().atMost(Duration.ofSeconds(5)).until(() -> {
//             try {
//                 getTarget("/").request().get();
//             } catch (ProcessingException e) {
//                 return true;
//             }
//             return false;
//         });
//         client.close();
//         CookieHandler.setDefault(null);
//     }
// 
//     @Override
//     public WebTarget getTarget(String url) {
//         return client.target(TestPortProvider.generateURL(url));
//     }
// 
//     @Override
//     public String cookieName() {
//         return SessionCookieConfig.DEFAULT_SESSION_ID;
//     }
// }
// 
// Path: testing/src/main/java/org/pac4j/jax/rs/rules/SessionContainerRule.java
// public interface SessionContainerRule extends ContainerRule {
//     
//     @Override
//     default Set<Class<?>> getResources() {
//         Set<Class<?>> resources = ContainerRule.super.getResources();
//         resources.add(TestSessionResource.class);
//         return resources;
//     }
// }


// Path: resteasy/src/test/java/org/pac4j/jax/rs/RestEasyUndertowServletTest.java
import org.pac4j.jax.rs.rules.RestEasyUndertowServletRule;
import org.pac4j.jax.rs.rules.SessionContainerRule;

package org.pac4j.jax.rs;


/**
 *
 * @author Victor Noel - Linagora
 * @since 1.0.0
 *
 */
public class RestEasyUndertowServletTest extends AbstractSessionTest {

    @Override
    protected SessionContainerRule createContainer() {
        return new RestEasyUndertowServletRule();