client_test.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
  2. *
  3. * Gearmand client and server library.
  4. *
  5. * Copyright (C) 2011 Data Differential, http://datadifferential.com/
  6. * Copyright (C) 2008 Brian Aker, Eric Day
  7. * All rights reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions are
  11. * met:
  12. *
  13. * * Redistributions of source code must retain the above copyright
  14. * notice, this list of conditions and the following disclaimer.
  15. *
  16. * * Redistributions in binary form must reproduce the above
  17. * copyright notice, this list of conditions and the following disclaimer
  18. * in the documentation and/or other materials provided with the
  19. * distribution.
  20. *
  21. * * The names of its contributors may not be used to endorse or
  22. * promote products derived from this software without specific prior
  23. * written permission.
  24. *
  25. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  26. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  27. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  28. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  29. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  30. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  31. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  32. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  33. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  34. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  35. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. */
  38. #pragma once
  39. struct client_test_st;
  40. #include "tests/start_worker.h"
  41. #include "libgearman/client.hpp"
  42. struct client_test_st
  43. {
  44. org::gearmand::libgearman::Client _client;
  45. gearman_client_st *_clone;
  46. std::vector<worker_handle_st *> workers;
  47. const char *_worker_name;
  48. const char *_session_namespace;
  49. client_test_st() :
  50. _clone(NULL),
  51. _worker_name(NULL),
  52. _session_namespace(NULL)
  53. {
  54. }
  55. ~client_test_st()
  56. {
  57. clear();
  58. if (_clone)
  59. {
  60. gearman_client_free(_clone);
  61. _clone= NULL;
  62. }
  63. }
  64. void clear()
  65. {
  66. for (std::vector<worker_handle_st *>::iterator iter= workers.begin(); iter != workers.end(); ++iter)
  67. {
  68. delete *iter;
  69. }
  70. workers.clear();
  71. set_worker_name(NULL);
  72. session_namespace(NULL);
  73. reset_clone();
  74. }
  75. void push(worker_handle_st *arg)
  76. {
  77. workers.push_back(arg);
  78. }
  79. void add_server(const char* hostname, in_port_t port_arg)
  80. {
  81. ASSERT_EQ(GEARMAN_SUCCESS, gearman_client_add_server(&_client, hostname, port_arg));
  82. }
  83. const char *worker_name() const
  84. {
  85. return _worker_name;
  86. }
  87. void log_fn(gearman_log_fn *function, void *context, gearman_verbose_t verbose)
  88. {
  89. gearman_client_set_log_fn(&_client, function, context, verbose);
  90. }
  91. void set_worker_name(const char *arg)
  92. {
  93. _worker_name= arg;
  94. }
  95. void session_namespace(const char *arg)
  96. {
  97. _session_namespace= arg;
  98. }
  99. const char* session_namespace()
  100. {
  101. return _session_namespace;
  102. }
  103. gearman_client_st *client()
  104. {
  105. if (_clone == NULL)
  106. {
  107. _clone= gearman_client_clone(NULL, &_client);
  108. }
  109. return _clone;
  110. }
  111. void clear_clone()
  112. {
  113. if (_clone)
  114. {
  115. gearman_client_free(_clone);
  116. }
  117. _clone= gearman_client_create(NULL);
  118. }
  119. void reset_clone()
  120. {
  121. if (_clone)
  122. {
  123. gearman_client_free(_clone);
  124. }
  125. _clone= gearman_client_clone(NULL, &_client);
  126. }
  127. };