From: Christian Brauner Date: Wed, 15 Nov 2017 15:05:49 +0000 (+0100) Subject: test: expand console log tests X-Git-Tag: lxc-3.0.0.beta1~182^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a2404e982ddff78d41599a5ae47242c69c6776c;p=thirdparty%2Flxc.git test: expand console log tests Signed-off-by: Christian Brauner --- diff --git a/src/tests/console_log.c b/src/tests/console_log.c index 83a722967..3949b14e1 100644 --- a/src/tests/console_log.c +++ b/src/tests/console_log.c @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) int logfd, ret; char buf[4096 + 1]; ssize_t bytes; - struct stat st; + struct stat st_buffer_log_file, st_log_file, st_log_file_old; struct lxc_container *c; struct lxc_console_log log; bool do_unlink = false; @@ -57,12 +57,18 @@ int main(int argc, char *argv[]) } /* Set console ringbuffer size. */ - if (!c->set_config_item(c, "lxc.console.logsize", "4096")) { - lxc_error("%s\n", "Failed to set config item \"lxc.console.logsize\""); + if (!c->set_config_item(c, "lxc.console.buffer.size", "4096")) { + lxc_error("%s\n", "Failed to set config item \"lxc.console.buffer.size\""); goto on_error_put; } - /* Set on-disk logfile. */ + /* Set ringbuffer log file. */ + if (!c->set_config_item(c, "lxc.console.buffer.logfile", "/tmp/console-buffer-log.log")) { + lxc_error("%s\n", "Failed to set config item \"lxc.console.buffer.logfile\""); + goto on_error_put; + } + + /* Set console log file. */ if (!c->set_config_item(c, "lxc.console.logfile", "/tmp/console-log.log")) { lxc_error("%s\n", "Failed to set config item \"lxc.console.logfile\""); goto on_error_put; @@ -135,11 +141,17 @@ int main(int argc, char *argv[]) goto on_error_stop; } + c->clear_config(c); + + if (!c->load_config(c, NULL)) { + lxc_error("%s\n", "Failed to load config for container \"console-log\""); + goto on_error_stop; + } + if (!c->startl(c, 0, NULL)) { lxc_error("%s\n", "Failed to start container \"console-log\" daemonized"); goto on_error_destroy; } - do_unlink = true; /* Leave some time for the container to write something to the log. */ sleep(2); @@ -158,31 +170,31 @@ int main(int argc, char *argv[]) *log.read_max, log.data); } - logfd = open("/tmp/console-log.log", O_RDONLY); + logfd = open("/tmp/console-buffer-log.log", O_RDONLY); if (logfd < 0) { - lxc_error("%s - Failed to open console log file " - "\"/tmp/console-log.log\"\n", strerror(errno)); + lxc_error("%s - Failed to open console ringbuffer log file " + "\"/tmp/console-buffer-log.log\"\n", strerror(errno)); goto on_error_stop; } bytes = lxc_read_nointr(logfd, buf, 4096 + 1); close(logfd); if (bytes < 0 || ((uint64_t)bytes != *log.read_max)) { - lxc_error("%s - Failed to read console log file " - "\"/tmp/console-log.log\"\n", strerror(errno)); + lxc_error("%s - Failed to read console ringbuffer log file " + "\"/tmp/console-buffer-log.log\"\n", strerror(errno)); goto on_error_stop; } - ret = stat("/tmp/console-log.log", &st); + ret = stat("/tmp/console-buffer-log.log", &st_buffer_log_file); if (ret < 0) { lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno)); goto on_error_stop; } - if ((uint64_t)st.st_size != *log.read_max) { + if ((uint64_t)st_buffer_log_file.st_size != *log.read_max) { lxc_error("On-disk logfile size and used ringbuffer size do " "not match: %" PRIu64 " != %" PRIu64 "\n", - (uint64_t)st.st_size, *log.read_max); + (uint64_t)st_buffer_log_file.st_size, *log.read_max); goto on_error_stop; } @@ -192,8 +204,86 @@ int main(int argc, char *argv[]) goto on_error_stop; } else { lxc_debug("Retrieved %" PRIu64 " bytes from console log and " - "console log file. Contents are: \"%s\" - \"%s\"\n", - *log.read_max, log.data, buf); + "console ringbuffer log file. Contents are: \"%s\" - " + "\"%s\"\n", *log.read_max, log.data, buf); + } + + ret = stat("/tmp/console-log.log", &st_log_file); + if (ret < 0) { + lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno)); + goto on_error_stop; + } + + /* Turn on rotation for the console log file. */ + if (!c->set_config_item(c, "lxc.console.rotate", "1")) { + lxc_error("%s\n", "Failed to set config item \"lxc.console.rotate\""); + goto on_error_put; + } + + if (!c->stop(c)) { + lxc_error("%s\n", "Failed to stop container \"console-log\""); + goto on_error_stop; + } + + if (!c->startl(c, 0, NULL)) { + lxc_error("%s\n", "Failed to start container \"console-log\" daemonized"); + goto on_error_destroy; + } + + /* Leave some time for the container to write something to the log. */ + sleep(2); + + /* The console log file size must be greater than the console log file + * size since we append to the latter and we truncated the former + * already. + */ + if (st_log_file.st_size <= st_buffer_log_file.st_size) { + lxc_error("%s - Console log file size was smaller than the " + "console buffer log file size: %zu < %zu\n", + strerror(errno), (size_t)st_log_file.st_size, + (size_t)st_buffer_log_file.st_size); + goto on_error_stop; + } else { + lxc_debug("Console log file size is %zu bytes and console " + "buffer log file size is %zu bytes\n", + (size_t)st_log_file.st_size, + (size_t)st_buffer_log_file.st_size); + } + + ret = stat("/tmp/console-log.log", &st_log_file); + if (ret < 0) { + lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno)); + goto on_error_stop; + } + + log.read_max = &(uint64_t){0}; + log.read = false; + log.write_logfile = false; + log.clear = true; + ret = c->console_log(c, &log); + if (ret < 0) { + lxc_error("%s - Failed to retrieve console log \n", strerror(-ret)); + goto on_error_stop; + } + + /* There should now be a rotated log file called + * "/tmp/console-log.log.1" + */ + ret = stat("/tmp/console-log.log.1", &st_log_file_old); + if (ret < 0) { + lxc_error("%s - Failed to stat on-disk logfile\n", strerror(errno)); + goto on_error_stop; + } + + /* The rotated log file should have the same size as before the + * rotation. + */ + if (st_log_file.st_size != st_log_file_old.st_size) { + lxc_error("%s - Console log file size changed during log " + "rotation: %zu != %zu\n", + strerror(errno), (size_t)st_log_file.st_size, + (size_t)st_log_file_old.st_size); + goto on_error_stop; } fret = 0; @@ -211,7 +301,13 @@ on_error_put: if (do_unlink) { ret = unlink("/tmp/console-log.log"); if (ret < 0) - lxc_error("%s - Failed to remove container log file\n", strerror(errno)); + lxc_error("%s - Failed to remove container log file\n", + strerror(errno)); + + ret = unlink("/tmp/console-log.log.1"); + if (ret < 0) + lxc_error("%s - Failed to remove container log file\n", + strerror(errno)); } exit(fret); }