Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Dec 21, 2025

Tests are failing with NullPointerException when run against an empty database. Objects loaded from the database return null, causing NPEs when tests attempt to access their properties or methods.

Changes

Added null checks to 9 test classes that load objects from the database:

  • Domain tests: StudyTest, NexmlSerializationTest, SpecimenLabelTest, RowSegmentTest, PhyloTreeTest, TaxonLabelTest, NexmlSearchResultConverterTest
  • Service tests: PhyloTreeServiceImplTest, StudyServiceImplTest

Each test now checks if the loaded object is null and skips with an informative log message:

Analysis a = (Analysis) loadObject(Analysis.class);

// Skip test if database is empty
if (a == null) {
    logger.info("SKIPPED: testGetAnalyses - No Analysis data found in database. Test requires populated database.");
    return;
}

// Continue with test...

This allows the test suite to run cleanly against empty databases while still executing all tests when data is available.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • download.java.net
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • download.osgeo.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher test -Dtest=StudyTest#testGetAnalyses -pl treebase-core (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher test -Dtest=StudyTest#testGetAnalyses -DfailIfNoTests=false (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • hibernate.sourceforge.net
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java -jar /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/xml/tools/xml-extractor.jar --fileList=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/working/files-to-index15203992852405776554.list --sourceArchiveDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/src --outputDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/trap/java (dns block)
  • jakarta.apache.org
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java -jar /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/xml/tools/xml-extractor.jar --fileList=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/working/files-to-index15203992852405776554.list --sourceArchiveDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/src --outputDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/trap/java (dns block)
  • maven.indexdata.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • nexml.github.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • repository.gbif.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher test -Dtest=StudyTest#testGetAnalyses -pl treebase-core (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher test -Dtest=StudyTest#testGetAnalyses -DfailIfNoTests=false (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • repository.jboss.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher test -Dtest=StudyTest#testGetAnalyses -pl treebase-core (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher test -Dtest=StudyTest#testGetAnalyses -DfailIfNoTests=false (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • treebase.github.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/treebase/treebase org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • www.getahead.ltd.uk
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java -jar /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/xml/tools/xml-extractor.jar --fileList=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/working/files-to-index15203992852405776554.list --sourceArchiveDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/src --outputDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/trap/java (dns block)
  • www.springframework.org
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/tools/linux64/java/bin/java -jar /opt/hostedtoolcache/CodeQL/2.23.8/x64/codeql/xml/tools/xml-extractor.jar --fileList=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/working/files-to-index15203992852405776554.list --sourceArchiveDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/src --outputDir=/home/REDACTED/work/treebase/.codeql-scratch/dbs/java/trap/java (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

We are getting numerous null pointer exceptions. Either in this form:

treebase-core/src/test/java/org/cipres/treebase/domain/study/StudyTest.java 

@github-actions
github-actions
/ JUnit Test Results
org.cipres.treebase.domain.study.StudyTest ► testGetAnalyses

Failed test found in:
  treebase-core/target/surefire-reports/TEST-org.cipres.treebase.domain.study.StudyTest.xml
Error:
  java.lang.NullPointerException

treebase-core/src/test/java/org/cipres/treebase/domain/nexus/NexmlSerializationTest.java 

@github-actions
github-actions
/ JUnit Test Results
org.cipres.treebase.domain.nexus.NexmlSerializationTest ► testSerializeTree

Failed test found in:
  treebase-core/target/surefire-reports/TEST-org.cipres.treebase.domain.nexus.NexmlSerializationTest.xml
Error:
  java.lang.NullPointerException

treebase-core/src/main/java/org/cipres/treebase/domain/nexus/nexml/NexmlObjectConverter.java 

@github-actions
github-actions
/ JUnit Test Results
org.cipres.treebase.domain.nexus.NexmlSerializationTest ► testSerializeStudy

Failed test found in:
  treebase-core/target/surefire-reports/TEST-org.cipres.treebase.domain.nexus.NexmlSerializationTest.xml
Error:
  java.lang.NullPointerException

treebase-core/src/test/java/org/cipres/treebase/domain/matrix/SpecimenLabelTest.java 

@github-actions
github-actions
/ JUnit Test Results
org.cipres.treebase.domain.matrix.SpecimenLabelTest ► testGetInfo

Failed test found in:
  treebase-core/target/surefire-reports/TEST-org.cipres.treebase.domain.matrix.SpecimenLabelTest.xml
Error:
  java.lang.NullPointerException

treebase-core/src/test/java/org/cipres/treebase/domain/matrix/RowSegmentTest.java 

@github-actions
github-actions
/ JUnit Test Results
org.cipres.treebase.domain.matrix.RowSegmentTest ► testGetSpecimenInfo

Failed test found in:
  treebase-core/target/surefire-reports/TEST-org.cipres.treebase.domain.matrix.RowSegmentTest.xml
Error:
  java.lang.NullPointerException

Or like this:

org.cipres.treebase.service.tree.PhyloTreeServiceImplTest
❌ testFindByTopology3
	java.lang.NullPointerException
❌ testupdateByRearrangeNodes
	java.lang.NullPointerException

org.cipres.treebase.service.study.StudyServiceImplTest
❌ testGenerateReconstructedNexusFile
	java.lang.NullPointerException

org.cipres.treebase.domain.tree.PhyloTreeTest
❌ testBuildNewickStringPerf
	java.lang.NullPointerException

org.cipres.treebase.domain.taxon.TaxonLabelTest
❌ testFindMatricesByTaxonVariant
	java.lang.NullPointerException

org.cipres.treebase.domain.study.StudyTest
❌ testGetAnalyses
	java.lang.NullPointerException

org.cipres.treebase.domain.nexus.NexmlSerializationTest
❌ testSerializeStudy
	java.lang.NullPointerException
❌ testSerializeTree
	java.lang.NullPointerException

org.cipres.treebase.domain.nexus.NexmlSearchResultConverterTest
❌ testStudySearchSerialization
	java.lang.NullPointerException
❌ testTaxonSearchSerialization
	java.lang.NullPointerException
❌ testMatrixSearchSerialization
	java.lang.NullPointerException
❌ testTreeSearchSerialization
	java.lang.NullPointerException
❌ testTrivial
	java.lang.NullPointerException
❌ testQuickCheck

org.cipres.treebase.domain.matrix.SpecimenLabelTest
❌ testGetInfo
	java.lang.NullPointerException

org.cipres.treebase.domain.matrix.RowSegmentTest
❌ testGetSpecimenInfo
	java.lang.NullPointerException

Look if this is possibly caused because we are now testing against an empty database. If that is what's causing the NPE, trap the exception and skip the test with an informational message that this test is now skipped. Otherwise proceed as the test intends.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Co-authored-by: rvosa <106490+rvosa@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix null pointer exceptions in tests Skip tests when database is empty to prevent NPEs Dec 21, 2025
Copilot AI requested a review from rvosa December 21, 2025 20:39
@rvosa rvosa marked this pull request as ready for review December 21, 2025 20:47
@rvosa rvosa merged commit f018388 into master Dec 21, 2025
0 of 2 checks passed
@rvosa rvosa deleted the copilot/fix-null-pointer-exceptions branch December 21, 2025 20:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants