Merge lp:~brianaker/gearmand/gearmnan_job_use_client into lp:gearmand
- gearmnan_job_use_client
- Merge into 1.2
Proposed by
Brian Aker
Status: | Merged |
---|---|
Merged at revision: | 869 |
Proposed branch: | lp:~brianaker/gearmand/gearmnan_job_use_client |
Merge into: | lp:gearmand |
Diff against target: |
605 lines (+307/-64) 15 files modified
ChangeLog (+1/-1) configure.ac (+1/-0) docs/conf.py.in (+1/-0) docs/libgearman/gearman_job_st.rst (+6/-1) libgearman-1.0/job.h (+3/-0) libgearman/job.cc (+46/-3) libgearman/job.hpp (+4/-0) libgearman/worker.cc (+0/-10) m4/ax_uuid.m4 (+61/-49) man/include.am (+1/-0) support/gearmand.spec.in (+1/-0) tests/libgearman-1.0/worker_test.cc (+71/-0) tests/workers/include.am (+2/-0) tests/workers/v2/client_echo.cc (+67/-0) tests/workers/v2/client_echo.h (+42/-0) |
To merge this branch: | bzr merge lp:~brianaker/gearmand/gearmnan_job_use_client |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Tangent Trunk | Pending | ||
Review via email: mp+181725@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 867. By Brian Aker
-
Fix missing man pages
- 868. By Brian Aker
-
Fix uuid testing
- 869. By Brian Aker
-
Fix duplicate man page entry.
- 870. By Brian Aker
-
Fix docs
- 871. By Brian Aker
-
Fix spec file.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'ChangeLog' |
2 | --- ChangeLog 2013-08-15 06:28:02 +0000 |
3 | +++ ChangeLog 2013-08-31 03:15:41 +0000 |
4 | @@ -1,5 +1,5 @@ |
5 | 1.1.10 |
6 | -* |
7 | +* Added gearman_job_use_client() |
8 | |
9 | 1.1.9 Fri Aug 2 02:39:25 EDT 2013 |
10 | * Added gearman_task_is_finished() |
11 | |
12 | === modified file 'configure.ac' |
13 | --- configure.ac 2013-08-16 08:58:49 +0000 |
14 | +++ configure.ac 2013-08-31 03:15:41 +0000 |
15 | @@ -271,6 +271,7 @@ |
16 | |
17 | AX_LIBEVENT(,[AC_MSG_ERROR([Unable to find libevent])]) |
18 | |
19 | +AX_UUID(,[AC_MSG_ERROR([Unable to find libuuid])]) |
20 | AX_UUID_GENERATE_TIME_SAFE |
21 | |
22 | AX_AM_JOBSERVER([yes]) |
23 | |
24 | === modified file 'docs/conf.py.in' |
25 | --- docs/conf.py.in 2013-01-09 16:53:25 +0000 |
26 | +++ docs/conf.py.in 2013-08-31 03:15:41 +0000 |
27 | @@ -292,6 +292,7 @@ |
28 | ('libgearman/gearman_job_st', 'gearman_job_free_all', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
29 | ('libgearman/gearman_job_st', 'gearman_job_function_name', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
30 | ('libgearman/gearman_job_st', 'gearman_job_handle', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
31 | + ('libgearman/gearman_job_st', 'gearman_job_use_client', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
32 | ('libgearman/gearman_job_st', 'gearman_job_send_complete', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
33 | ('libgearman/gearman_job_st', 'gearman_job_send_data', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
34 | ('libgearman/gearman_job_st', 'gearman_job_send_exception', u'Gearmand Documentation, http://gearman.info/', [u'Data Differential http://www.datadifferential.com/'], 3), |
35 | |
36 | === modified file 'docs/libgearman/gearman_job_st.rst' |
37 | --- docs/libgearman/gearman_job_st.rst 2013-08-16 08:41:58 +0000 |
38 | +++ docs/libgearman/gearman_job_st.rst 2013-08-31 03:15:41 +0000 |
39 | @@ -36,6 +36,8 @@ |
40 | |
41 | .. c:function:: void *gearman_job_take_workload(gearman_job_st *job, size_t *data_size) |
42 | |
43 | +.. c:function:: gearman_client_st *gearman_job_use_client(gearman_job_st *job) |
44 | + |
45 | Link with -lgearman |
46 | |
47 | ----------- |
48 | @@ -54,10 +56,13 @@ |
49 | |
50 | :c:func:`gearman_job_unique` return the unique value that was used for :c:type:`gearman_job_st`. |
51 | |
52 | -returns the :c:type:`gearman_job_st` workload. The size of it can be determined with :c:func:`gearman_job_workload_size`. |
53 | +gearman_job_take_workload returns the :c:type:`gearman_job_st` workload. The size of it can be determined with :c:func:`gearman_job_workload_size`. |
54 | :c:func:`gearman_job_take_workload` is the same as :c:func:`gearman_job_workload` with the exception that the result must be |
55 | :manpage:`free(3)` by the caller. |
56 | |
57 | +gearman_job_use_client returns a :c:type:`gearman_client_st` configured from gearman_job_st. The gearman_client_st can be used to communicate client API commands to the server. |
58 | +You do not, and should not, call :c:func:`gearman_client_free` on the gearman_client_st. It is cleaned up when job is cleaned up. |
59 | + |
60 | ------------ |
61 | RETURN VALUE |
62 | ------------ |
63 | |
64 | === modified file 'libgearman-1.0/job.h' |
65 | --- libgearman-1.0/job.h 2013-07-10 01:57:34 +0000 |
66 | +++ libgearman-1.0/job.h 2013-08-31 03:15:41 +0000 |
67 | @@ -150,6 +150,9 @@ |
68 | gearman_worker_st *gearman_job_clone_worker(gearman_job_st *job); |
69 | |
70 | GEARMAN_API |
71 | +gearman_client_st *gearman_job_use_client(gearman_job_st *job); |
72 | + |
73 | +GEARMAN_API |
74 | const char *gearman_job_error(gearman_job_st *job); |
75 | |
76 | /** @} */ |
77 | |
78 | === modified file 'libgearman-server/plugins/protocol/gear/protocol.cc' |
79 | === modified file 'libgearman/job.cc' |
80 | --- libgearman/job.cc 2013-08-05 22:43:13 +0000 |
81 | +++ libgearman/job.cc 2013-08-31 03:15:41 +0000 |
82 | @@ -226,6 +226,7 @@ |
83 | |
84 | Job::Job(gearman_job_st* shell_, Worker& worker_): |
85 | _worker(worker_), |
86 | + _client(NULL), |
87 | next(NULL), |
88 | prev(NULL), |
89 | con(NULL), |
90 | @@ -247,6 +248,30 @@ |
91 | gearman_set_initialized(_shell, true); |
92 | } |
93 | |
94 | +Job::~Job() |
95 | +{ |
96 | + if (_client) |
97 | + { |
98 | + gearman_client_free(_client); |
99 | + } |
100 | + |
101 | + delete reducer; |
102 | +} |
103 | + |
104 | +gearman_client_st* Job::client() |
105 | +{ |
106 | + if (_client == NULL) |
107 | + { |
108 | + _client= gearman_client_create(NULL); |
109 | + if (_client) |
110 | + { |
111 | + gearman_universal_clone(_client->impl()->universal, _worker.universal); |
112 | + } |
113 | + } |
114 | + |
115 | + return _client; |
116 | +} |
117 | + |
118 | bool gearman_job_build_reducer(Job* job, gearman_aggregator_fn *aggregator_fn) |
119 | { |
120 | if (job->reducer) |
121 | @@ -272,6 +297,27 @@ |
122 | return true; |
123 | } |
124 | |
125 | + |
126 | +gearman_worker_st *gearman_job_clone_worker(gearman_job_st *job_shell) |
127 | +{ |
128 | + if (job_shell and job_shell->impl()) |
129 | + { |
130 | + return gearman_worker_clone(NULL, job_shell->impl()->_worker.shell()); |
131 | + } |
132 | + |
133 | + return NULL; |
134 | +} |
135 | + |
136 | +gearman_client_st *gearman_job_use_client(gearman_job_st *job_shell) |
137 | +{ |
138 | + if (job_shell and job_shell->impl()) |
139 | + { |
140 | + return job_shell->impl()->client(); |
141 | + } |
142 | + |
143 | + return NULL; |
144 | +} |
145 | + |
146 | static inline void gearman_job_reset_error(Job* job) |
147 | { |
148 | if (job) |
149 | @@ -778,9 +824,6 @@ |
150 | } |
151 | job->_worker.job_count--; |
152 | |
153 | - delete job->reducer; |
154 | - job->reducer= NULL; |
155 | - |
156 | delete job; |
157 | } |
158 | else if (job_shell) |
159 | |
160 | === modified file 'libgearman/job.hpp' |
161 | --- libgearman/job.hpp 2013-07-15 19:50:11 +0000 |
162 | +++ libgearman/job.hpp 2013-08-31 03:15:41 +0000 |
163 | @@ -43,6 +43,7 @@ |
164 | { |
165 | public: |
166 | Job(gearman_job_st* shell_, Worker& worker_); |
167 | + ~Job(); |
168 | |
169 | gearman_job_st* shell() |
170 | { |
171 | @@ -72,6 +73,7 @@ |
172 | } |
173 | |
174 | Worker& _worker; |
175 | + gearman_client_st* _client; |
176 | Job *next; |
177 | Job *prev; |
178 | gearman_connection_st *con; |
179 | @@ -85,6 +87,8 @@ |
180 | return _worker.universal; |
181 | } |
182 | |
183 | + gearman_client_st* client(); |
184 | + |
185 | gearman_universal_st& universal() const |
186 | { |
187 | return _worker.universal; |
188 | |
189 | === modified file 'libgearman/worker.cc' |
190 | --- libgearman/worker.cc 2013-08-23 07:08:19 +0000 |
191 | +++ libgearman/worker.cc 2013-08-31 03:15:41 +0000 |
192 | @@ -1439,16 +1439,6 @@ |
193 | return gearman_universal_id(self->impl()->universal); |
194 | } |
195 | |
196 | -gearman_worker_st *gearman_job_clone_worker(gearman_job_st *job_shell) |
197 | -{ |
198 | - if (job_shell and job_shell->impl()) |
199 | - { |
200 | - return gearman_worker_clone(NULL, job_shell->impl()->_worker.shell()); |
201 | - } |
202 | - |
203 | - return NULL; |
204 | -} |
205 | - |
206 | gearman_return_t gearman_worker_set_identifier(gearman_worker_st *worker, |
207 | const char *id, size_t id_size) |
208 | { |
209 | |
210 | === modified file 'm4/ax_uuid.m4' |
211 | --- m4/ax_uuid.m4 2013-04-27 04:10:37 +0000 |
212 | +++ m4/ax_uuid.m4 2013-08-31 03:15:41 +0000 |
213 | @@ -5,9 +5,9 @@ |
214 | # |
215 | # SYNOPSIS |
216 | # |
217 | -# AX_UUID() |
218 | -# AX_UUID_GENERATE_TIME() |
219 | -# AX_UUID_GENERATE_TIME_SAFE() |
220 | +# AX_UUID([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) |
221 | +# AX_UUID_GENERATE_TIME([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) |
222 | +# AX_UUID_GENERATE_TIME_SAFE([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) |
223 | # |
224 | # DESCRIPTION |
225 | # |
226 | @@ -22,7 +22,7 @@ |
227 | # and this notice are preserved. This file is offered as-is, without any |
228 | # warranty. |
229 | |
230 | -#serial 7 |
231 | +#serial 8 |
232 | |
233 | AC_DEFUN([AX_UUID], |
234 | [AC_PREREQ([2.63])dnl |
235 | @@ -71,54 +71,66 @@ |
236 | |
237 | AC_SUBST([LIBUUID_LIB]) |
238 | AM_CONDITIONAL([HAVE_LIBUUID],[test "x$ax_libuuid" = xyes]) |
239 | + |
240 | +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: |
241 | + AS_IF([test "x$ax_libuuid" = xyes], |
242 | + [$1], |
243 | + [$2]) |
244 | ]) |
245 | |
246 | AC_DEFUN([AX_UUID_GENERATE_TIME], |
247 | - [AC_PREREQ([2.63])dnl |
248 | - AC_REQUIRE([AX_UUID])dnl |
249 | - AC_CACHE_CHECK([for uuid_generate_time], |
250 | - [ax_cv_uuid_generate_time], |
251 | - [AX_SAVE_FLAGS |
252 | - LIBS="$LIBUUID_LIB $LIBS" |
253 | - AC_LANG_PUSH([C]) |
254 | - AC_RUN_IFELSE([ |
255 | - AC_LANG_PROGRAM([#include <uuid/uuid.h>],[ |
256 | - uuid_t out; |
257 | - uuid_generate_time(out); |
258 | - ])], |
259 | - [ax_cv_uuid_generate_time=yes], |
260 | - [ax_cv_uuid_generate_time=no], |
261 | - [AC_MSG_WARN([test program execution failed])]) |
262 | - AC_LANG_POP |
263 | - AX_RESTORE_FLAGS |
264 | - ]) |
265 | + [AC_PREREQ([2.63])dnl |
266 | + AX_UUID([$1],[$2]) |
267 | + AC_CACHE_CHECK([for uuid_generate_time], |
268 | + [ax_cv_uuid_generate_time], |
269 | + [AX_SAVE_FLAGS |
270 | + LIBS="$LIBUUID_LIB $LIBS" |
271 | + AC_LANG_PUSH([C]) |
272 | + AC_RUN_IFELSE([ |
273 | + AC_LANG_PROGRAM([#include <uuid/uuid.h>],[ |
274 | + uuid_t out; |
275 | + uuid_generate_time(out); |
276 | + ])], |
277 | + [ax_cv_uuid_generate_time=yes], |
278 | + [ax_cv_uuid_generate_time=no], |
279 | + [AC_MSG_WARN([test program execution failed])]) |
280 | + AC_LANG_POP |
281 | + AX_RESTORE_FLAGS |
282 | + ]) |
283 | |
284 | - AS_IF([test "$ax_cv_uuid_generate_time" = yes], |
285 | - [AC_DEFINE([HAVE_UUID_GENERATE_TIME],[1],[Define if uuid_generate_time is present in uuid/uuid.h.])], |
286 | - [AC_DEFINE([HAVE_UUID_GENERATE_TIME],[0],[Define if uuid_generate_time is present in uuid/uuid.h.])]) |
287 | - ]) |
288 | + AS_IF([test "$ax_cv_uuid_generate_time" = yes], |
289 | + [AC_DEFINE([HAVE_UUID_GENERATE_TIME],[1],[Define if uuid_generate_time is present in uuid/uuid.h.])], |
290 | + [AC_DEFINE([HAVE_UUID_GENERATE_TIME],[0],[Define if uuid_generate_time is present in uuid/uuid.h.])]) |
291 | + AS_IF([test "x$ax_cv_uuid_generate_time" = xyes], |
292 | + [$1], |
293 | + [$2]) |
294 | + ]) |
295 | |
296 | AC_DEFUN([AX_UUID_GENERATE_TIME_SAFE], |
297 | - [AC_PREREQ([2.63])dnl |
298 | - AC_REQUIRE([AX_UUID])dnl |
299 | - AC_CACHE_CHECK([for uuid_generate_time_safe], |
300 | - [ax_cv_uuid_generate_time_safe], |
301 | - [AX_SAVE_FLAGS |
302 | - LIBS="$LIBUUID_LIB $LIBS" |
303 | - AC_LANG_PUSH([C]) |
304 | - AC_RUN_IFELSE([ |
305 | - AC_LANG_PROGRAM([#include <uuid/uuid.h>],[ |
306 | - uuid_t out; |
307 | - uuid_generate_time_safe(out); |
308 | - ])], |
309 | - [ax_cv_uuid_generate_time_safe=yes], |
310 | - [ax_cv_uuid_generate_time_safe=no], |
311 | - [AC_MSG_WARN([test program execution failed])]) |
312 | - AC_LANG_POP |
313 | - AX_RESTORE_FLAGS |
314 | - ]) |
315 | - |
316 | - AS_IF([test "$ax_cv_uuid_generate_time_safe" = yes], |
317 | - [AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE],[1],[Define if uuid_generate_time_safe is present in uuid/uuid.h.])], |
318 | - [AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE],[0],[Define if uuid_generate_time_safe is present in uuid/uuid.h.])]) |
319 | - ]) |
320 | + [AC_PREREQ([2.63])dnl |
321 | + AX_UUID([$1],[$2]) |
322 | + AC_CACHE_CHECK([for uuid_generate_time_safe], |
323 | + [ax_cv_uuid_generate_time_safe], |
324 | + [AX_SAVE_FLAGS |
325 | + LIBS="$LIBUUID_LIB $LIBS" |
326 | + AC_LANG_PUSH([C]) |
327 | + AC_RUN_IFELSE([ |
328 | + AC_LANG_PROGRAM([#include <uuid/uuid.h>],[ |
329 | + uuid_t out; |
330 | + uuid_generate_time_safe(out); |
331 | + ])], |
332 | + [ax_cv_uuid_generate_time_safe=yes], |
333 | + [ax_cv_uuid_generate_time_safe=no], |
334 | + [AC_MSG_WARN([test program execution failed])]) |
335 | + AC_LANG_POP |
336 | + AX_RESTORE_FLAGS |
337 | + ]) |
338 | + |
339 | + AS_IF([test "$ax_cv_uuid_generate_time_safe" = yes], |
340 | + [AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE],[1],[Define if uuid_generate_time_safe is present in uuid/uuid.h.])], |
341 | + [AC_DEFINE([HAVE_UUID_GENERATE_TIME_SAFE],[0],[Define if uuid_generate_time_safe is present in uuid/uuid.h.])]) |
342 | + |
343 | + AS_IF([test "x$ax_cv_uuid_generate_time_safe" = xyes], |
344 | + [$1], |
345 | + [$2]) |
346 | + ]) |
347 | |
348 | === modified file 'man/include.am' |
349 | --- man/include.am 2013-08-16 08:58:49 +0000 |
350 | +++ man/include.am 2013-08-31 03:15:41 +0000 |
351 | @@ -87,6 +87,7 @@ |
352 | notrans_dist_man_MANS+= gearman_job_st.3 |
353 | notrans_dist_man_MANS+= gearman_job_take_workload.3 |
354 | notrans_dist_man_MANS+= gearman_job_unique.3 |
355 | +notrans_dist_man_MANS+= gearman_job_use_client.3 |
356 | notrans_dist_man_MANS+= gearman_job_workload.3 |
357 | notrans_dist_man_MANS+= gearman_job_workload_size.3 |
358 | notrans_dist_man_MANS+= gearman_log_fn.3 |
359 | |
360 | === modified file 'support/gearmand.spec.in' |
361 | --- support/gearmand.spec.in 2013-07-18 05:59:53 +0000 |
362 | +++ support/gearmand.spec.in 2013-08-31 03:15:41 +0000 |
363 | @@ -235,6 +235,7 @@ |
364 | %{_mandir}/man3/gearman_job_st.3.gz |
365 | %{_mandir}/man3/gearman_job_take_workload.3.gz |
366 | %{_mandir}/man3/gearman_job_unique.3.gz |
367 | +%{_mandir}/man3/gearman_job_use_client.3.gz |
368 | %{_mandir}/man3/gearman_job_workload.3.gz |
369 | %{_mandir}/man3/gearman_job_workload_size.3.gz |
370 | %{_mandir}/man3/gearman_log_fn.3.gz |
371 | |
372 | === modified file 'tests/libgearman-1.0/worker_test.cc' |
373 | --- tests/libgearman-1.0/worker_test.cc 2013-08-20 09:27:42 +0000 |
374 | +++ tests/libgearman-1.0/worker_test.cc 2013-08-31 03:15:41 +0000 |
375 | @@ -62,6 +62,7 @@ |
376 | |
377 | #include "tests/start_worker.h" |
378 | #include "tests/workers/v2/call_exception.h" |
379 | +#include "tests/workers/v2/client_echo.h" |
380 | #include "tests/workers/v2/echo_or_react.h" |
381 | #include "tests/workers/v2/echo_or_react_chunk.h" |
382 | #include "tests/workers/v2/call_exception.h" |
383 | @@ -942,6 +943,75 @@ |
384 | return TEST_SUCCESS; |
385 | } |
386 | |
387 | +static test_return_t gearman_job_client_TEST(void *) |
388 | +{ |
389 | + gearman_function_t call_client_echo_WORKER_FN= gearman_function_create(client_echo_WORKER); |
390 | + std::auto_ptr<worker_handle_st> handle(test_worker_start(libtest::default_port(), |
391 | + NULL, |
392 | + "client_echo", |
393 | + call_client_echo_WORKER_FN, |
394 | + NULL, |
395 | + gearman_worker_options_t(), |
396 | + 0)); // timeout |
397 | + |
398 | + std::vector<gearman_task_st*> tasks; |
399 | + libgearman::Client client(libtest::default_port()); |
400 | + |
401 | + gearman_client_add_options(&client, GEARMAN_CLIENT_EXCEPTION); |
402 | + |
403 | + for (size_t x= 0; x < 10; ++x) |
404 | + { |
405 | + char buffer[GEARMAN_MAXIMUM_INTEGER_DISPLAY_LENGTH]; |
406 | + int buffer_length= snprintf(buffer, sizeof(buffer), "%d", int(x)); |
407 | + gearman_return_t ret; |
408 | + gearman_task_st *task= gearman_client_add_task(&client, |
409 | + NULL, // preallocated task |
410 | + NULL, // context |
411 | + "client_echo", // function |
412 | + NULL, // unique |
413 | + (const void*)buffer, size_t(buffer_length), // workload |
414 | + &ret); |
415 | + ASSERT_EQ(ret, GEARMAN_SUCCESS); |
416 | + ASSERT_TRUE(task); |
417 | + |
418 | + tasks.push_back(task); |
419 | + } |
420 | + |
421 | + bool more= true; |
422 | + while (more) |
423 | + { |
424 | + for (std::vector<gearman_task_st*>::iterator iter= tasks.begin(); |
425 | + iter != tasks.end(); ++iter) |
426 | + { |
427 | + if (gearman_task_return(*iter) == GEARMAN_UNKNOWN_STATE) |
428 | + { |
429 | + { |
430 | + gearman_return_t ret; |
431 | + do { |
432 | + ret= gearman_client_run_tasks(&client); |
433 | + } while (gearman_continue(ret)); |
434 | + |
435 | + if (gearman_failed(ret)) |
436 | + { |
437 | + Error << gearman_strerror(ret); |
438 | + } |
439 | + ASSERT_EQ(GEARMAN_SUCCESS, ret); |
440 | + } |
441 | + |
442 | + continue; |
443 | + } |
444 | + else |
445 | + { |
446 | + ASSERT_EQ(GEARMAN_SUCCESS, gearman_task_return(*iter)); |
447 | + } |
448 | + |
449 | + more= false; |
450 | + } |
451 | + } |
452 | + |
453 | + return TEST_SUCCESS; |
454 | +} |
455 | + |
456 | static test_return_t gearman_job_send_exception_TEST(void *) |
457 | { |
458 | libgearman::Client client(libtest::default_port()); |
459 | @@ -1671,6 +1741,7 @@ |
460 | {"gearman_client_job_status(is_known)", 0, gearman_client_job_status_is_known_TEST }, |
461 | {"gearman_job_send_exception()", 0, gearman_job_send_exception_TEST }, |
462 | {"gearman_job_send_exception(mass)", 0, gearman_job_send_exception_mass_TEST }, |
463 | + {"gearman_job_client()", 0, gearman_job_client_TEST }, |
464 | {"job order", 0, job_order_TEST }, |
465 | {"job background order", 0, job_order_background_TEST }, |
466 | {"echo_max", 0, echo_max_test }, |
467 | |
468 | === modified file 'tests/workers/include.am' |
469 | --- tests/workers/include.am 2013-05-28 22:55:50 +0000 |
470 | +++ tests/workers/include.am 2013-08-31 03:15:41 +0000 |
471 | @@ -16,6 +16,7 @@ |
472 | noinst_HEADERS+= tests/workers/v2/call_exception.h |
473 | noinst_HEADERS+= tests/workers/v2/called.h |
474 | noinst_HEADERS+= tests/workers/v2/check_order.h |
475 | +noinst_HEADERS+= tests/workers/v2/client_echo.h |
476 | noinst_HEADERS+= tests/workers/v2/count.h |
477 | noinst_HEADERS+= tests/workers/v2/echo_or_react.h |
478 | noinst_HEADERS+= tests/workers/v2/echo_or_react_chunk.h |
479 | @@ -46,6 +47,7 @@ |
480 | tests_libstartworker_la_SOURCES+= tests/workers/v1/unique.cc |
481 | tests_libstartworker_la_SOURCES+= tests/workers/v2/call_exception.cc |
482 | tests_libstartworker_la_SOURCES+= tests/workers/v2/called.cc |
483 | +tests_libstartworker_la_SOURCES+= tests/workers/v2/client_echo.cc |
484 | tests_libstartworker_la_SOURCES+= tests/workers/v2/count.cc |
485 | tests_libstartworker_la_SOURCES+= tests/workers/v2/echo_or_react.cc |
486 | tests_libstartworker_la_SOURCES+= tests/workers/v2/echo_or_react_chunk.cc |
487 | |
488 | === added file 'tests/workers/v2/client_echo.cc' |
489 | --- tests/workers/v2/client_echo.cc 1970-01-01 00:00:00 +0000 |
490 | +++ tests/workers/v2/client_echo.cc 2013-08-31 03:15:41 +0000 |
491 | @@ -0,0 +1,67 @@ |
492 | +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: |
493 | + * |
494 | + * Gearmand client and server library. |
495 | + * |
496 | + * Copyright (C) 2013 Data Differential, http://datadifferential.com/ |
497 | + * All rights reserved. |
498 | + * |
499 | + * Redistribution and use in source and binary forms, with or without |
500 | + * modification, are permitted provided that the following conditions are |
501 | + * met: |
502 | + * |
503 | + * * Redistributions of source code must retain the above copyright |
504 | + * notice, this list of conditions and the following disclaimer. |
505 | + * |
506 | + * * Redistributions in binary form must reproduce the above |
507 | + * copyright notice, this list of conditions and the following disclaimer |
508 | + * in the documentation and/or other materials provided with the |
509 | + * distribution. |
510 | + * |
511 | + * * The names of its contributors may not be used to endorse or |
512 | + * promote products derived from this software without specific prior |
513 | + * written permission. |
514 | + * |
515 | + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
516 | + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
517 | + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
518 | + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
519 | + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
520 | + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
521 | + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
522 | + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
523 | + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
524 | + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
525 | + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
526 | + * |
527 | + */ |
528 | + |
529 | +#include <gear_config.h> |
530 | + |
531 | +#include <libtest/test.hpp> |
532 | + |
533 | +#include <libgearman-1.0/gearman.h> |
534 | + |
535 | +#include "tests/workers/v2/client_echo.h" |
536 | + |
537 | +#include <cassert> |
538 | +#include <cstring> |
539 | + |
540 | +gearman_return_t client_echo_WORKER(gearman_job_st *job, void *) |
541 | +{ |
542 | + gearman_client_st* client= gearman_job_use_client(job); |
543 | + |
544 | + if (client) |
545 | + { |
546 | + if (gearman_failed(gearman_client_echo(client, test_literal_param("Tastes great")))) |
547 | + { |
548 | + assert(gearman_client_error(client)); |
549 | + return gearman_job_send_exception(job, gearman_client_error(client), strlen(gearman_client_error(client))); |
550 | + } |
551 | + } |
552 | + else |
553 | + { |
554 | + return gearman_job_send_exception(job, test_literal_param("Failed to allocate gearman_client_st")); |
555 | + } |
556 | + |
557 | + return GEARMAN_SUCCESS; |
558 | +} |
559 | |
560 | === added file 'tests/workers/v2/client_echo.h' |
561 | --- tests/workers/v2/client_echo.h 1970-01-01 00:00:00 +0000 |
562 | +++ tests/workers/v2/client_echo.h 2013-08-31 03:15:41 +0000 |
563 | @@ -0,0 +1,42 @@ |
564 | +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: |
565 | + * |
566 | + * Gearmand client and server library. |
567 | + * |
568 | + * Copyright (C) 2013 Data Differential, http://datadifferential.com/ |
569 | + * All rights reserved. |
570 | + * |
571 | + * Redistribution and use in source and binary forms, with or without |
572 | + * modification, are permitted provided that the following conditions are |
573 | + * met: |
574 | + * |
575 | + * * Redistributions of source code must retain the above copyright |
576 | + * notice, this list of conditions and the following disclaimer. |
577 | + * |
578 | + * * Redistributions in binary form must reproduce the above |
579 | + * copyright notice, this list of conditions and the following disclaimer |
580 | + * in the documentation and/or other materials provided with the |
581 | + * distribution. |
582 | + * |
583 | + * * The names of its contributors may not be used to endorse or |
584 | + * promote products derived from this software without specific prior |
585 | + * written permission. |
586 | + * |
587 | + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
588 | + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
589 | + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
590 | + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
591 | + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
592 | + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
593 | + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
594 | + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
595 | + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
596 | + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
597 | + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
598 | + * |
599 | + */ |
600 | + |
601 | +#pragma once |
602 | + |
603 | +LIBTEST_API |
604 | +gearman_return_t client_echo_WORKER(gearman_job_st *job, void *); |
605 | + |