alkacon / opencms-core

The Java open source content management system by Alkacon Software
http://www.opencms.org
GNU Lesser General Public License v2.1
525 stars 576 forks source link

broken test: org.opencms.main.TestCmsShell.testCmsShell #790

Closed gallardo closed 6 months ago

gallardo commented 7 months ago

The test fails if run as single test:

./gradlew -i testSingle -PtestCaseToRun="org.opencms.main.TestCmsShell.testCmsShell"
...
> Task :testSingle
...

org.opencms.main.TestCmsShell > testCmsShell STANDARD_OUT

     +------------------------------------------------------------------------------
     | Running OpenCms test case:
     | org.opencms.main.TestCmsShell#testCmsShell
     +------------------------------------------------------------------------------
...
  21 Feb 2024 13:47:09,849 ERROR [pencms.search.A_CmsSearchIndex: 182] The project "Offline" configured for search index "Offline project (VFS)" does not exist.
    2024-02-21 13:47:09,850 Test worker ERROR An exception occurred processing Appender TESTLOG java.lang.RuntimeException: The project "Offline" configured for search index "Offline project (VFS)" does not exist.
        at org.apache.logging.log4j.core.appender.OpenCmsTestLogAppender.append(OpenCmsTestLogAppender.java:154)
        at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:134)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:125)
        at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:89)
        at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:542)
        at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:500)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:483)
        at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:417)
        at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
        at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2205)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2159)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2142)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:1994)
        at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1852)
        at org.apache.logging.log4j.jcl.Log4jLog.error(Log4jLog.java:111)
        at org.opencms.search.A_CmsSearchIndex.checkConfiguration(A_CmsSearchIndex.java:182)
        at org.opencms.search.CmsSearchManager.initSearchIndexes(CmsSearchManager.java:2919)
        at org.opencms.search.CmsSearchManager.initializeIndexes(CmsSearchManager.java:1757)
        at org.opencms.search.CmsSearchManager.initialize(CmsSearchManager.java:1723)
        at org.opencms.main.OpenCmsCore.initConfiguration(OpenCmsCore.java:1772)
        at org.opencms.main.OpenCmsCore.upgradeRunlevel(OpenCmsCore.java:2578)
        at org.opencms.main.CmsShell.<init>(CmsShell.java:569)
        at org.opencms.main.TestCmsShell.testCmsShell(TestCmsShell.java:93)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at junit.framework.TestCase.runTest(TestCase.java:177)
        at org.opencms.test.OpenCmsTestCase.runTest(OpenCmsTestCase.java:3966)
        at junit.framework.TestCase.runBare(TestCase.java:142)
        at junit.framework.TestResult$1.protect(TestResult.java:122)
        at junit.framework.TestResult.runProtected(TestResult.java:142)
        at junit.framework.TestResult.run(TestResult.java:125)
        at junit.framework.TestCase.run(TestCase.java:130)
        at junit.framework.TestSuite.runTest(TestSuite.java:241)
        at junit.framework.TestSuite.run(TestSuite.java:236)
        at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
        at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
        at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
        at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
        at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
        at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
        at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
        at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
        at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
        at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
        at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
        at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
        at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
...
org.opencms.main.TestCmsShell > testCmsShell FAILED
    java.lang.NullPointerException
        at java.base/java.lang.Throwable.printStackTrace(Throwable.java:657)
        at java.base/java.lang.Throwable.printStackTrace(Throwable.java:648)
        at org.opencms.main.CmsShell.execute(CmsShell.java:826)
        at org.opencms.main.CmsShell.execute(CmsShell.java:741)
        at org.opencms.main.TestCmsShell.testCmsShell(TestCmsShell.java:109)

Gradle Test Executor 9 finished executing tests.

> Task :testSingle

1 test completed, 1 failed
gallardo commented 7 months ago

After a quick analysis of the code, there are at least two problematic aspects:

gallardo commented 7 months ago

The culprit is the logging of an error message on initialization of the "Offline project (VFS)" configured for the project "Offline" (See https://github.com/alkacon/opencms-core/blob/master/test/data/WEB-INF/base/opencms-search.xml#L200-L209), that has not been created.