use of org.jboss.arquillian.container.spi.client.deployment.DeploymentDescription in project keycloak by keycloak.
the class DeploymentTargetModifier method generate.
@Override
public List<DeploymentDescription> generate(TestClass testClass) {
TestContext context = testContext.get();
if (context.isAdapterTest() && !context.isAdapterContainerEnabled() && !context.isAdapterContainerEnabledCluster()) {
// adapter test will be skipped, no need to genarate dependencies
return new ArrayList<>();
}
List<DeploymentDescription> deployments = super.generate(testClass);
checkTestDeployments(deployments, testClass, context.isAdapterTest());
Set<String> appServerQualifiers = getAppServerQualifiers(testClass.getJavaClass());
// no adapter test
if (appServerQualifiers.isEmpty())
return deployments;
String appServerQualifier = appServerQualifiers.stream().filter(q -> q.contains(AppServerTestEnricher.CURRENT_APP_SERVER)).findAny().orElse(null);
if (appServerQualifier.contains(";"))
return deployments;
if (appServerQualifier != null && !appServerQualifier.isEmpty()) {
for (DeploymentDescription deployment : deployments) {
final boolean containerMatches = deployment.getTarget() != null && deployment.getTarget().getName().startsWith(appServerQualifier);
if (deployment.getTarget() == null || Objects.equals(deployment.getTarget().getName(), "_DEFAULT_")) {
log.debug("Setting target container for " + deployment.getName() + ": " + appServerQualifier);
deployment.setTarget(new TargetDescription(appServerQualifier));
} else if (!containerMatches && !deployment.getArchive().getName().equals("run-on-server-classes.war")) {
// run-on-server deployment can have different target
throw new RuntimeException("Inconsistency found: target container for " + deployment.getName() + " is set to " + deployment.getTarget().getName() + " but the test class targets " + appServerQualifier);
}
}
}
return deployments;
}
use of org.jboss.arquillian.container.spi.client.deployment.DeploymentDescription in project keycloak by keycloak.
the class DeploymentTargetModifier method checkTestDeployments.
private void checkTestDeployments(List<DeploymentDescription> descriptions, TestClass testClass, boolean isAdapterTest) {
for (DeploymentDescription deployment : descriptions) {
if (deployment.getTarget() != null) {
String containerQualifier = deployment.getTarget().getName();
if (AUTH_SERVER_CURRENT.equals(containerQualifier) || (!isAdapterTest && "_DEFAULT_".equals(containerQualifier))) {
String newAuthServerQualifier = AuthServerTestEnricher.AUTH_SERVER_CONTAINER;
updateServerQualifier(deployment, testClass, newAuthServerQualifier);
} else if (containerQualifier.contains(APP_SERVER_CURRENT)) {
String suffix = containerQualifier.split(APP_SERVER_CURRENT)[1];
String newAppServerQualifier = ContainerConstants.APP_SERVER_PREFIX + AppServerTestEnricher.CURRENT_APP_SERVER + "-" + suffix;
updateServerQualifier(deployment, testClass, newAppServerQualifier);
} else {
String newServerQualifier = StringPropertyReplacer.replaceProperties(containerQualifier);
if (!newServerQualifier.equals(containerQualifier)) {
updateServerQualifier(deployment, testClass, newServerQualifier);
}
}
}
}
}
use of org.jboss.arquillian.container.spi.client.deployment.DeploymentDescription in project wildfly-swarm by wildfly-swarm.
the class DefaultDeploymentScenarioGenerator method generate.
@Override
public List<DeploymentDescription> generate(TestClass testClass) {
DefaultDeployment anno = testClass.getAnnotation(DefaultDeployment.class);
if (anno == null) {
return super.generate(testClass);
}
String classPrefix = (anno.type() == DefaultDeployment.Type.JAR ? "" : "WEB-INF/classes");
Archive<?> archive;
if (DefaultDeployment.Type.WAR.equals(anno.type())) {
WebArchive webArchive = ShrinkWrap.create(WebArchive.class, testClass.getJavaClass().getSimpleName() + ".war");
// Add the marker to also include the project dependencies
MarkerContainer.addMarker(webArchive, DependenciesContainer.ALL_DEPENDENCIES_MARKER);
archive = webArchive;
} else {
archive = ShrinkWrap.create(JavaArchive.class, testClass.getJavaClass().getSimpleName() + ".jar");
}
ClassLoader cl = testClass.getJavaClass().getClassLoader();
Set<CodeSource> codeSources = new HashSet<>();
URLPackageScanner.Callback callback = (className, asset) -> {
ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className);
ArchivePath location = new BasicPath(classPrefix, classNamePath);
archive.add(asset, location);
try {
Class<?> cls = cl.loadClass(className);
codeSources.add(cls.getProtectionDomain().getCodeSource());
} catch (ClassNotFoundException | NoClassDefFoundError e) {
// e.printStackTrace();
}
};
URLPackageScanner scanner = URLPackageScanner.newInstance(true, cl, callback, testClass.getJavaClass().getPackage().getName());
scanner.scanPackage();
Set<String> prefixes = codeSources.stream().map(e -> e.getLocation().toExternalForm()).collect(Collectors.toSet());
try {
List<URL> resources = Collections.list(cl.getResources(""));
resources.stream().filter(e -> {
for (String prefix : prefixes) {
if (e.toExternalForm().startsWith(prefix)) {
return true;
}
}
return false;
}).filter(e -> e.getProtocol().equals("file")).map(e -> getPlatformPath(e.getPath())).map(e -> Paths.get(e)).filter(e -> Files.isDirectory(e)).forEach(e -> {
try {
Files.walkFileTree(e, new SimpleFileVisitor<Path>() {
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (!file.toString().endsWith(".class")) {
String location = javaSlashize(handleExceptionalCases(archive, e.relativize(file)));
archive.add(new FileAsset(file.toFile()), location);
}
return super.visitFile(file, attrs);
}
});
} catch (IOException e1) {
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
/*
Map<ArchivePath, Node> content = archive.getContent();
for (ArchivePath each : content.keySet()) {
System.err.println(" --> " + each);
}
*/
DeploymentModules deploymentModules = testClass.getAnnotation(DeploymentModules.class);
if (deploymentModules != null) {
for (DeploymentModule each : deploymentModules.value()) {
archive.as(JARArchive.class).addModule(each.name(), each.slot());
}
}
DeploymentModule deploymentModule = testClass.getAnnotation(DeploymentModule.class);
if (deploymentModule != null) {
archive.as(JARArchive.class).addModule(deploymentModule.name(), deploymentModule.slot());
}
DeploymentDescription description = new DeploymentDescription(testClass.getName(), archive);
Class<?> mainClass = anno.main();
if (mainClass != Void.class) {
archive.add(new StringAsset(mainClass.getName()), "META-INF/arquillian-main-class");
}
description.shouldBeTestable(anno.testable());
return Collections.singletonList(description);
}
Aggregations