[Piglit] [PATCH v2] framework/test/opengl.py: Fix opengl fast-skipping wflinfo errors

baker.dylan.c at gmail.com baker.dylan.c at gmail.com
Mon Dec 7 16:56:40 PST 2015


From: Dylan Baker <baker.dylan.c at gmail.com>

This extends the version handling methods of the WflInfo class to handle
two kinds of errors. First, it handles getting a patch version in OpenGL
and GLSL version strings. Second, it handles getting back
WFLINFO_GL_ERROR, such as is returned on the nvidia blob driver because
of the patch version.

Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---

I'm planning to push this at the end of the day to fix the issues with
the blob drivers unless anyone objects. (that's in about an hour)

 framework/test/opengl.py        | 46 +++++++++++++++------
 framework/tests/opengl_tests.py | 88 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 123 insertions(+), 11 deletions(-)

diff --git a/framework/test/opengl.py b/framework/test/opengl.py
index 29da2d1..a3648ee 100644
--- a/framework/test/opengl.py
+++ b/framework/test/opengl.py
@@ -170,8 +170,14 @@ class WflInfo(object):
                     break
                 raise
             else:
-                ret = float(self.__getline(
-                    raw.split('\n'), 'OpenGL version string').split()[3])
+                try:
+                    # Grab the GL version string, trim any release_number values
+                    ret = float(self.__getline(
+                        raw.split('\n'),
+                        'OpenGL version string').split()[3][:3])
+                except (IndexError, ValueError):
+                    # This is caused by wlfinfo returning an error
+                    pass
                 break
         return ret
 
@@ -202,8 +208,15 @@ class WflInfo(object):
                     break
                 raise
             else:
-                ret = float(self.__getline(
-                    raw.split('\n'), 'OpenGL version string').split()[5])
+                try:
+                    # Yes, search for "OpenGL version string" in GLES
+                    # GLES doesn't support patch versions.
+                    ret = float(self.__getline(
+                        raw.split('\n'),
+                        'OpenGL version string').split()[5])
+                except (IndexError, ValueError):
+                    # This is caused by wlfinfo returning an error
+                    pass
                 break
         return ret
 
@@ -222,8 +235,14 @@ class WflInfo(object):
                     break
                 raise
             else:
-                ret = float(self.__getline(
-                    raw.split('\n'), 'OpenGL shading language').split()[-1])
+                try:
+                    # GLSL versions are M.mm formatted
+                    ret = float(self.__getline(
+                        raw.split('\n'),
+                        'OpenGL shading language').split()[-1][:4])
+                except (IndexError, ValueError):
+                    # This is caused by wflinfo returning an error
+                    pass
                 break
         return ret
 
@@ -241,11 +260,16 @@ class WflInfo(object):
                     break
                 raise
             else:
-                # GLSL ES version numbering is insane.
-                # For version >= 3 the numbers are 3.00, 3.10, etc.
-                # For version 2, they are 1.0.xx
-                ret = float(self.__getline(
-                    raw.split('\n'), 'OpenGL shading language').split()[-1][:3])
+                try:
+                    # GLSL ES version numbering is insane.
+                    # For version >= 3 the numbers are 3.00, 3.10, etc.
+                    # For version 2, they are 1.0.xx
+                    ret = float(self.__getline(
+                        raw.split('\n'),
+                        'OpenGL shading language').split()[-1][:3])
+                except (IndexError, ValueError):
+                    # Handle wflinfo internal errors
+                    pass
                 break
         return ret
 
diff --git a/framework/tests/opengl_tests.py b/framework/tests/opengl_tests.py
index 97daf2b..bec44c0 100644
--- a/framework/tests/opengl_tests.py
+++ b/framework/tests/opengl_tests.py
@@ -137,6 +137,94 @@ class TestWflInfo(object):
                         mock.Mock(return_value=rv)):
             nt.eq_(5.0, self._test.glsl_es_version)
 
+    def test_gl_version_patch(self):
+        """test.opengl.WflInfo.gl_version: Works with patch versions"""
+        rv = (
+            'Waffle platform: gbm\n'
+            'Waffle api: gl\n'
+            'OpenGL vendor string: Intel Open Source Technology Center\n'
+            'OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile\n'
+            'OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4\n'
+            'OpenGL context flags: 0x0\n'
+        )
+        with mock.patch('framework.test.opengl.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+            nt.eq_(18.0, self._test.gl_version)
+
+    def test_glsl_version_patch(self):
+        """test.opengl.WflInfo.glsl_version: Works with patch versions"""
+        rv = (
+            'Waffle platform: gbm\n'
+            'Waffle api: gl\n'
+            'OpenGL vendor string: Intel Open Source Technology Center\n'
+            'OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile\n'
+            'OpenGL version string: 1.1 (Core Profile) Mesa 11.0.4\n'
+            'OpenGL context flags: 0x0\n'
+            'OpenGL shading language version string: 9.30.7\n'
+            'OpenGL extensions: this is some extension strings.\n'
+        )
+        with mock.patch('framework.test.opengl.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+            nt.eq_(9.3, self._test.glsl_version)
+
+    def test_gl_version_err(self):
+        """test.opengl.WflInfo.gl_version: handles errors correctly"""
+        rv = (
+            'Waffle platform: gbm\n'
+            'Waffle api: gl\n'
+            'OpenGL vendor string: Intel Open Source Technology Center\n'
+            'OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile\n'
+            'OpenGL version string: WFLINFO_GL_ERROR\n'
+            'OpenGL context flags: 0x0\n'
+        )
+        with mock.patch('framework.test.opengl.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+            nt.eq_(None, self._test.gl_version)
+
+    def test_gles_version_err(self):
+        """test.opengl.WflInfo.gles_version: handles errors correctly"""
+        rv = (
+            'Waffle platform: gbm\n'
+            'Waffle api: gles3\n'
+            'OpenGL vendor string: Intel Open Source Technology Center\n'
+            'OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile\n'
+            'OpenGL version string: WFLINFO_GL_ERROR\n'
+        )
+        with mock.patch('framework.test.opengl.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+            nt.eq_(None, self._test.gles_version)
+
+    def test_glsl_version_err(self):
+        """test.opengl.WflInfo.glsl_version: handles errors correctly"""
+        rv = (
+            'Waffle platform: gbm\n'
+            'Waffle api: gl\n'
+            'OpenGL vendor string: Intel Open Source Technology Center\n'
+            'OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile\n'
+            'OpenGL version string: 1.1 (Core Profile) Mesa 11.0.4\n'
+            'OpenGL context flags: 0x0\n'
+            'OpenGL shading language version string: WFLINFO_GL_ERROR\n'
+            'OpenGL extensions: this is some extension strings.\n'
+        )
+        with mock.patch('framework.test.opengl.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+            nt.eq_(None, self._test.glsl_version)
+
+    def test_glsl_es_version_err(self):
+        """test.opengl.WflInfo.glsl_es_version: handles errors correctly"""
+        rv = (
+            'Waffle platform: gbm\n'
+            'Waffle api: gles2\n'
+            'OpenGL vendor string: Intel Open Source Technology Center\n'
+            'OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile\n'
+            'OpenGL version string: OpenGL ES 3.0 Mesa 11.0.4\n'
+            'OpenGL shading language version string: WFLINFO_GL_ERROR\n'
+            'OpenGL extensions: this is some extension strings.\n'
+        )
+        with mock.patch('framework.test.opengl.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+            nt.eq_(None, self._test.glsl_es_version)
+
 
 class TestWflInfoOSError(object):
     """Tests for the Wflinfo functions to handle OSErrors."""
-- 
2.6.3



More information about the Piglit mailing list