Mir

Merge lp:~vanvugt/mir/fix-1264968 into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 1305
Proposed branch: lp:~vanvugt/mir/fix-1264968
Merge into: lp:mir
Diff against target: 257 lines (+140/-36)
3 files modified
include/test/mir_test_doubles/mock_gl.h (+62/-36)
tests/mir_test_doubles/mock_gl.cpp (+71/-0)
tests/unit-tests/compositor/test_gl_renderer.cpp (+7/-0)
To merge this branch: bzr merge lp:~vanvugt/mir/fix-1264968
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Daniel van Vugt Approve
Andreas Pokorny (community) Approve
Review via email: mp+200216@code.launchpad.net

Commit message

Implement missing OpenGL mocks. Until now, accidentally calling the real gl
functions was harmless. But with a recent update to libhybris, it now
causes SIGSEGV in mir_unit_tests. (LP: #1264968)

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Andreas Pokorny (andreas-pokorny) :
review: Approve
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Since merging with the latest development branch I'm now seeing:

The following tests FAILED:
  82 - mir_unit_tests.GLRendererSetupProcess.* (Failed)
Errors while running CTest

review: Needs Fixing
Revision history for this message
Daniel van Vugt (vanvugt) :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Jenkins is a bit slow. Those failures are what I just fixed.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/test/mir_test_doubles/mock_gl.h'
--- include/test/mir_test_doubles/mock_gl.h 2013-12-18 02:19:19 +0000
+++ include/test/mir_test_doubles/mock_gl.h 2014-01-02 03:31:27 +0000
@@ -35,45 +35,71 @@
35 MockGL();35 MockGL();
36 ~MockGL();36 ~MockGL();
3737
38 MOCK_METHOD0(glGetError, GLenum ());38 // Please keep these ordered by name
39 MOCK_METHOD1(glGetString, const GLubyte*(GLenum));39 MOCK_METHOD1(glActiveTexture, void(GLenum));
40 MOCK_METHOD1(glUseProgram, void (GLuint));40 MOCK_METHOD2(glAttachShader, void(GLuint, GLuint));
41 MOCK_METHOD1(glEnable, void (GLenum));41 MOCK_METHOD2(glBindBuffer, void(GLenum, GLuint));
42 MOCK_METHOD1(glDisable, void (GLenum));
43 MOCK_METHOD2(glBlendFunc, void (GLenum, GLenum));
44 MOCK_METHOD1(glActiveTexture, void (GLenum));
45 MOCK_METHOD4(glUniformMatrix4fv, void (GLuint, GLsizei, GLboolean, const GLfloat *));
46 MOCK_METHOD2(glUniform1f, void (GLuint, GLfloat));
47 MOCK_METHOD2(glBindBuffer, void (GLenum, GLuint));
48 MOCK_METHOD6(glVertexAttribPointer, void (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *));
49 MOCK_METHOD2(glBindTexture, void (GLenum, GLuint));
50 MOCK_METHOD1(glEnableVertexAttribArray, void (GLuint));
51 MOCK_METHOD1(glDisableVertexAttribArray, void (GLuint));
52 MOCK_METHOD3(glDrawArrays, void (GLenum, GLint, GLsizei));
53 MOCK_METHOD1(glCreateShader, GLuint (GLenum));
54 MOCK_METHOD0(glCreateProgram, GLuint ());
55 MOCK_METHOD2(glAttachShader, void (GLuint, GLuint));
56 MOCK_METHOD1(glLinkProgram, void (GLuint));
57 MOCK_METHOD2(glGetUniformLocation, GLint (GLuint, const GLchar *));
58 MOCK_METHOD2(glGetAttribLocation, GLint (GLuint, const GLchar *));
59 MOCK_METHOD3(glTexParameteri, void (GLenum, GLenum, GLenum));
60 MOCK_METHOD2(glGenTextures, void (GLsizei, GLuint *));
61 MOCK_METHOD2(glGenBuffers, void (GLsizei, GLuint *));
62 MOCK_METHOD4(glBufferData, void (GLenum, GLsizeiptr, const GLvoid *, GLenum));
63 MOCK_METHOD4(glShaderSource, void (GLuint, GLsizei, const GLchar * const *, const GLint *));
64 MOCK_METHOD1(glCompileShader, void (GLuint));
65 MOCK_METHOD3(glGetShaderiv, void (GLuint, GLenum, GLint *));
66 MOCK_METHOD4(glGetShaderInfoLog, void (GLuint, GLsizei, GLsizei *, GLchar *));
67 MOCK_METHOD2(glUniform1i, void (GLint, GLint));
68 MOCK_METHOD3(glGetProgramiv, void (GLuint, GLenum, GLint *));
69 MOCK_METHOD4(glGetProgramInfoLog, void (GLuint, GLsizei, GLsizei *, GLchar *));
70 MOCK_METHOD9(glTexImage2D, void(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*));
71 MOCK_METHOD2(glGenFramebuffers, void(GLsizei, GLuint *));
72 MOCK_METHOD2(glBindFramebuffer, void(GLenum, GLuint));42 MOCK_METHOD2(glBindFramebuffer, void(GLenum, GLuint));
73 MOCK_METHOD5(glFramebufferTexture2D, void(GLenum, GLenum, GLenum, GLuint, GLint));43 MOCK_METHOD2(glBindRenderbuffer, void(GLenum, GLuint));
44 MOCK_METHOD2(glBindTexture, void(GLenum, GLuint));
45 MOCK_METHOD2(glBlendFunc, void(GLenum, GLenum));
46 MOCK_METHOD4(glBufferData,
47 void(GLenum, GLsizeiptr, const GLvoid *, GLenum));
74 MOCK_METHOD1(glCheckFramebufferStatus, GLenum(GLenum));48 MOCK_METHOD1(glCheckFramebufferStatus, GLenum(GLenum));
75 MOCK_METHOD7(glReadPixels, void(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*));49 MOCK_METHOD1(glClear, void(GLbitfield));
50 MOCK_METHOD1(glCompileShader, void(GLuint));
51 MOCK_METHOD0(glCreateProgram, GLuint());
52 MOCK_METHOD1(glCreateShader, GLuint(GLenum));
53 MOCK_METHOD2(glDeleteBuffers, void(GLsizei, const GLuint *));
54 MOCK_METHOD2(glDeleteFramebuffers, void(GLsizei, const GLuint *));
55 MOCK_METHOD1(glDeleteProgram, void(GLuint));
56 MOCK_METHOD1(glDeleteShader, void(GLuint));
57 MOCK_METHOD2(glDeleteTextures, void(GLsizei, const GLuint *));
58 MOCK_METHOD1(glDisable, void(GLenum));
59 MOCK_METHOD1(glDisableVertexAttribArray, void(GLuint));
60 MOCK_METHOD3(glDrawArrays, void(GLenum, GLint, GLsizei));
61 MOCK_METHOD1(glEnable, void(GLenum));
62 MOCK_METHOD1(glEnableVertexAttribArray, void(GLuint));
63 MOCK_METHOD4(glFramebufferRenderbuffer,
64 void(GLenum, GLenum, GLenum, GLuint));
65 MOCK_METHOD5(glFramebufferTexture2D,
66 void(GLenum, GLenum, GLenum, GLuint, GLint));
67 MOCK_METHOD2(glGenBuffers, void(GLsizei, GLuint *));
68 MOCK_METHOD2(glGenFramebuffers, void(GLsizei, GLuint *));
69 MOCK_METHOD2(glGenRenderbuffers, void(GLsizei, GLuint*));
70 MOCK_METHOD2(glGenTextures, void(GLsizei, GLuint *));
71 MOCK_METHOD2(glGetAttribLocation, GLint(GLuint, const GLchar *));
72 MOCK_METHOD0(glGetError, GLenum());
76 MOCK_METHOD2(glGetIntegerv, void(GLenum, GLint*));73 MOCK_METHOD2(glGetIntegerv, void(GLenum, GLint*));
74 MOCK_METHOD4(glGetProgramInfoLog,
75 void(GLuint, GLsizei, GLsizei *, GLchar *));
76 MOCK_METHOD3(glGetProgramiv, void(GLuint, GLenum, GLint *));
77 MOCK_METHOD4(glGetShaderInfoLog,
78 void(GLuint, GLsizei, GLsizei *, GLchar *));
79 MOCK_METHOD3(glGetShaderiv, void(GLuint, GLenum, GLint *));
80 MOCK_METHOD1(glGetString, const GLubyte*(GLenum));
81 MOCK_METHOD2(glGetUniformLocation, GLint(GLuint, const GLchar *));
82 MOCK_METHOD1(glLinkProgram, void(GLuint));
83 MOCK_METHOD7(glReadPixels,
84 void(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum,
85 GLvoid*));
86 MOCK_METHOD4(glRenderbufferStorage,
87 void(GLenum, GLenum, GLsizei, GLsizei));
88 MOCK_METHOD4(glShaderSource,
89 void(GLuint, GLsizei, const GLchar * const *, const GLint *));
90 MOCK_METHOD9(glTexImage2D,
91 void(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum,
92 GLenum,const GLvoid*));
93 MOCK_METHOD3(glTexParameteri, void(GLenum, GLenum, GLenum));
94 MOCK_METHOD2(glUniform1f, void(GLuint, GLfloat));
95 MOCK_METHOD2(glUniform1i, void(GLint, GLint));
96 MOCK_METHOD4(glUniformMatrix4fv,
97 void(GLuint, GLsizei, GLboolean, const GLfloat *));
98 MOCK_METHOD1(glUseProgram, void(GLuint));
99 MOCK_METHOD6(glVertexAttribPointer,
100 void(GLuint, GLint, GLenum, GLboolean, GLsizei,
101 const GLvoid *));
102 MOCK_METHOD4(glViewport, void(GLint, GLint, GLsizei, GLsizei));
77};103};
78104
79}105}
80106
=== modified file 'tests/mir_test_doubles/mock_gl.cpp'
--- tests/mir_test_doubles/mock_gl.cpp 2013-12-18 02:19:19 +0000
+++ tests/mir_test_doubles/mock_gl.cpp 2014-01-02 03:31:27 +0000
@@ -76,6 +76,12 @@
76 global_mock_gl->glUseProgram (program);76 global_mock_gl->glUseProgram (program);
77}77}
7878
79void glClear (GLbitfield mask)
80{
81 CHECK_GLOBAL_VOID_MOCK();
82 global_mock_gl->glClear(mask);
83}
84
79void glEnable(GLenum func)85void glEnable(GLenum func)
80{86{
81 CHECK_GLOBAL_VOID_MOCK();87 CHECK_GLOBAL_VOID_MOCK();
@@ -162,6 +168,12 @@
162 return global_mock_gl->glCreateShader(type);168 return global_mock_gl->glCreateShader(type);
163}169}
164170
171void glDeleteShader(GLuint shader)
172{
173 CHECK_GLOBAL_VOID_MOCK();
174 return global_mock_gl->glDeleteShader(shader);
175}
176
165/* This is the version of glShaderSource in Mesa < 9.0.1 */177/* This is the version of glShaderSource in Mesa < 9.0.1 */
166void glShaderSource(GLuint shader, GLsizei count, const GLchar **string, const GLint *length)178void glShaderSource(GLuint shader, GLsizei count, const GLchar **string, const GLint *length)
167{179{
@@ -200,6 +212,12 @@
200 return global_mock_gl->glCreateProgram();212 return global_mock_gl->glCreateProgram();
201}213}
202214
215void glDeleteProgram(GLuint program)
216{
217 CHECK_GLOBAL_VOID_MOCK();
218 return global_mock_gl->glDeleteProgram(program);
219}
220
203void glAttachShader(GLuint program, GLuint shader)221void glAttachShader(GLuint program, GLuint shader)
204{222{
205 CHECK_GLOBAL_VOID_MOCK();223 CHECK_GLOBAL_VOID_MOCK();
@@ -236,6 +254,12 @@
236 global_mock_gl->glGenTextures(n, textures);254 global_mock_gl->glGenTextures(n, textures);
237}255}
238256
257void glDeleteTextures(GLsizei n, const GLuint *textures)
258{
259 CHECK_GLOBAL_VOID_MOCK();
260 global_mock_gl->glDeleteTextures(n, textures);
261}
262
239void glUniform1i(GLint location, GLint x)263void glUniform1i(GLint location, GLint x)
240{264{
241 CHECK_GLOBAL_VOID_MOCK();265 CHECK_GLOBAL_VOID_MOCK();
@@ -248,6 +272,12 @@
248 global_mock_gl->glGenBuffers(n, buffers);272 global_mock_gl->glGenBuffers(n, buffers);
249}273}
250274
275void glDeleteBuffers(GLsizei n, const GLuint *buffers)
276{
277 CHECK_GLOBAL_VOID_MOCK();
278 global_mock_gl->glDeleteBuffers(n, buffers);
279}
280
251void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)281void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
252{282{
253 CHECK_GLOBAL_VOID_MOCK();283 CHECK_GLOBAL_VOID_MOCK();
@@ -280,6 +310,12 @@
280 global_mock_gl->glGenFramebuffers(n, framebuffers);310 global_mock_gl->glGenFramebuffers(n, framebuffers);
281}311}
282312
313void glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers)
314{
315 CHECK_GLOBAL_VOID_MOCK();
316 global_mock_gl->glDeleteFramebuffers(n, framebuffers);
317}
318
283void glBindFramebuffer(GLenum target, GLuint framebuffer)319void glBindFramebuffer(GLenum target, GLuint framebuffer)
284{320{
285 CHECK_GLOBAL_VOID_MOCK();321 CHECK_GLOBAL_VOID_MOCK();
@@ -313,3 +349,38 @@
313 CHECK_GLOBAL_VOID_MOCK();349 CHECK_GLOBAL_VOID_MOCK();
314 global_mock_gl->glGetIntegerv(target, params);350 global_mock_gl->glGetIntegerv(target, params);
315}351}
352
353void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
354{
355 CHECK_GLOBAL_VOID_MOCK();
356 global_mock_gl->glBindRenderbuffer(target, renderbuffer);
357}
358
359void glFramebufferRenderbuffer(GLenum target, GLenum attachment,
360 GLenum renderbuffertarget, GLuint renderbuffer)
361{
362 CHECK_GLOBAL_VOID_MOCK();
363 global_mock_gl->glFramebufferRenderbuffer(target, attachment,
364 renderbuffertarget, renderbuffer);
365}
366
367void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
368{
369 CHECK_GLOBAL_VOID_MOCK();
370 global_mock_gl->glGenRenderbuffers(n, renderbuffers);
371}
372
373void glRenderbufferStorage(GLenum target, GLenum internalformat,
374 GLsizei width, GLsizei height)
375{
376 CHECK_GLOBAL_VOID_MOCK();
377 global_mock_gl->glRenderbufferStorage(target, internalformat,
378 width, height);
379}
380
381void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
382{
383 CHECK_GLOBAL_VOID_MOCK();
384 global_mock_gl->glViewport(x, y, width, height);
385}
386
316387
=== modified file 'tests/unit-tests/compositor/test_gl_renderer.cpp'
--- tests/unit-tests/compositor/test_gl_renderer.cpp 2013-12-18 02:19:19 +0000
+++ tests/unit-tests/compositor/test_gl_renderer.cpp 2014-01-02 03:31:27 +0000
@@ -36,6 +36,7 @@
36using testing::InSequence;36using testing::InSequence;
37using testing::Return;37using testing::Return;
38using testing::ReturnRef;38using testing::ReturnRef;
39using testing::Pointee;
39using testing::_;40using testing::_;
4041
41namespace mt=mir::test;42namespace mt=mir::test;
@@ -271,6 +272,12 @@
271272
272 mc::GLRendererFactory gl_renderer_factory;273 mc::GLRendererFactory gl_renderer_factory;
273 renderer = gl_renderer_factory.create_renderer_for(display_area);274 renderer = gl_renderer_factory.create_renderer_for(display_area);
275
276 EXPECT_CALL(mock_gl, glDeleteShader(stub_v_shader));
277 EXPECT_CALL(mock_gl, glDeleteShader(stub_f_shader));
278 EXPECT_CALL(mock_gl, glDeleteProgram(stub_program));
279 EXPECT_CALL(mock_gl, glDeleteBuffers(1, Pointee(stub_vbo)));
280 EXPECT_CALL(mock_gl, glDeleteTextures(_, _));
274 }281 }
275282
276 mtd::MockGL mock_gl;283 mtd::MockGL mock_gl;

Subscribers

People subscribed via source and target branches