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
1=== modified file 'include/test/mir_test_doubles/mock_gl.h'
2--- include/test/mir_test_doubles/mock_gl.h 2013-12-18 02:19:19 +0000
3+++ include/test/mir_test_doubles/mock_gl.h 2014-01-02 03:31:27 +0000
4@@ -35,45 +35,71 @@
5 MockGL();
6 ~MockGL();
7
8- MOCK_METHOD0(glGetError, GLenum ());
9- MOCK_METHOD1(glGetString, const GLubyte*(GLenum));
10- MOCK_METHOD1(glUseProgram, void (GLuint));
11- MOCK_METHOD1(glEnable, void (GLenum));
12- MOCK_METHOD1(glDisable, void (GLenum));
13- MOCK_METHOD2(glBlendFunc, void (GLenum, GLenum));
14- MOCK_METHOD1(glActiveTexture, void (GLenum));
15- MOCK_METHOD4(glUniformMatrix4fv, void (GLuint, GLsizei, GLboolean, const GLfloat *));
16- MOCK_METHOD2(glUniform1f, void (GLuint, GLfloat));
17- MOCK_METHOD2(glBindBuffer, void (GLenum, GLuint));
18- MOCK_METHOD6(glVertexAttribPointer, void (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *));
19- MOCK_METHOD2(glBindTexture, void (GLenum, GLuint));
20- MOCK_METHOD1(glEnableVertexAttribArray, void (GLuint));
21- MOCK_METHOD1(glDisableVertexAttribArray, void (GLuint));
22- MOCK_METHOD3(glDrawArrays, void (GLenum, GLint, GLsizei));
23- MOCK_METHOD1(glCreateShader, GLuint (GLenum));
24- MOCK_METHOD0(glCreateProgram, GLuint ());
25- MOCK_METHOD2(glAttachShader, void (GLuint, GLuint));
26- MOCK_METHOD1(glLinkProgram, void (GLuint));
27- MOCK_METHOD2(glGetUniformLocation, GLint (GLuint, const GLchar *));
28- MOCK_METHOD2(glGetAttribLocation, GLint (GLuint, const GLchar *));
29- MOCK_METHOD3(glTexParameteri, void (GLenum, GLenum, GLenum));
30- MOCK_METHOD2(glGenTextures, void (GLsizei, GLuint *));
31- MOCK_METHOD2(glGenBuffers, void (GLsizei, GLuint *));
32- MOCK_METHOD4(glBufferData, void (GLenum, GLsizeiptr, const GLvoid *, GLenum));
33- MOCK_METHOD4(glShaderSource, void (GLuint, GLsizei, const GLchar * const *, const GLint *));
34- MOCK_METHOD1(glCompileShader, void (GLuint));
35- MOCK_METHOD3(glGetShaderiv, void (GLuint, GLenum, GLint *));
36- MOCK_METHOD4(glGetShaderInfoLog, void (GLuint, GLsizei, GLsizei *, GLchar *));
37- MOCK_METHOD2(glUniform1i, void (GLint, GLint));
38- MOCK_METHOD3(glGetProgramiv, void (GLuint, GLenum, GLint *));
39- MOCK_METHOD4(glGetProgramInfoLog, void (GLuint, GLsizei, GLsizei *, GLchar *));
40- MOCK_METHOD9(glTexImage2D, void(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*));
41- MOCK_METHOD2(glGenFramebuffers, void(GLsizei, GLuint *));
42+ // Please keep these ordered by name
43+ MOCK_METHOD1(glActiveTexture, void(GLenum));
44+ MOCK_METHOD2(glAttachShader, void(GLuint, GLuint));
45+ MOCK_METHOD2(glBindBuffer, void(GLenum, GLuint));
46 MOCK_METHOD2(glBindFramebuffer, void(GLenum, GLuint));
47- MOCK_METHOD5(glFramebufferTexture2D, void(GLenum, GLenum, GLenum, GLuint, GLint));
48+ MOCK_METHOD2(glBindRenderbuffer, void(GLenum, GLuint));
49+ MOCK_METHOD2(glBindTexture, void(GLenum, GLuint));
50+ MOCK_METHOD2(glBlendFunc, void(GLenum, GLenum));
51+ MOCK_METHOD4(glBufferData,
52+ void(GLenum, GLsizeiptr, const GLvoid *, GLenum));
53 MOCK_METHOD1(glCheckFramebufferStatus, GLenum(GLenum));
54- MOCK_METHOD7(glReadPixels, void(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*));
55+ MOCK_METHOD1(glClear, void(GLbitfield));
56+ MOCK_METHOD1(glCompileShader, void(GLuint));
57+ MOCK_METHOD0(glCreateProgram, GLuint());
58+ MOCK_METHOD1(glCreateShader, GLuint(GLenum));
59+ MOCK_METHOD2(glDeleteBuffers, void(GLsizei, const GLuint *));
60+ MOCK_METHOD2(glDeleteFramebuffers, void(GLsizei, const GLuint *));
61+ MOCK_METHOD1(glDeleteProgram, void(GLuint));
62+ MOCK_METHOD1(glDeleteShader, void(GLuint));
63+ MOCK_METHOD2(glDeleteTextures, void(GLsizei, const GLuint *));
64+ MOCK_METHOD1(glDisable, void(GLenum));
65+ MOCK_METHOD1(glDisableVertexAttribArray, void(GLuint));
66+ MOCK_METHOD3(glDrawArrays, void(GLenum, GLint, GLsizei));
67+ MOCK_METHOD1(glEnable, void(GLenum));
68+ MOCK_METHOD1(glEnableVertexAttribArray, void(GLuint));
69+ MOCK_METHOD4(glFramebufferRenderbuffer,
70+ void(GLenum, GLenum, GLenum, GLuint));
71+ MOCK_METHOD5(glFramebufferTexture2D,
72+ void(GLenum, GLenum, GLenum, GLuint, GLint));
73+ MOCK_METHOD2(glGenBuffers, void(GLsizei, GLuint *));
74+ MOCK_METHOD2(glGenFramebuffers, void(GLsizei, GLuint *));
75+ MOCK_METHOD2(glGenRenderbuffers, void(GLsizei, GLuint*));
76+ MOCK_METHOD2(glGenTextures, void(GLsizei, GLuint *));
77+ MOCK_METHOD2(glGetAttribLocation, GLint(GLuint, const GLchar *));
78+ MOCK_METHOD0(glGetError, GLenum());
79 MOCK_METHOD2(glGetIntegerv, void(GLenum, GLint*));
80+ MOCK_METHOD4(glGetProgramInfoLog,
81+ void(GLuint, GLsizei, GLsizei *, GLchar *));
82+ MOCK_METHOD3(glGetProgramiv, void(GLuint, GLenum, GLint *));
83+ MOCK_METHOD4(glGetShaderInfoLog,
84+ void(GLuint, GLsizei, GLsizei *, GLchar *));
85+ MOCK_METHOD3(glGetShaderiv, void(GLuint, GLenum, GLint *));
86+ MOCK_METHOD1(glGetString, const GLubyte*(GLenum));
87+ MOCK_METHOD2(glGetUniformLocation, GLint(GLuint, const GLchar *));
88+ MOCK_METHOD1(glLinkProgram, void(GLuint));
89+ MOCK_METHOD7(glReadPixels,
90+ void(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum,
91+ GLvoid*));
92+ MOCK_METHOD4(glRenderbufferStorage,
93+ void(GLenum, GLenum, GLsizei, GLsizei));
94+ MOCK_METHOD4(glShaderSource,
95+ void(GLuint, GLsizei, const GLchar * const *, const GLint *));
96+ MOCK_METHOD9(glTexImage2D,
97+ void(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum,
98+ GLenum,const GLvoid*));
99+ MOCK_METHOD3(glTexParameteri, void(GLenum, GLenum, GLenum));
100+ MOCK_METHOD2(glUniform1f, void(GLuint, GLfloat));
101+ MOCK_METHOD2(glUniform1i, void(GLint, GLint));
102+ MOCK_METHOD4(glUniformMatrix4fv,
103+ void(GLuint, GLsizei, GLboolean, const GLfloat *));
104+ MOCK_METHOD1(glUseProgram, void(GLuint));
105+ MOCK_METHOD6(glVertexAttribPointer,
106+ void(GLuint, GLint, GLenum, GLboolean, GLsizei,
107+ const GLvoid *));
108+ MOCK_METHOD4(glViewport, void(GLint, GLint, GLsizei, GLsizei));
109 };
110
111 }
112
113=== modified file 'tests/mir_test_doubles/mock_gl.cpp'
114--- tests/mir_test_doubles/mock_gl.cpp 2013-12-18 02:19:19 +0000
115+++ tests/mir_test_doubles/mock_gl.cpp 2014-01-02 03:31:27 +0000
116@@ -76,6 +76,12 @@
117 global_mock_gl->glUseProgram (program);
118 }
119
120+void glClear (GLbitfield mask)
121+{
122+ CHECK_GLOBAL_VOID_MOCK();
123+ global_mock_gl->glClear(mask);
124+}
125+
126 void glEnable(GLenum func)
127 {
128 CHECK_GLOBAL_VOID_MOCK();
129@@ -162,6 +168,12 @@
130 return global_mock_gl->glCreateShader(type);
131 }
132
133+void glDeleteShader(GLuint shader)
134+{
135+ CHECK_GLOBAL_VOID_MOCK();
136+ return global_mock_gl->glDeleteShader(shader);
137+}
138+
139 /* This is the version of glShaderSource in Mesa < 9.0.1 */
140 void glShaderSource(GLuint shader, GLsizei count, const GLchar **string, const GLint *length)
141 {
142@@ -200,6 +212,12 @@
143 return global_mock_gl->glCreateProgram();
144 }
145
146+void glDeleteProgram(GLuint program)
147+{
148+ CHECK_GLOBAL_VOID_MOCK();
149+ return global_mock_gl->glDeleteProgram(program);
150+}
151+
152 void glAttachShader(GLuint program, GLuint shader)
153 {
154 CHECK_GLOBAL_VOID_MOCK();
155@@ -236,6 +254,12 @@
156 global_mock_gl->glGenTextures(n, textures);
157 }
158
159+void glDeleteTextures(GLsizei n, const GLuint *textures)
160+{
161+ CHECK_GLOBAL_VOID_MOCK();
162+ global_mock_gl->glDeleteTextures(n, textures);
163+}
164+
165 void glUniform1i(GLint location, GLint x)
166 {
167 CHECK_GLOBAL_VOID_MOCK();
168@@ -248,6 +272,12 @@
169 global_mock_gl->glGenBuffers(n, buffers);
170 }
171
172+void glDeleteBuffers(GLsizei n, const GLuint *buffers)
173+{
174+ CHECK_GLOBAL_VOID_MOCK();
175+ global_mock_gl->glDeleteBuffers(n, buffers);
176+}
177+
178 void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
179 {
180 CHECK_GLOBAL_VOID_MOCK();
181@@ -280,6 +310,12 @@
182 global_mock_gl->glGenFramebuffers(n, framebuffers);
183 }
184
185+void glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers)
186+{
187+ CHECK_GLOBAL_VOID_MOCK();
188+ global_mock_gl->glDeleteFramebuffers(n, framebuffers);
189+}
190+
191 void glBindFramebuffer(GLenum target, GLuint framebuffer)
192 {
193 CHECK_GLOBAL_VOID_MOCK();
194@@ -313,3 +349,38 @@
195 CHECK_GLOBAL_VOID_MOCK();
196 global_mock_gl->glGetIntegerv(target, params);
197 }
198+
199+void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
200+{
201+ CHECK_GLOBAL_VOID_MOCK();
202+ global_mock_gl->glBindRenderbuffer(target, renderbuffer);
203+}
204+
205+void glFramebufferRenderbuffer(GLenum target, GLenum attachment,
206+ GLenum renderbuffertarget, GLuint renderbuffer)
207+{
208+ CHECK_GLOBAL_VOID_MOCK();
209+ global_mock_gl->glFramebufferRenderbuffer(target, attachment,
210+ renderbuffertarget, renderbuffer);
211+}
212+
213+void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
214+{
215+ CHECK_GLOBAL_VOID_MOCK();
216+ global_mock_gl->glGenRenderbuffers(n, renderbuffers);
217+}
218+
219+void glRenderbufferStorage(GLenum target, GLenum internalformat,
220+ GLsizei width, GLsizei height)
221+{
222+ CHECK_GLOBAL_VOID_MOCK();
223+ global_mock_gl->glRenderbufferStorage(target, internalformat,
224+ width, height);
225+}
226+
227+void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
228+{
229+ CHECK_GLOBAL_VOID_MOCK();
230+ global_mock_gl->glViewport(x, y, width, height);
231+}
232+
233
234=== modified file 'tests/unit-tests/compositor/test_gl_renderer.cpp'
235--- tests/unit-tests/compositor/test_gl_renderer.cpp 2013-12-18 02:19:19 +0000
236+++ tests/unit-tests/compositor/test_gl_renderer.cpp 2014-01-02 03:31:27 +0000
237@@ -36,6 +36,7 @@
238 using testing::InSequence;
239 using testing::Return;
240 using testing::ReturnRef;
241+using testing::Pointee;
242 using testing::_;
243
244 namespace mt=mir::test;
245@@ -271,6 +272,12 @@
246
247 mc::GLRendererFactory gl_renderer_factory;
248 renderer = gl_renderer_factory.create_renderer_for(display_area);
249+
250+ EXPECT_CALL(mock_gl, glDeleteShader(stub_v_shader));
251+ EXPECT_CALL(mock_gl, glDeleteShader(stub_f_shader));
252+ EXPECT_CALL(mock_gl, glDeleteProgram(stub_program));
253+ EXPECT_CALL(mock_gl, glDeleteBuffers(1, Pointee(stub_vbo)));
254+ EXPECT_CALL(mock_gl, glDeleteTextures(_, _));
255 }
256
257 mtd::MockGL mock_gl;

Subscribers

People subscribed via source and target branches