Don't allow QuarkusUnitTest access to classes in the test directory that are not part of the deployment

This commit is contained in:
Stuart Douglas
2020-01-28 12:35:51 +11:00
parent 91784b105e
commit 19a3f09c82
32 changed files with 93 additions and 23 deletions

View File

@@ -21,6 +21,7 @@ public class DynamodbMissingInterceptorConfigTest {
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setExpectedException(ConfigurationError.class)
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClass(BadInterceptor.class)
.addAsResource("missing-interceptor-config.properties", "application.properties"));
@Test

View File

@@ -12,6 +12,7 @@ public class BcryptPasswordMapperTest extends JdbcSecurityRealmTest {
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("bcrypt-password-mapper/import.sql")
.addAsResource("bcrypt-password-mapper/application.properties", "application.properties"));
}

View File

@@ -19,6 +19,7 @@ public class CustomRoleDecoderTest extends JdbcSecurityRealmTest {
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClassesWithCustomRoleDecoder)
.addAsResource("custom-role-decoder/import.sql")
.addAsResource("custom-role-decoder/application.properties", "application.properties"));
}

View File

@@ -12,6 +12,7 @@ public class MinimalConfigurationTest extends JdbcSecurityRealmTest {
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("minimal-config/import.sql")
.addAsResource("minimal-config/application.properties", "application.properties"));
}

View File

@@ -12,6 +12,8 @@ public class MultipleDataSourcesTest extends JdbcSecurityRealmTest {
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("multiple-data-sources/users.sql")
.addAsResource("multiple-data-sources/permissions.sql")
.addAsResource("multiple-data-sources/application.properties", "application.properties"));
}

View File

@@ -12,6 +12,7 @@ public class MultipleQueriesConfigurationTest extends JdbcSecurityRealmTest {
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("multiple-queries/import.sql")
.addAsResource("multiple-queries/application.properties", "application.properties"));
}

View File

@@ -19,6 +19,7 @@ public class JPAValidationTestCase {
static QuarkusUnitTest runner = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(MyEntity.class, JPATestValidationResource.class)
.addAsResource("application.properties")
.addAsResource(new StringAsset(""), "import.sql")); // define an empty import.sql file
@Test

View File

@@ -20,7 +20,10 @@ public class ConstraintValidatorLocalesTest {
@RegisterExtension
static final QuarkusUnitTest test = new QuarkusUnitTest().setArchiveProducer(() -> ShrinkWrap
.create(JavaArchive.class).addClasses(MyBean.class));
.create(JavaArchive.class).addClasses(MyBean.class)
.addAsResource("application.properties")
.addAsResource("ValidationMessages.properties")
.addAsResource("ValidationMessages_fr_FR.properties"));
@Test
public void testConstraintLocale() {

View File

@@ -7,6 +7,8 @@ import java.time.ZoneId;
import org.jboss.logmanager.formatters.JsonFormatter;
import org.jboss.logmanager.formatters.StructuredFormatter;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -16,6 +18,7 @@ public class JsonFormatterCustomConfigTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addClasses(JsonFormatterDefaultConfigTest.class))
.withConfigurationResource("application-json-formatter-custom.properties");
@Test

View File

@@ -16,6 +16,7 @@ public class SentryLoggerCustomTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setAllowTestClassOutsideDeployment(true)
.withConfigurationResource("application-sentry-logger-custom.properties");
@Test

View File

@@ -15,6 +15,7 @@ public class SentryLoggerDisabledTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setAllowTestClassOutsideDeployment(true)
.withConfigurationResource("application-sentry-logger-disabled.properties");
@Test

View File

@@ -23,6 +23,7 @@ public class SentryLoggerTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setAllowTestClassOutsideDeployment(true)
.withConfigurationResource("application-sentry-logger-default.properties");
@Test

View File

@@ -13,6 +13,7 @@ public class SentryLoggerWrongTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setAllowTestClassOutsideDeployment(true)
.withConfigurationResource("application-sentry-logger-wrong.properties")
.setExpectedException(ConfigurationException.class);

View File

@@ -14,7 +14,8 @@ import io.restassured.RestAssured;
public class DefaultGroupsUnitTest {
private static Class<?>[] testClasses = {
DefaultGroupsEndpoint.class
DefaultGroupsEndpoint.class,
TokenUtils.class
};
/**
* The test generated JWT token string
@@ -26,6 +27,8 @@ public class DefaultGroupsUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("TokenNoGroups.json")
.addAsResource("applicationDefaultGroups.properties", "application.properties"));
@BeforeEach

View File

@@ -22,7 +22,8 @@ import io.restassured.response.Response;
public class JwtAuthUnitTest {
private static Class[] testClasses = {
JsonValuejectionEndpoint.class
JsonValuejectionEndpoint.class,
TokenUtils.class
};
/**
* The test generated JWT token string
@@ -38,6 +39,8 @@ public class JwtAuthUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("Token1.json")
.addAsResource("application.properties"));
@BeforeEach

View File

@@ -14,7 +14,8 @@ import io.restassured.RestAssured;
public class JwtCookieUnitTest {
private static Class<?>[] testClasses = {
DefaultGroupsEndpoint.class
DefaultGroupsEndpoint.class,
TokenUtils.class
};
/**
* The test generated JWT token string
@@ -26,6 +27,8 @@ public class JwtCookieUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("TokenNoGroups.json")
.addAsResource("applicationJwtCookie.properties", "application.properties"));
@BeforeEach

View File

@@ -24,7 +24,8 @@ import io.restassured.RestAssured;
*/
public class PrimitiveInjectionUnitTest {
private static Class[] testClasses = {
PrimitiveInjectionEndpoint.class
PrimitiveInjectionEndpoint.class,
TokenUtils.class
};
/**
@@ -44,6 +45,8 @@ public class PrimitiveInjectionUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("Token1.json")
.addAsResource("application.properties"));
@BeforeEach

View File

@@ -21,7 +21,8 @@ import io.restassured.RestAssured;
public class PrincipalInjectionUnitTest {
private static Class[] testClasses = {
PrincipalInjectionEndpoint.class
PrincipalInjectionEndpoint.class,
TokenUtils.class
};
/**
* The test generated JWT token string
@@ -37,6 +38,8 @@ public class PrincipalInjectionUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("Token1.json")
.addAsResource("application.properties"));
@BeforeEach

View File

@@ -21,7 +21,8 @@ import io.restassured.RestAssured;
public class RequiredClaimsUnitTest {
private static Class[] testClasses = {
RequiredClaimsEndpoint.class
RequiredClaimsEndpoint.class,
TokenUtils.class
};
/**
@@ -41,6 +42,8 @@ public class RequiredClaimsUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("RequiredClaims.json")
.addAsResource("application.properties"));
@BeforeEach

View File

@@ -17,7 +17,8 @@ import io.restassured.response.Response;
public class RolesAllowedUnitTest {
private static Class[] testClasses = {
RolesEndpoint.class
RolesEndpoint.class,
TokenUtils.class
};
/**
* The test generated JWT token string
@@ -33,6 +34,9 @@ public class RolesAllowedUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("Token1.json")
.addAsResource("Token2.json")
.addAsResource("application.properties"));
@BeforeEach

View File

@@ -20,7 +20,8 @@ import io.restassured.response.Response;
public class ScopingUnitTest {
private static Class<?>[] testClasses = {
DefaultScopedEndpoint.class,
RequestScopedEndpoint.class
RequestScopedEndpoint.class,
TokenUtils.class
};
@RegisterExtension
@@ -28,6 +29,9 @@ public class ScopingUnitTest {
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(testClasses)
.addAsResource("publicKey.pem")
.addAsResource("privateKey.pem")
.addAsResource("Token1.json")
.addAsResource("Token2.json")
.addAsResource("application.properties"));
@Test

View File

@@ -19,6 +19,7 @@ public class ServletDestroyTestCase {
static QuarkusUnitTest runner = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(PreDestroyServlet.class))
.setAllowTestClassOutsideDeployment(true)
.setAfterUndeployListener(() -> {
try {
Assertions.assertEquals("Servlet Destroyed", Messages.MESSAGES.poll(2, TimeUnit.SECONDS));

View File

@@ -32,7 +32,8 @@ public class CoresSecurityTestCase {
static QuarkusUnitTest test = new QuarkusUnitTest().setArchiveProducer(new Supplier<JavaArchive>() {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class).addClasses(TestIdentityProvider.class, PathHandler.class)
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityProvider.class, TestIdentityController.class, PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -32,7 +32,8 @@ public class DefaultDenyTestCase {
static QuarkusUnitTest test = new QuarkusUnitTest().setArchiveProducer(new Supplier<JavaArchive>() {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class).addClasses(TestIdentityProvider.class, PathHandler.class)
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityProvider.class, TestIdentityController.class, PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -35,7 +35,8 @@ public class FormAuthCookiesTestCase {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityProvider.class, TestTrustedIdentityProvider.class, PathHandler.class)
.addClasses(TestIdentityProvider.class, TestIdentityController.class, TestTrustedIdentityProvider.class,
PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -32,7 +32,8 @@ public class FormAuthNoRedirectTestCase {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityProvider.class, TestTrustedIdentityProvider.class, PathHandler.class)
.addClasses(TestIdentityProvider.class, TestIdentityController.class, TestTrustedIdentityProvider.class,
PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -33,7 +33,8 @@ public class FormAuthTestCase {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityProvider.class, TestTrustedIdentityProvider.class, PathHandler.class)
.addClasses(TestIdentityProvider.class, TestTrustedIdentityProvider.class, TestIdentityController.class,
PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -30,7 +30,8 @@ public class PermitDenyAllTestCase {
static QuarkusUnitTest test = new QuarkusUnitTest().setArchiveProducer(new Supplier<JavaArchive>() {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class).addClasses(TestIdentityProvider.class, PathHandler.class)
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityController.class, TestIdentityProvider.class, PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -33,7 +33,8 @@ public class RolesAllowedTestCase {
static QuarkusUnitTest test = new QuarkusUnitTest().setArchiveProducer(new Supplier<JavaArchive>() {
@Override
public JavaArchive get() {
return ShrinkWrap.create(JavaArchive.class).addClasses(TestIdentityProvider.class, PathHandler.class)
return ShrinkWrap.create(JavaArchive.class)
.addClasses(TestIdentityController.class, TestIdentityProvider.class, PathHandler.class)
.addAsResource(new StringAsset(APP_PROPS), "application.properties");
}
});

View File

@@ -21,7 +21,7 @@ public class CodecTest {
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap
.create(JavaArchive.class).addClasses(MyBean.class, MyPetCodec.class));
.create(JavaArchive.class).addClasses(MyBean.class, MyPetCodec.class, Person.class, Pet.class));
@Inject
MyBean bean;

View File

@@ -9,7 +9,6 @@ import java.util.Map;
import javax.inject.Inject;
import org.jboss.logging.Logger;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
@@ -25,8 +24,6 @@ import io.quarkus.vault.test.VaultTestLifecycleManager;
@QuarkusTestResource(VaultTestLifecycleManager.class)
public class VaultAppRoleITCase {
private static final Logger log = Logger.getLogger(VaultITCase.class);
@RegisterExtension
static final QuarkusUnitTest config = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)

View File

@@ -50,6 +50,8 @@ import org.junit.jupiter.api.extension.TestInstantiationException;
import io.quarkus.bootstrap.app.CuratedApplication;
import io.quarkus.bootstrap.app.QuarkusBootstrap;
import io.quarkus.bootstrap.app.RunningQuarkusApplication;
import io.quarkus.bootstrap.classloading.ClassPathElement;
import io.quarkus.bootstrap.classloading.QuarkusClassLoader;
import io.quarkus.builder.BuildChainBuilder;
import io.quarkus.builder.BuildContext;
import io.quarkus.builder.BuildException;
@@ -96,6 +98,8 @@ public class QuarkusUnitTest
private Class<?> actualTestClass;
private Object actualTestInstance;
private boolean allowTestClassOutsideDeployment;
public QuarkusUnitTest setExpectedException(Class<? extends Throwable> expectedException) {
return assertException(t -> {
Throwable i = t;
@@ -161,6 +165,16 @@ public class QuarkusUnitTest
return this;
}
/**
* Normally access to any test classes that are not packaged in the deployment will result
* in a ClassNotFoundException. If this is true then access is allowed, which can be useful
* when testing shutdown behaviour.
*/
public QuarkusUnitTest setAllowTestClassOutsideDeployment(boolean allowTestClassOutsideDeployment) {
this.allowTestClassOutsideDeployment = allowTestClassOutsideDeployment;
return this;
}
private void exportArchive(Path deploymentDir, Class<?> testClass) {
try {
JavaArchive archive = getArchiveProducerOrDefault();
@@ -362,11 +376,18 @@ public class QuarkusUnitTest
final Path testLocation = PathTestHelper.getTestClassesLocation(testClass);
try {
curatedApplication = QuarkusBootstrap.builder(deploymentDir)
QuarkusBootstrap.Builder builder = QuarkusBootstrap.builder(deploymentDir)
.setMode(QuarkusBootstrap.Mode.TEST)
.addExcludedPath(testLocation)
.setProjectRoot(testLocation)
.build().bootstrap();
.setProjectRoot(testLocation);
if (!allowTestClassOutsideDeployment) {
builder
.setBaseClassLoader(
QuarkusClassLoader
.builder("QuarkusUnitTest ClassLoader", getClass().getClassLoader(), false)
.addBannedElement(ClassPathElement.fromPath(testLocation)).build());
}
curatedApplication = builder.build().bootstrap();
runningQuarkusApplication = new AugmentActionImpl(curatedApplication, customizers)
.createInitialRuntimeApplication()