]
Gerhard Poul updated ARQ-2153:
------------------------------
Status: Resolved (was: Pull Request Sent)
Fix Version/s: was_1.0.0.next
Resolution: Done
Enable @Deployment @ShouldThrowException(DefinitionException.class)
in WebSphere Liberty Managed Container
----------------------------------------------------------------------------------------------------------
Key: ARQ-2153
URL:
https://issues.jboss.org/browse/ARQ-2153
Project: Arquillian
Issue Type: Feature Request
Components: WebSphere Containers
Affects Versions: 1.0.0.Final
Environment: MicroProfile FaultTolerance TCK testing with
arquillian-wlp-managed-8.5 container.
For example testing
https://github.com/eclipse/microprofile-fault-tolerance/blob/master/tck/s...
with open Liberty or any other Arquillian test testing for DefinitionExceptions that
cause
Deployment Exceptions.
Reporter: Gordon Hutchison
Assignee: Gerhard Poul
Priority: Minor
Fix For: was_1.0.0.next
When running the MicroProfile Fault Tolerance TCK there are numerous tests'
deploy methods that have:
{code:java}
@Deployment
@ShouldThrowException(DefinitionException.class)
public static WebArchive deploy() {...
{code}
The current wlp-managed-8.5 container return these as Deployment
Exceptions to the test client which makes the TCK tests fail even if the server
has raised a definition exception.
I have a code patch from an IBM colleague Nathan Mittlestat (whose permission I have to
make this 'issue' and a pull request from on his behalf ) along the lines of:
{code:java}
private void checkForDefinitionExceptions(String applicationName)
{
String messagesFile = containerConfiguration.getWlpHome() +
"/usr/servers/" + containerConfiguration.getServerName() +
"/logs/messages.log";
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new
FileInputStream(messagesFile)));
String line;
while ((line = br.readLine()) != null) {
if (line.contains("CWWKZ0002E: An exception occurred while starting the
application " + applicationName + ".")
&&
(line.contains("org.jboss.weld.exceptions.DefinitionException") ||
line.contains("javax.enterprise.inject.spi.DefinitionException"))) {
System.out.println("############DEBUG found CWWKZ0002E for
application: " + applicationName);
System.out.println(line);
throw new DefinitionException(line);
}
}
} catch (IOException e) {
System.err.println("Exception while reading messages.log" +
e.toString());
e.printStackTrace();
// } catch (FileNotFoundException e) {
// System.err.println("Exception while reading messages.log" +
e.toString());
// e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (Exception e) {
System.err.println("Exception while closing bufferedreader " +
e.toString());
e.printStackTrace();
}
}
}
{code}
This method is called in waitForApplicationTargetState if a wrapping Deployment
exception
is observed:
{code:java}
} catch (Exception e) {
checkForDefinitionExceptions(applicationName);
throw new DeploymentException("Exception while checking application
state.", e);
}
{code}
I will do a PR shortly.