On Wed, May 13, 2026 at 10:02 PM Branko Čibej <[email protected]> wrote:
> On 13. 5. 26 16:41, Nathan Hartman wrote: > > On Wed, May 13, 2026 at 8:17 AM Ivan Zhakov <[email protected]> wrote: > >> On Mon, 27 Apr 2026 at 21:41, Evgeny Kotkov via dev < >> [email protected]> wrote: >> >>> The 1.15.0-rc2 release artifacts are now available for testing/signing. >>> Please get the tarballs from >>> https://dist.apache.org/repos/dist/dev/subversion >>> and add your signatures there. >>> >>> >> I encountered several new issues while trying to run the test suite on >> Windows: >> >> 1) I typically use the Python embeddable package distributed as a .zip >> archive [1][2]. This worked well for Subversion 1.14, but fails for 1.15, >> because the embeddable package does not include the venv module: >> [[[ >> File >> "C:\Ivan\SVN\svn-1.15.x\subversion\tests\cmdline\svntest\__init__.py", line >> 59, in <module> >> from . import main >> File "C:\Ivan\SVN\svn-1.15.x\subversion\tests\cmdline\svntest\main.py", >> line 43, in <module> >> import venv >> ModuleNotFoundError: No module named 'venv' >> ]]] >> >> The workaround is to perform a full installation of Python via an >> exe-based installer or package manager. This could be inconvenient for >> package maintainers and automated tools, as it requires modifying the host >> environment rather than simply extracting and using a portable binary. >> >> 2) Running the tests in an offline environment now introduces a 75-second >> delay (5 retries x 15s) before the tests start. This is caused by attempts >> to fetch Python packages: >> [[[ >> Testing Release configuration on local repository. >> WARNING: Retrying (Retry(total=4, connect=None, read=None, >> redirect=None, status=None)) after connection broken by >> 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object >> at 0x00000298BBEEB010>, 'Connection to pypi.org timed out. (connect >> timeout=15)')': /simple/lxml/ >> ... >> ]]] >> >> This may reduce reproducibility and potentially cause issues for package >> maintainers building in offline or hardened environments. >> >> For example, here is a quote from Debian Policy [3]: >> [[[ >> Except for packages in the non-free archive with the Autobuild control >> field unset or set to no, required targets must not attempt network access >> to other hosts. Only access via the loopback interface to services on the >> build host that have been started by the build is allowed. >> ]]] >> >> 3) I haven't checked the details yet, but if we don't pin the >> versions/signatures of the fetched packages, this may introduce a supply >> chain attack threat for anyone running the Python tests. Because the test >> runner now includes a step that automatically downloads and executes code >> from a remote URL. >> >> Thoughts? >> >> [1] https://www.python.org/downloads/windows/ >> [2] >> https://www.python.org/ftp/python/3.14.5/python-3.14.5-embed-amd64.zip >> [3] https://www.debian.org/doc/debian-policy/ch-source.html >> >> -- >> Ivan Zhakov >> > > > I have the same concerns and didn't have an opportunity to articulate > them. Thank you for doing so! > > This was added in r1925717 and followed up in r1925899. > > Prior to r1925717 we didn't run pip from the test suite at all. Now we > are using pip to install lxml [1] and rnc2rng [2]. > > Normally I would ask if we could just copy the relevant files but > unfortunately these appear to be pretty hefty packages in their own > right. > > It looks like nothing will be fetched if the system happens to have > lxml and rnc2rng already. > > Otherwise... At the very least, we should pin the versions/signatures > as Ivan suggests, both for consistency across runs and to mitigate > potential supply chain attacks. > > May I suggest going even further: if the system doesn't have these > packages, the tests that require them could just be skipped. Yes, it's > convenient to have the test suite fetch dependencies automatically, > but I think it isn't the test suite's job to install stuff. It should > only run tests. Just my .02... > > > > No need to skip the tests, svntest.verify.validate_xml_schema() already > has a graceful fallback if lxml isn't found, and so does > svntest.main.is_bad_xml_fatal(). > > As for "the system not having these dependencies", no system will unless > you force developers to create a Python venv just for tests. Instead, we > create that venv for tests in the test suite. > > As for package sizes, lxml especially depends on a platform-specific > native library. Including that in our repo is a non-starter. As it is now, > the test suite creates that virtual environment once in the test binary > directory. > > We can do (one of or all of) the following: > > > 1. Pin the dependency versions. This is a one-liner change of > SVN_TESTS_REQUIRE in svntest.main > 2. Do not fail if the 'venv' module isn't available. That is a > one-liner change in svntest.main where the module is imported. Just my 2 > cents, a Python3 installation without that module is not a Python3 > installation. > 3. Have an option to turn off creating the virtualenv and installing > dependencies even if we have the venv module. There's already an option > --python-venv, we could introduce a special value that means "don't create > the venv". It would be up to whoever is running the test suite in an > isolated environment to turn on that option. > > > Then there is schema conversion, that's built into Makefile.in and > probably not replicated in the CMake build. > > Personally I find it unacceptable that we had all these schemas but never > actually tested the --xml output of our commands against them. It has been > a while since I did this but I think there were a couple cases where we > generated invalid XML. This addition to the tests caught those cases. > We already ask users to provide their own version of APR, Serf, Expat, Zlib, lz4, utf8proc, sqlite, httpd - and those are only required dependencies not even including more exotic ones. Of course because it's a more unix-ish solution where the environment defines how an application should be built and configured. What's so exceptional about the Python test-suite? Maybe I want some specific version of lxml? Perhaps there is a bug that I have locally fixed? -- Timofei Zhakov

