Jens Geyer created THRIFT-6113:
----------------------------------

             Summary: test_keyword_escape.py regression test silently skips 
(thrift compiler not found) in CI and local builds
                 Key: THRIFT-6113
                 URL: https://issues.apache.org/jira/browse/THRIFT-6113
             Project: Thrift
          Issue Type: Bug
          Components: Python - Library
            Reporter: Jens Geyer


The Python keyword-escaping regression test added in THRIFT-5927 
(lib/py/test/test_compiler/test_keyword_escape.py) never actually exercises the 
compiler in CI, and can pick up the wrong compiler locally.

Root causes:

1. lib/py/Makefile.am's check-local target invokes the test as a plain 
"$(PYTHON) test/test_compiler/test_keyword_escape.py", without passing the 
THRIFT make variable through as an environment variable. Every other 
Makefile.am in the tree that needs the compiler at test time defines/exports 
THRIFT explicitly (e.g. "THRIFT = $(top_builddir)/compiler/cpp/thrift"); this 
one doesn't, so the test script's os.environ['THRIFT'] lookup is always empty 
when run via "make check".

2. test_keyword_escape.py's find_thrift() fallback then tries two relative-path 
guesses to locate the compiler in the build tree, but both are off by one 
directory level (3 x "../" instead of 4, from lib/py/test/test_compiler/), so 
they resolve to lib/compiler/cpp/thrift and lib/build/compiler/cpp/bin/thrift 
instead of the correct compiler/cpp/thrift and build/compiler/cpp/bin/thrift.

With neither the environment variable nor the fallback working, and no 
system-wide "thrift" in PATH on a clean CI runner, find_thrift() returns None 
and the test prints "WARNING: thrift compiler not found, skipping test" and 
returns 0 (success). This has been true on every CI run since the THRIFT-5927 
fix was merged (see .github/workflows/build.yml, lib-python job, which 
downloads the compiler artifact to exactly compiler/cpp/thrift -- the path the 
broken fallback fails to reach), so the regression test currently provides no 
actual coverage in CI.

Locally, the same missing-env-var issue means find_thrift() falls through to a 
PATH search ('thrift', /usr/local/bin/thrift, /usr/bin/thrift) before ever 
trying the build tree; if a different thrift binary happens to be on PATH (e.g. 
from a prior "make install" or a distro package), the test silently exercises 
that binary instead of the one just built, which can resurface already-fixed 
issues under a misleading error.

Fix: pass THRIFT=$(THRIFT) through explicitly on the check-local recipe line, 
matching the convention used elsewhere in the tree, and correct the off-by-one 
in the relative-path fallback so standalone invocations (without make) still 
work too.

Found while investigating a report on THRIFT-5927 that the fix appeared broken 
on master; confirmed the generator fix itself is correct -- this is a 
test/build-infrastructure gap only.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to