X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Fserver.h;h=00f29cd837b19c9c21630c7fbbf0be835d942b04;hb=14b03373f1e507ec2600b0d1ad3324e5a4a222e0;hp=c209881e3de25c3cf2b23ab97b87b44012de5235;hpb=7abcaebdc4c3dd11b779eaef58a7371fb82ae888;p=m6w6%2Flibmemcached diff --git a/libtest/server.h b/libtest/server.h index c209881e..00f29cd8 100644 --- a/libtest/server.h +++ b/libtest/server.h @@ -14,26 +14,59 @@ #include #include #include +#include #define SERVERS_TO_CREATE 5 +struct server_st; + +typedef pid_t (test_server_getpid)(server_st &); +typedef bool (test_server_ping)(server_st &); + struct server_st { private: bool _used; pid_t _pid; in_port_t _port; char pid_file[FILENAME_MAX]; // Did we start it, or was it just sitting there? + std::string _command; + test_server_getpid *__get_pid; + test_server_ping *__ping; + std::string _hostname; + public: + server_st(in_port_t port_arg, test_server_getpid *, test_server_ping *); + + server_st(const std::string &socket_file, test_server_getpid *, test_server_ping *); + + void set_methods(test_server_getpid *get_pid_arg, test_server_ping *ping_arg) + { + __get_pid= get_pid_arg; + __ping= ping_arg; + } + + const char *hostname() const + { + if (_hostname.empty()) + return ""; + + return _hostname.c_str(); + } + + bool ping() + { + if (__ping) + return __ping(*this); - char hostname[NI_MAXHOST]; + return false; + } - server_st() : - _used(false), - _pid(-1), - _port(0) + pid_t get_pid() { - pid_file[0]= 0; - strncpy(hostname, "localhost", sizeof(hostname)); + if (__get_pid) + return _pid= __get_pid(*this); + + return -1; } void set_port(in_port_t arg) @@ -48,23 +81,20 @@ public: bool has_port() const { - return not _port == 0; + return (_port != 0); } - void set_used() + void set_command(const char *arg) { - _used= true; + _command= arg; } - void set_pid(pid_t arg) + void set_used() { - _pid= arg; + _used= true; } - pid_t pid() const - { - return _pid; - } + pid_t pid(); bool is_used() const { @@ -75,20 +105,16 @@ public: bool has_pid() { - return _pid > 0; + return (_pid > 1); } bool is_socket() const { - return hostname[0] == '/'; - } - - void set_hostname(const char *arg) - { - strncpy(hostname, arg, sizeof(hostname)); + return _hostname[0] == '/'; } bool kill(); + bool start(); private: void reset_pid(); @@ -98,18 +124,20 @@ std::ostream& operator<<(std::ostream& output, const server_st &arg); struct server_startup_st { - uint8_t count; + uint32_t count; uint8_t udp; std::string server_list; - server_st server[SERVERS_TO_CREATE]; + std::vector servers; server_startup_st() : count(SERVERS_TO_CREATE), udp(0) { } - ~server_startup_st() - { } + void shutdown(); + void push_server(server_st *); + + ~server_startup_st(); }; #ifdef __cplusplus