* [tarantool-patches] [PATCH v4 0/4] Syslog destination @ 2018-07-31 10:18 Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination Olga Arkhangelskaia ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Olga Arkhangelskaia @ 2018-07-31 10:18 UTC (permalink / raw) To: tarantool-patches; +Cc: Olga Arkhangelskaia This series adds support of configurable destionation for syslog. The option is called server. Possible options are ip4 and unix socket: syslog:server=unix:/path/to/socket,identity=myinstance syslog:server=ip4:port,identity=tarantool_myinstance If server option is not set, but syslog is used in log configuration - default sockets for syslogd are used: /dev/log or /var/run/syslog. Olga Arkhangelskaia (4): Configurable syslog destination box-tap: test valid log configuration box-tap: syslog destination test unix socket box-tap:syslog remote destination test src/say.c | 103 +++++++++++++++++++++++++++++++++++++++++++--- src/say.h | 13 +++++- test/box-tap/cfg.test.lua | 73 +++++++++++++++++++++++++++++++- 3 files changed, 182 insertions(+), 7 deletions(-) -- https://github.com/tarantool/tarantool/issues/3487 https://github.com/tarantool/tarantool/tree/OKriw/gh-3487-syslog-conf-dest v1: https://www.freelists.org/post/tarantool-patches/PATCH-03-Syslog-destination v2: https://www.freelists.org/post/tarantool-patches/PATCH-v2-03-Syslog-destination v3: https://www.freelists.org/post/tarantool-patches/PATCH-v3-04-Syslog-destination Changes in v2: - Changed tests. Use random port, no sever is started, used current dir - Changed basic structs - now we have emum for syslog dst, reuse log->pathi Changes in v3: - moved test to box-tap - used pcall in case of stopped/unconfigured syslogd - added syslog check syslog configuration test Changes in v4: - fixed memory leak - changed variables name - removed unnecessary libs in tests - removed pcall - fixed identation 2.14.3 (Apple Git-98) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination 2018-07-31 10:18 [tarantool-patches] [PATCH v4 0/4] Syslog destination Olga Arkhangelskaia @ 2018-07-31 10:18 ` Olga Arkhangelskaia 2018-07-31 12:45 ` Vladimir Davydov 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 2/4] box-tap: test valid log configuration Olga Arkhangelskaia ` (2 subsequent siblings) 3 siblings, 1 reply; 8+ messages in thread From: Olga Arkhangelskaia @ 2018-07-31 10:18 UTC (permalink / raw) To: tarantool-patches; +Cc: Olga Arkhangelskaia Added server option to syslog configuration. Server option is responsible for log destination. At the momemt there is two ways of usage:server=unix:/path/to/socket or server=ipv4:port. If port is not set default udp port 514 is used. If logging to syslog is set, however there is no sever options - default location is used: Linux /dev/log and Mac /var/run/syslog. Closes #3487 --- src/say.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/say.h | 13 +++++++- 2 files changed, 110 insertions(+), 6 deletions(-) diff --git a/src/say.c b/src/say.c index ac221dd19..526b8862f 100644 --- a/src/say.c +++ b/src/say.c @@ -36,6 +36,7 @@ #include <stdarg.h> #include <stdio.h> #include <string.h> +#include <netdb.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> @@ -45,6 +46,7 @@ #include <arpa/inet.h> #include <coio_task.h> +#define DEFAULT_PORT 514 pid_t log_pid = 0; int log_level = S_INFO; enum say_format log_format = SF_PLAIN; @@ -473,16 +475,85 @@ syslog_connect_unix(const char *path) return fd; } +/** + * Connect to remote syslogd using server:port. + * @param server address string of remote host. + * @retval not 0 Socket descriptor. + * @retval -1 Socket error. + */ +static int +syslog_connect_remote(const char *server_address) +{ + struct addrinfo *inf, hints, *ptr; + const char *remote; + char buf[10]; + char *portnum, *copy; + int fd = -1; + + copy = strdup(server_address); + if (copy == NULL) { + diag_set(OutOfMemory, strlen(server_address), "malloc", + "stslog server address"); + return fd; + } + portnum = copy; + remote = strsep(&portnum, ":"); + if (portnum == NULL) { + snprintf(buf, sizeof(buf), "%d", DEFAULT_PORT); + portnum = buf; + } + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_protocol = IPPROTO_UDP; + + if (getaddrinfo(remote, (const char*)portnum, NULL, &inf) < 0) { + diag_set(SystemError, "syslog: getaddrinfo failed %s", + gai_strerror(errno)); + goto out; + } + for (ptr = inf; ptr; ptr = ptr->ai_next) { + fd = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); + if (fd < 0) { + diag_set(SystemError, "syslog: socket failed %s", + strerror(errno)); + continue; + } + if (connect(fd, inf->ai_addr, inf->ai_addrlen) != 0) { + close(fd); + fd = -1; + diag_set(SystemError, "syslog:connect failed %s", + strerror(errno)); + continue; + } + break; + } + freeaddrinfo(inf); +out: + free(copy); + return fd; +} + static inline int log_syslog_connect(struct log *log) { /* - * Try two locations: '/dev/log' for Linux and + * If server option is not set use '/dev/log' for Linux and * '/var/run/syslog' for Mac. */ - log->fd = syslog_connect_unix("/dev/log"); - if (log->fd < 0) - log->fd = syslog_connect_unix("/var/run/syslog"); + switch (log->server_type) { + case SAY_SYSLOG_UNIX: + log->fd = syslog_connect_unix(log->path); + break; + case SAY_SYSLOG_REMOTE: + log->fd = syslog_connect_remote(log->path); + break; + default: + log->fd = syslog_connect_unix("/dev/log"); + if (log->fd < 0) + log->fd = syslog_connect_unix("/var/run/syslog"); + + } return log->fd; } @@ -498,6 +569,15 @@ log_syslog_init(struct log *log, const char *init_str) if (say_parse_syslog_opts(init_str, &opts) < 0) return -1; + log->server_type = opts.server_type; + if (log->server_type != SAY_SYSLOG_DEFAULT) { + log->path = strdup(opts.server_path); + if (log->path == NULL) { + diag_set(OutOfMemory, strlen(opts.server_path), + "malloc", "server address"); + return -1; + } + } if (opts.identity == NULL) log->syslog_ident = strdup("tarantool"); else @@ -1031,6 +1111,8 @@ say_syslog_facility_by_name(const char *facility) int say_parse_syslog_opts(const char *init_str, struct say_syslog_opts *opts) { + opts->server_path = NULL; + opts->server_type = SAY_SYSLOG_DEFAULT; opts->identity = NULL; opts->facility = syslog_facility_MAX; opts->copy = strdup(init_str); @@ -1047,7 +1129,18 @@ say_parse_syslog_opts(const char *init_str, struct say_syslog_opts *opts) break; value = option; - if (say_parse_prefix(&value, "identity=")) { + if (say_parse_prefix(&value, "server=")) { + if (opts->server_path != NULL || + opts->server_type != SAY_SYSLOG_DEFAULT) + goto duplicate; + if (say_parse_prefix(&value, "unix:")) { + opts->server_type = SAY_SYSLOG_UNIX; + opts->server_path = value; + } else { + opts->server_type = SAY_SYSLOG_REMOTE; + opts->server_path = value; + } + } else if (say_parse_prefix(&value, "identity=")) { if (opts->identity != NULL) goto duplicate; opts->identity = value; diff --git a/src/say.h b/src/say.h index 2c2395fe0..73697b1b7 100644 --- a/src/say.h +++ b/src/say.h @@ -79,6 +79,12 @@ say_log_level_is_enabled(int level) extern enum say_format log_format; +enum say_logger_syslog_server { + SAY_SYSLOG_DEFAULT, + SAY_SYSLOG_UNIX, + SAY_SYSLOG_REMOTE +}; + enum say_logger_type { /** * Before the app server core is initialized, we do not @@ -141,7 +147,10 @@ struct log { /** The current log level. */ int level; enum say_logger_type type; - /** path to file if logging to file. */ + enum say_logger_syslog_server server_type; + /** Path to file if logging to file, socket + * or server address in case of syslog. + */ char *path; bool nonblock; log_format_func_t format_func; @@ -384,6 +393,8 @@ say_parse_logger_type(const char **str, enum say_logger_type *type); /** Syslog logger initialization params */ struct say_syslog_opts { + enum say_logger_syslog_server server_type; + const char *server_path; const char *identity; enum syslog_facility facility; /* Input copy (content unspecified). */ -- 2.14.3 (Apple Git-98) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination Olga Arkhangelskaia @ 2018-07-31 12:45 ` Vladimir Davydov 0 siblings, 0 replies; 8+ messages in thread From: Vladimir Davydov @ 2018-07-31 12:45 UTC (permalink / raw) To: Olga Arkhangelskaia; +Cc: tarantool-patches On Tue, Jul 31, 2018 at 01:18:30PM +0300, Olga Arkhangelskaia wrote: > Added server option to syslog configuration. > Server option is responsible for log destination. At the momemt > there is two ways of usage:server=unix:/path/to/socket or > server=ipv4:port. If port is not set default udp port 514 is used. > If logging to syslog is set, however there is no sever options - > default location is used: Linux /dev/log and Mac /var/run/syslog. > > Closes #3487 > --- > src/say.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- > src/say.h | 13 +++++++- > 2 files changed, 110 insertions(+), 6 deletions(-) > > diff --git a/src/say.c b/src/say.c > index ac221dd19..526b8862f 100644 > --- a/src/say.c > +++ b/src/say.c > @@ -45,6 +46,7 @@ > #include <arpa/inet.h> > #include <coio_task.h> > > +#define DEFAULT_PORT 514 We don't use macros when we can define a constant in a enum, e.g. enum { DEFAULT_PORT = 512 }; Also, DEFAULT_PORT is a too generic name. I think you should prefix it with SAY_SYSLOG_. > pid_t log_pid = 0; > int log_level = S_INFO; > enum say_format log_format = SF_PLAIN; > @@ -473,16 +475,85 @@ syslog_connect_unix(const char *path) > return fd; > } > > +/** > + * Connect to remote syslogd using server:port. > + * @param server address string of remote host. _ is missing between 'server' and 'address'. > + * @retval not 0 Socket descriptor. > + * @retval -1 Socket error. > + */ > +static int > +syslog_connect_remote(const char *server_address) > +{ > + struct addrinfo *inf, hints, *ptr; > + const char *remote; > + char buf[10]; > + char *portnum, *copy; > + int fd = -1; > + > + copy = strdup(server_address); > + if (copy == NULL) { > + diag_set(OutOfMemory, strlen(server_address), "malloc", > + "stslog server address"); > + return fd; > + } > + portnum = copy; > + remote = strsep(&portnum, ":"); > + if (portnum == NULL) { > + snprintf(buf, sizeof(buf), "%d", DEFAULT_PORT); > + portnum = buf; > + } > + memset(&hints, 0, sizeof(hints)); > + hints.ai_family = AF_INET; > + hints.ai_socktype = SOCK_DGRAM; > + hints.ai_protocol = IPPROTO_UDP; > + > + if (getaddrinfo(remote, (const char*)portnum, NULL, &inf) < 0) { > + diag_set(SystemError, "syslog: getaddrinfo failed %s", > + gai_strerror(errno)); First, getaddrinfo() doesn't set errno. You are supposed to call gai_strerror() on the code it returned. Second, SystemError always appends strerror(errno) to the error message. Since getaddrinfo() doesn't do that, you should set errno manually. EIO seems to be a good choice. Take a look at coio_getaddrinfo() for an example. Third, there's no point to prepend the error message with "syslog:". diag_set() includes file name and string to the error message so finding a culprit shouldn't be a problem. > + goto out; > + } > + for (ptr = inf; ptr; ptr = ptr->ai_next) { > + fd = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); > + if (fd < 0) { > + diag_set(SystemError, "syslog: socket failed %s", > + strerror(errno)); Again. No point to prepend "syslog:" and append strerror(errno). > + continue; > + } > + if (connect(fd, inf->ai_addr, inf->ai_addrlen) != 0) { > + close(fd); > + fd = -1; > + diag_set(SystemError, "syslog:connect failed %s", > + strerror(errno)); Ditto. > + continue; > + } > + break; > + } > + freeaddrinfo(inf); > +out: > + free(copy); > + return fd; > +} > diff --git a/src/say.h b/src/say.h > index 2c2395fe0..73697b1b7 100644 > --- a/src/say.h > +++ b/src/say.h > @@ -79,6 +79,12 @@ say_log_level_is_enabled(int level) > > extern enum say_format log_format; > > +enum say_logger_syslog_server { Let's rename this to say_syslog_server_type? > + SAY_SYSLOG_DEFAULT, > + SAY_SYSLOG_UNIX, > + SAY_SYSLOG_REMOTE > +}; > + > enum say_logger_type { > /** > * Before the app server core is initialized, we do not > @@ -141,7 +147,10 @@ struct log { > /** The current log level. */ > int level; > enum say_logger_type type; > - /** path to file if logging to file. */ > + enum say_logger_syslog_server server_type; Missing comment to 'server_type'. Also, let's prefix it with 'syslog_', like other syslog-related options (syslog_identity, syslog_facility). > + /** Path to file if logging to file, socket > + * or server address in case of syslog. > + */ /** * Malformed comment format. * Multi-line comments should look like this. */ ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tarantool-patches] [PATCH v4 2/4] box-tap: test valid log configuration 2018-07-31 10:18 [tarantool-patches] [PATCH v4 0/4] Syslog destination Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination Olga Arkhangelskaia @ 2018-07-31 10:18 ` Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 3/4] box-tap: syslog destination test unix socket Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 4/4] box-tap:syslog remote destination test Olga Arkhangelskaia 3 siblings, 0 replies; 8+ messages in thread From: Olga Arkhangelskaia @ 2018-07-31 10:18 UTC (permalink / raw) To: tarantool-patches; +Cc: Olga Arkhangelskaia Test case checks that valid log configuration is not broken, as it happened in #3487 --- test/box-tap/cfg.test.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua index ffafdbe42..67e4c3af9 100755 --- a/test/box-tap/cfg.test.lua +++ b/test/box-tap/cfg.test.lua @@ -6,7 +6,7 @@ local socket = require('socket') local fio = require('fio') local uuid = require('uuid') local msgpack = require('msgpack') -test:plan(95) +test:plan(96) -------------------------------------------------------------------------------- -- Invalid values @@ -464,5 +464,13 @@ code = string.format(code_fmt, dir, instance_uuid, uuid.new()) test:is(run_script(code), PANIC, "replicaset_uuid mismatch") fio.rmdir(dir) +-- +-- Check syslog configuration +-- (syslog daemon may be not started hence use pcall) +-- +code = [[pcall(box.cfg, {log = 'syslog:identity=tarantool'}) +]] +test:is(run_script(code), 0, "syslog log configuration") + test:check() os.exit(0) -- 2.14.3 (Apple Git-98) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tarantool-patches] [PATCH v4 3/4] box-tap: syslog destination test unix socket 2018-07-31 10:18 [tarantool-patches] [PATCH v4 0/4] Syslog destination Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 2/4] box-tap: test valid log configuration Olga Arkhangelskaia @ 2018-07-31 10:18 ` Olga Arkhangelskaia 2018-07-31 13:55 ` Vladimir Davydov 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 4/4] box-tap:syslog remote destination test Olga Arkhangelskaia 3 siblings, 1 reply; 8+ messages in thread From: Olga Arkhangelskaia @ 2018-07-31 10:18 UTC (permalink / raw) To: tarantool-patches; +Cc: Olga Arkhangelskaia Adds syslog destination unix test in box-tap. Test redirects logs to newly created unix socket and sets appropriate log level. If log receives the same level - test passes. In case if syslog is not configured we use pcall. Closes #3487 --- test/box-tap/cfg.test.lua | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua index 67e4c3af9..2b1769395 100755 --- a/test/box-tap/cfg.test.lua +++ b/test/box-tap/cfg.test.lua @@ -6,7 +6,7 @@ local socket = require('socket') local fio = require('fio') local uuid = require('uuid') local msgpack = require('msgpack') -test:plan(96) +test:plan(97) -------------------------------------------------------------------------------- -- Invalid values @@ -472,5 +472,32 @@ code = [[pcall(box.cfg, {log = 'syslog:identity=tarantool'}) ]] test:is(run_script(code), 0, "syslog log configuration") +-- +-- Check syslog socket configuration +-- +code = [[ +local socket = require('socket') +local log = require('log') +local fio = require('fio') + +path = fio.pathjoin(fio.cwd(), 'log_unix_socket_test.sock') +unix_socket = socket('AF_UNIX', 'SOCK_DGRAM', 0) +unix_socket:bind('unix/', path) + +opt = string.format("syslog:server=unix:%s,identity=tarantool", path) +res = 1 +box.cfg{log = opt, log_level = 5} +log.info("Test socket syslog destination") +buf = unix_socket:read("Test socket syslog destination", 30) +if buf ~= nil then + if buf:match('Test socket syslog destination') then res = 0 end +end + +unix_socket:close() +os.remove(path) +os.exit(res) +]] +test:is(run_script(code), 0, "unix socket syslog log configuration") + test:check() os.exit(0) -- 2.14.3 (Apple Git-98) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [tarantool-patches] [PATCH v4 3/4] box-tap: syslog destination test unix socket 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 3/4] box-tap: syslog destination test unix socket Olga Arkhangelskaia @ 2018-07-31 13:55 ` Vladimir Davydov 0 siblings, 0 replies; 8+ messages in thread From: Vladimir Davydov @ 2018-07-31 13:55 UTC (permalink / raw) To: Olga Arkhangelskaia; +Cc: tarantool-patches We don't submit tests accompanying a feature in separate patches unless there's a reason to do that. Please fold patches 3 and 4 in patch 1. On Tue, Jul 31, 2018 at 01:18:32PM +0300, Olga Arkhangelskaia wrote: > Adds syslog destination unix test in box-tap. > Test redirects logs to newly created unix socket and sets appropriate > log level. If log receives the same level - test passes. In case if > syslog is not configured we use pcall. > > Closes #3487 > --- > test/box-tap/cfg.test.lua | 29 ++++++++++++++++++++++++++++- > 1 file changed, 28 insertions(+), 1 deletion(-) > > diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua > index 67e4c3af9..2b1769395 100755 > --- a/test/box-tap/cfg.test.lua > +++ b/test/box-tap/cfg.test.lua > @@ -6,7 +6,7 @@ local socket = require('socket') > local fio = require('fio') > local uuid = require('uuid') > local msgpack = require('msgpack') > -test:plan(96) > +test:plan(97) > > -------------------------------------------------------------------------------- > -- Invalid values > @@ -472,5 +472,32 @@ code = [[pcall(box.cfg, {log = 'syslog:identity=tarantool'}) > ]] > test:is(run_script(code), 0, "syslog log configuration") > > +-- > +-- Check syslog socket configuration > +-- s/socket/unix socket Also, we usually mention GitHub ticket in the comment to a test case, e.g. gh-3487. > +code = [[ > +local socket = require('socket') > +local log = require('log') > +local fio = require('fio') > + > +path = fio.pathjoin(fio.cwd(), 'log_unix_socket_test.sock') > +unix_socket = socket('AF_UNIX', 'SOCK_DGRAM', 0) > +unix_socket:bind('unix/', path) > + > +opt = string.format("syslog:server=unix:%s,identity=tarantool", path) > +res = 1 > +box.cfg{log = opt, log_level = 5} > +log.info("Test socket syslog destination") > +buf = unix_socket:read("Test socket syslog destination", 30) > +if buf ~= nil then > + if buf:match('Test socket syslog destination') then res = 0 end > +end I don't like that you use such a long string as a delimiter (first argument of 'read' is delimiter, right?). It looks weird. Why not rewrite the code exactly in the way you use for testing udp syslog destination? > + > +unix_socket:close() > +os.remove(path) > +os.exit(res) > +]] > +test:is(run_script(code), 0, "unix socket syslog log configuration") > + > test:check() > os.exit(0) ^ permalink raw reply [flat|nested] 8+ messages in thread
* [tarantool-patches] [PATCH v4 4/4] box-tap:syslog remote destination test 2018-07-31 10:18 [tarantool-patches] [PATCH v4 0/4] Syslog destination Olga Arkhangelskaia ` (2 preceding siblings ...) 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 3/4] box-tap: syslog destination test unix socket Olga Arkhangelskaia @ 2018-07-31 10:18 ` Olga Arkhangelskaia 2018-07-31 13:57 ` Vladimir Davydov 3 siblings, 1 reply; 8+ messages in thread From: Olga Arkhangelskaia @ 2018-07-31 10:18 UTC (permalink / raw) To: tarantool-patches; +Cc: Olga Arkhangelskaia Adds syslog remote destination test in box-tap. Test creates server, sets appropriate log level and redirects logs to it. If log level received by the server is the same - test passes. If syslogd is not running we use pcall. Closes #3487 --- test/box-tap/cfg.test.lua | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua index 2b1769395..34a6eaa66 100755 --- a/test/box-tap/cfg.test.lua +++ b/test/box-tap/cfg.test.lua @@ -6,7 +6,7 @@ local socket = require('socket') local fio = require('fio') local uuid = require('uuid') local msgpack = require('msgpack') -test:plan(97) +test:plan(98) -------------------------------------------------------------------------------- -- Invalid values @@ -499,5 +499,41 @@ os.exit(res) ]] test:is(run_script(code), 0, "unix socket syslog log configuration") +-- +-- Check syslog remote configuration +-- +code = [[ +local socket = require('socket') +local log = require('log') + +addr = '127.0.0.1' +port = 1000 + math.random(32768) + +sc = socket('AF_INET', 'SOCK_DGRAM', 'udp') +local attempt = 0 +while attempt < 10 do + if not sc:bind (addr, port) then + port = 1000 + math.random(32768) + attempt = attempt + 1 + else + break + end +end +sc:bind(addr, port) + +local opt = string.format("syslog:server=%s:%u,identity=tarantool", addr, port) +local res = 1 +box.cfg{log = opt, log_level = 5} +log.info('Test syslog destination') +while (sc:readable(1)) do + buf = sc:recv(1000) + if buf:match('Test syslog destination') then res = 0 end +end + +sc:close() +os.exit(res) +]] +test:is(run_script(code), 0, "remote syslog log configuration") + test:check() os.exit(0) -- 2.14.3 (Apple Git-98) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [tarantool-patches] [PATCH v4 4/4] box-tap:syslog remote destination test 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 4/4] box-tap:syslog remote destination test Olga Arkhangelskaia @ 2018-07-31 13:57 ` Vladimir Davydov 0 siblings, 0 replies; 8+ messages in thread From: Vladimir Davydov @ 2018-07-31 13:57 UTC (permalink / raw) To: Olga Arkhangelskaia; +Cc: tarantool-patches On Tue, Jul 31, 2018 at 01:18:33PM +0300, Olga Arkhangelskaia wrote: > Adds syslog remote destination test in box-tap. > Test creates server, sets appropriate log level and redirects logs > to it. If log level received by the server is the same - test passes. > If syslogd is not running we use pcall. > > Closes #3487 > --- > test/box-tap/cfg.test.lua | 38 +++++++++++++++++++++++++++++++++++++- > 1 file changed, 37 insertions(+), 1 deletion(-) > > diff --git a/test/box-tap/cfg.test.lua b/test/box-tap/cfg.test.lua > index 2b1769395..34a6eaa66 100755 > --- a/test/box-tap/cfg.test.lua > +++ b/test/box-tap/cfg.test.lua > @@ -6,7 +6,7 @@ local socket = require('socket') > local fio = require('fio') > local uuid = require('uuid') > local msgpack = require('msgpack') > -test:plan(97) > +test:plan(98) > > -------------------------------------------------------------------------------- > -- Invalid values > @@ -499,5 +499,41 @@ os.exit(res) > ]] > test:is(run_script(code), 0, "unix socket syslog log configuration") > > +-- > +-- Check syslog remote configuration > +-- > +code = [[ > +local socket = require('socket') > +local log = require('log') > + > +addr = '127.0.0.1' > +port = 1000 + math.random(32768) > + > +sc = socket('AF_INET', 'SOCK_DGRAM', 'udp') > +local attempt = 0 > +while attempt < 10 do > + if not sc:bind (addr, port) then > + port = 1000 + math.random(32768) > + attempt = attempt + 1 > + else > + break A tab instead of spaces. Please fix indentation. > + end > +end > +sc:bind(addr, port) > + > +local opt = string.format("syslog:server=%s:%u,identity=tarantool", addr, port) > +local res = 1 > +box.cfg{log = opt, log_level = 5} > +log.info('Test syslog destination') > +while (sc:readable(1)) do The parentheses are redundant. > + buf = sc:recv(1000) I think that a message can get split (at least, theoretically). Shouldn't you append the result to the buffer instead: buf = buf .. sc:recv(1000) > + if buf:match('Test syslog destination') then res = 0 end > +end > + > +sc:close() > +os.exit(res) > +]] > +test:is(run_script(code), 0, "remote syslog log configuration") > + > test:check() > os.exit(0) ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-07-31 13:57 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-07-31 10:18 [tarantool-patches] [PATCH v4 0/4] Syslog destination Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 1/4] Configurable syslog destination Olga Arkhangelskaia 2018-07-31 12:45 ` Vladimir Davydov 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 2/4] box-tap: test valid log configuration Olga Arkhangelskaia 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 3/4] box-tap: syslog destination test unix socket Olga Arkhangelskaia 2018-07-31 13:55 ` Vladimir Davydov 2018-07-31 10:18 ` [tarantool-patches] [PATCH v4 4/4] box-tap:syslog remote destination test Olga Arkhangelskaia 2018-07-31 13:57 ` Vladimir Davydov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox