Quick Tip: Stashing Log Files From Domino Testcontainers
Mar 28, 2023, 11:36 AM
I've been doing a little future-proofing in the XPages Jakarta EE project lately and bumped against a common pitfall in my test setup: since I create a fresh Domino Testcontainer with each run, diagnostic information like the XPages log files are destroyed at the end of each test-suite execution.
Historically, I've combatted this manually: if I make sure to not close the container and I kill the Ryuk watcher container the framework spawns before testing is over, then the Domino container will linger around. That's fine and all, but it's obviously a bit crude. Plus, other than when I want to make subsequent HTTP calls against it, I generally want the same stuff: IBM_TECHNICAL_SUPPORT and the Equinox logs dir.
Building on a hint from a GitHub issue reply, I modified my test container to add a hook to its close event to copy the log files into the IT module's target directory.
In my DominoContainer
class, which builds up the container from my settings, I added an implementation of containerIsStopping
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @SuppressWarnings("nls") @Override protected void containerIsStopping(InspectContainerResponse containerInfo) { super.containerIsStopping(containerInfo); try { // If we can see the target dir, copy log files Path target = Paths.get(".").resolve("target"); //$NON-NLS-1$ //$NON-NLS-2$ if(Files.isDirectory(target)) { this.execInContainer("tar", "-czvf", "/tmp/IBM_TECHNICAL_SUPPORT.tar.gz", "/local/notesdata/IBM_TECHNICAL_SUPPORT"); this.copyFileFromContainer("/tmp/IBM_TECHNICAL_SUPPORT.tar.gz", target.resolve("IBM_TECHNICAL_SUPPORT.tar.gz").toString()); this.execInContainer("tar", "-czvf", "/tmp/workspace-logs.tar.gz", "/local/notesdata/domino/workspace/logs"); this.copyFileFromContainer("/tmp/workspace-logs.tar.gz", target.resolve("workspace-logs.tar.gz").toString()); } } catch(IOException | UnsupportedOperationException | InterruptedException e) { e.printStackTrace(); } } |
This will tar/gzip up the logs en masse and drop them in my project's output:
Having this happen automatically should save me a ton of hassle in the cases where I need this, and I figured it was worth sharing in case it's useful to others.