Skip to content

Commit

Permalink
test: expand console log tests
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Christian Brauner committed Nov 17, 2017
1 parent 966b9ec commit 8a2404e
Showing 1 changed file with 112 additions and 16 deletions.
128 changes: 112 additions & 16 deletions src/tests/console_log.c
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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;
}

Expand All @@ -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;
Expand All @@ -211,7 +301,13 @@ int main(int argc, char *argv[])
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);
}

0 comments on commit 8a2404e

Please sign in to comment.