@@ -391,13 +391,14 @@ jobs:
391391 lucee-express/lucee-server/context/logs/
392392
393393 test-config-override :
394- name : Test - Config override (LUCEE_WEBSOCKET_CONFIG + alt directory)
394+ name : Test - Config override + reflection hot-reinstall
395395 runs-on : ubuntu-latest
396396 needs : [build-extension]
397397 env :
398398 LUCEE_LOGGING_FORCE_APPENDER : console
399399 LUCEE_LOGGING_FORCE_LEVEL : info
400400 LUCEE_WEBSOCKET_CONFIG : /tmp/ws-alt-config.json
401+ LUCEE_ADMIN_PASSWORD : testadmin
401402 steps :
402403 - name : Checkout
403404 uses : actions/checkout@v6
@@ -455,7 +456,13 @@ jobs:
455456 - name : Configure Tomcat port
456457 run : sed -i 's/port="8080"/port="8888"/g' lucee-express/conf/server.xml
457458
458- - name : Start Lucee Express (with LUCEE_WEBSOCKET_CONFIG in env)
459+ - name : Resolve built .lex absolute path
460+ run : |
461+ LEX_FILE=$(ls $GITHUB_WORKSPACE/extension/*.lex | head -1)
462+ echo "WS_EXT_LEX_PATH=$LEX_FILE" >> $GITHUB_ENV
463+ echo "Resolved .lex to: $LEX_FILE"
464+
465+ - name : Start Lucee Express (with LUCEE_WEBSOCKET_CONFIG + LUCEE_ADMIN_PASSWORD in env)
459466 run : cd lucee-express && ./bin/catalina.sh start
460467
461468 - name : Wait for server
@@ -479,6 +486,33 @@ jobs:
479486 echo "CONFIG_OVERRIDE_FAILED=true" >> $GITHUB_OUTPUT
480487 fi
481488
489+ - name : Run reflection hot-reinstall test
490+ id : reflection-test
491+ continue-on-error : true
492+ run : |
493+ RESPONSE=$(curl -s -w "\n%{http_code}" http://localhost:8888/tests/integration/test-reflection-reinstall.cfm)
494+ HTTP_CODE=$(echo "$RESPONSE" | tail -1)
495+ BODY=$(echo "$RESPONSE" | sed '$d')
496+ echo "$BODY"
497+ if [ "$HTTP_CODE" != "200" ] || echo "$BODY" | grep -q "FAILED"; then
498+ echo "REFLECTION_FAILED=true" >> $GITHUB_OUTPUT
499+ fi
500+
501+ - name : Verify reflection warning in catalina.out
502+ id : reflection-log-check
503+ continue-on-error : true
504+ run : |
505+ # The reflection fallback path logs "calling [onOpen] via reflection, servlet engine restart needed"
506+ # (see BaseWebSocketEndpoint and LDEV-6221). If the hot re-install actually exercised this path,
507+ # the warning will appear in catalina.out. If not, the round-trip test is lying.
508+ if grep -q "calling \[.*\] via reflection" lucee-express/logs/catalina.out; then
509+ echo "Reflection warning found — hot re-install exercised the fallback path"
510+ grep "calling \[.*\] via reflection" lucee-express/logs/catalina.out
511+ else
512+ echo "REFLECTION_LOG_MISSING=true" >> $GITHUB_OUTPUT
513+ echo "Reflection warning NOT found in catalina.out — hot re-install did not hit the fallback path"
514+ fi
515+
482516 - name : Dump WebSocket event logs
483517 if : always()
484518 run : |
@@ -504,8 +538,8 @@ jobs:
504538 lucee-express/logs/
505539 lucee-express/lucee-server/context/logs/
506540
507- - name : Fail if test failed
508- if : steps.config-override-test.outputs.CONFIG_OVERRIDE_FAILED == 'true'
541+ - name : Fail if any sub- test failed
542+ if : steps.config-override-test.outputs.CONFIG_OVERRIDE_FAILED == 'true' || steps.reflection-test.outputs.REFLECTION_FAILED == 'true' || steps.reflection-log-check.outputs.REFLECTION_LOG_MISSING == 'true'
509543 run : exit 1
510544
511545 deploy :
0 commit comments