mirror of
https://github.com/opencv/opencv.git
synced 2026-07-26 05:43:05 +04:00
9c487708f9
CI (Ubuntu ARM64 x2) showed the Python test suite aborting the whole process with exit code 134: on a Qt-enabled build, namedWindow() tried the "xcb" platform plugin, found no display (the Python test step, unlike the C++ gtest step, does not run under xvfb-run), and Qt aborted the process instead of raising a catchable exception -- so the existing try/except around namedWindow never got a chance to run. Fix: set QT_QPA_PLATFORM=offscreen (only if not already set) before any GUI call. "offscreen" is the platform plugin Qt ships specifically for headless/CI use, and is listed as available in the failing CI job's own log output. Verified locally: built opencv_python3 with WITH_QT=ON (real Qt6, not the WITH_QT=OFF build used in the initial verification), and confirmed that in a clean environment (no DISPLAY, no QT_QPA_PLATFORM preset), namedWindow + saveWindowParameters + loadWindowParameters all succeed with this fix, where they would previously depend on a native display backend being reachable.
43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
#!/usr/bin/env python
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
|
|
# Force Qt's headless-safe platform plugin when nothing else is already
|
|
# configured. Without this, namedWindow() on a Qt-enabled build with no
|
|
# display server available (e.g. CI workers, which do not run the Python
|
|
# test suite under a virtual framebuffer) aborts the whole process instead
|
|
# of raising a catchable exception -- so this must be set *before* the
|
|
# first GUI call, and a plain try/except around namedWindow is not enough.
|
|
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
|
|
|
|
import cv2 as cv
|
|
|
|
from tests_common import NewOpenCVTests
|
|
|
|
|
|
class window_parameters_test(NewOpenCVTests):
|
|
|
|
def test_save_load_window_parameters(self):
|
|
window_name = "test_save_load_window_parameters"
|
|
try:
|
|
cv.namedWindow(window_name, cv.WINDOW_NORMAL)
|
|
except cv.error:
|
|
self.skipTest("No GUI backend available in this build/environment")
|
|
|
|
try:
|
|
# Should not raise when the library is built with a backend that
|
|
# supports persisting window state (currently: Qt).
|
|
cv.saveWindowParameters(window_name)
|
|
cv.loadWindowParameters(window_name)
|
|
except cv.error as e:
|
|
# Expected on builds without Qt support (see NO_QT_ERR_MSG in window.cpp)
|
|
self.skipTest("saveWindowParameters/loadWindowParameters require the Qt "
|
|
"highgui backend: " + str(e))
|
|
finally:
|
|
cv.destroyWindow(window_name)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
NewOpenCVTests.bootstrap()
|