~brianaker/libmemcached/gear-clean

« back to all changes in this revision

Viewing changes to libtest/gearmand.cc

  • Committer: Brian Aker
  • Date: 2021-05-13 06:07:09 UTC
  • Revision ID: brian@tangent.org-20210513060709-tis67obw5k799o7a
More Gear/MySQL removal and udp test disable since server no longer comes compiled with it

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2
 
 *
3
 
 *  Data Differential YATL (i.e. libtest)  library
4
 
 *
5
 
 *  Copyright (C) 2012 Data Differential, http://datadifferential.com/
6
 
 *
7
 
 *  Redistribution and use in source and binary forms, with or without
8
 
 *  modification, are permitted provided that the following conditions are
9
 
 *  met:
10
 
 *
11
 
 *      * Redistributions of source code must retain the above copyright
12
 
 *  notice, this list of conditions and the following disclaimer.
13
 
 *
14
 
 *      * Redistributions in binary form must reproduce the above
15
 
 *  copyright notice, this list of conditions and the following disclaimer
16
 
 *  in the documentation and/or other materials provided with the
17
 
 *  distribution.
18
 
 *
19
 
 *      * The names of its contributors may not be used to endorse or
20
 
 *  promote products derived from this software without specific prior
21
 
 *  written permission.
22
 
 *
23
 
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
 
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
 
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
 
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
 
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
 
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
 
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
 
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
 
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
 
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
 
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
 
 *
35
 
 */
36
 
 
37
 
#include "libtest/yatlcon.h"
38
 
#include <libtest/common.h>
39
 
 
40
 
#include <libtest/gearmand.h>
41
 
 
42
 
using namespace libtest;
43
 
 
44
 
#include <cassert>
45
 
#include <cerrno>
46
 
#include <cstdio>
47
 
#include <cstdlib>
48
 
#include <cstring>
49
 
#include <iostream>
50
 
#include <signal.h>
51
 
#include <sstream>
52
 
#include <sys/types.h>
53
 
#include <sys/wait.h>
54
 
#include <unistd.h>
55
 
 
56
 
#ifndef __INTEL_COMPILER
57
 
#pragma GCC diagnostic ignored "-Wold-style-cast"
58
 
#endif
59
 
 
60
 
using namespace libtest;
61
 
 
62
 
class Gearmand : public libtest::Server
63
 
{
64
 
private:
65
 
public:
66
 
  Gearmand(const std::string& host_arg, in_port_t port_arg, bool libtool_, const char* binary);
67
 
 
68
 
  bool ping()
69
 
  {
70
 
    reset_error();
71
 
 
72
 
    if (out_of_ban_killed())
73
 
    {
74
 
      return false;
75
 
    }
76
 
 
77
 
    SimpleClient client(_hostname, _port);
78
 
 
79
 
    std::string response;
80
 
    bool ret= client.send_message("version", response);
81
 
 
82
 
    if (client.is_error())
83
 
    {
84
 
      error(client.error());
85
 
    }
86
 
 
87
 
    return ret;
88
 
  }
89
 
 
90
 
  const char *name()
91
 
  {
92
 
    return "gearmand";
93
 
  };
94
 
 
95
 
  void log_file_option(Application& app, const std::string& arg)
96
 
  {
97
 
    if (arg.empty() == false)
98
 
    {
99
 
      std::string buffer("--log-file=");
100
 
      buffer+= arg;
101
 
      app.add_option("--verbose=DEBUG");
102
 
      app.add_option(buffer);
103
 
    }
104
 
  }
105
 
 
106
 
  bool has_log_file_option() const
107
 
  {
108
 
    return true;
109
 
  }
110
 
 
111
 
  bool is_libtool()
112
 
  {
113
 
    return true;
114
 
  }
115
 
 
116
 
  bool has_syslog() const
117
 
  {
118
 
    return false; //  --syslog.errmsg-enable
119
 
  }
120
 
 
121
 
  bool has_port_option() const
122
 
  {
123
 
    return true;
124
 
  }
125
 
 
126
 
  bool build();
127
 
};
128
 
 
129
 
Gearmand::Gearmand(const std::string& host_arg, in_port_t port_arg, bool libtool_, const char* binary_arg) :
130
 
  libtest::Server(host_arg, port_arg, binary_arg, libtool_)
131
 
{
132
 
  set_pid_file();
133
 
}
134
 
 
135
 
bool Gearmand::build()
136
 
{
137
 
  if (getuid() == 0 or geteuid() == 0)
138
 
  {
139
 
    add_option("-u", "root");
140
 
  }
141
 
 
142
 
  add_option("--listen=localhost");
143
 
 
144
 
  return true;
145
 
}
146
 
 
147
 
namespace libtest {
148
 
 
149
 
libtest::Server *build_gearmand(const char *hostname, in_port_t try_port, const char* binary)
150
 
{
151
 
  if (binary == NULL)
152
 
  {
153
 
#if defined(HAVE_GEARMAND_BINARY)
154
 
# if defined(GEARMAND_BINARY)
155
 
    if (HAVE_GEARMAND_BINARY)
156
 
    {
157
 
      binary= GEARMAND_BINARY;
158
 
    }
159
 
# endif
160
 
#endif
161
 
  }
162
 
 
163
 
  if (binary == NULL)
164
 
  {
165
 
    return NULL;
166
 
  }
167
 
 
168
 
  bool is_libtool_script= true;
169
 
 
170
 
  if (binary[0] == '/')
171
 
  {
172
 
    is_libtool_script= false;
173
 
  }
174
 
 
175
 
  return new Gearmand(hostname, try_port, is_libtool_script, binary);
176
 
}
177
 
 
178
 
}