diff options
Diffstat (limited to 'logd/src/tests/rotate')
-rw-r--r-- | logd/src/tests/rotate/.gitignore | 11 | ||||
-rw-r--r-- | logd/src/tests/rotate/CMakeLists.txt | 12 | ||||
-rw-r--r-- | logd/src/tests/rotate/DESC | 2 | ||||
-rw-r--r-- | logd/src/tests/rotate/FILES | 4 | ||||
-rwxr-xr-x | logd/src/tests/rotate/create_configfile.sh | 13 | ||||
-rw-r--r-- | logd/src/tests/rotate/dummylogger.cpp | 29 | ||||
-rw-r--r-- | logd/src/tests/rotate/dummyserver.cpp | 50 | ||||
-rwxr-xr-x | logd/src/tests/rotate/rotate_test.sh | 32 |
8 files changed, 153 insertions, 0 deletions
diff --git a/logd/src/tests/rotate/.gitignore b/logd/src/tests/rotate/.gitignore new file mode 100644 index 00000000000..5e5dafe459c --- /dev/null +++ b/logd/src/tests/rotate/.gitignore @@ -0,0 +1,11 @@ +*.pid +.depend +Makefile +logd.cfg +dummylogger +dummyserver +logserver.port +rotate_test +vespa.log* +logd_dummylogger_app +logd_dummyserver_app diff --git a/logd/src/tests/rotate/CMakeLists.txt b/logd/src/tests/rotate/CMakeLists.txt new file mode 100644 index 00000000000..0398b14bcf4 --- /dev/null +++ b/logd/src/tests/rotate/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(logd_dummyserver_app + SOURCES + dummyserver.cpp + DEPENDS +) +vespa_add_executable(logd_dummylogger_app + SOURCES + dummylogger.cpp + DEPENDS +) +vespa_add_test(NAME logd_rotate_test NO_VALGRIND COMMAND sh rotate_test.sh BENCHMARK) diff --git a/logd/src/tests/rotate/DESC b/logd/src/tests/rotate/DESC new file mode 100644 index 00000000000..202911eb96e --- /dev/null +++ b/logd/src/tests/rotate/DESC @@ -0,0 +1,2 @@ +Test that logd will drop data in favor of rotation if log server is +too slow. diff --git a/logd/src/tests/rotate/FILES b/logd/src/tests/rotate/FILES new file mode 100644 index 00000000000..8a7b941417d --- /dev/null +++ b/logd/src/tests/rotate/FILES @@ -0,0 +1,4 @@ +rotate_test.sh +dummyserver.cpp +dummylogger.cpp +defaults-logd.cfg diff --git a/logd/src/tests/rotate/create_configfile.sh b/logd/src/tests/rotate/create_configfile.sh new file mode 100755 index 00000000000..3211218c369 --- /dev/null +++ b/logd/src/tests/rotate/create_configfile.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +read port < logserver.port + +cat > logd.cfg << EOF +logserver.host "localhost" +logserver.port $port +rotate.size 1024 +rotate.age 1000 +remove.totalmegabytes 100 +remove.age 30 +EOF diff --git a/logd/src/tests/rotate/dummylogger.cpp b/logd/src/tests/rotate/dummylogger.cpp new file mode 100644 index 00000000000..375ce4026b3 --- /dev/null +++ b/logd/src/tests/rotate/dummylogger.cpp @@ -0,0 +1,29 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <vespa/log/log.h> +LOG_SETUP("dummylogger"); + +int +main(int argc, char **argv) +{ + (void) argc; + (void) argv; + int cnt = 100000; + for (int i = 0; i < cnt; ++i) { + LOG(info, "This is log message %d/%d", i + 1, cnt); + if ((i % 100) == 0) { + struct timespec t; + t.tv_sec = 0; + t.tv_nsec = 250000000; + nanosleep(&t, 0); + } + if ((i % 1000) == 999) { + int percent = (i + 1) / 1000; + fprintf(stdout, "log progress: %d%%\n", percent); + fflush(stdout); + } + } + return 0; +} diff --git a/logd/src/tests/rotate/dummyserver.cpp b/logd/src/tests/rotate/dummyserver.cpp new file mode 100644 index 00000000000..c36bf4597cb --- /dev/null +++ b/logd/src/tests/rotate/dummyserver.cpp @@ -0,0 +1,50 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <time.h> +#include <fcntl.h> +#include <vespa/vespalib/net/socket_address.h> + +void error(const char *msg) +{ + perror(msg); + exit(1); +} + +int main(int /*argc*/, char ** /*argv*/) +{ + auto handle = vespalib::SocketAddress::select_local(0).listen(); + if (!handle) { + error("ERROR: could not listen to server port"); + } + int portno = vespalib::SocketAddress::address_of(handle.get()).port(); + printf("Got port %d", portno); + int fd = open("logserver.port", O_CREAT | O_WRONLY, + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + char out[6]; + sprintf(out, "%d\n", portno); + write(fd, out, sizeof(out)); + close(fd); + sockaddr_storage cli_addr; + socklen_t clilen = sizeof(cli_addr); + int newsockfd = accept(handle.get(), + (struct sockaddr *) &cli_addr, + &clilen); + if (newsockfd < 0) + error("ERROR on accept"); + char buffer[1024]; + while (true) { + ssize_t n = read(newsockfd, buffer, sizeof(buffer)); + if (n < 0) error("ERROR reading from socket"); + struct timespec t; + t.tv_sec = 0; + t.tv_nsec = 200000000; + nanosleep(&t, 0); + } + return 0; +} diff --git a/logd/src/tests/rotate/rotate_test.sh b/logd/src/tests/rotate/rotate_test.sh new file mode 100755 index 00000000000..97962e0485c --- /dev/null +++ b/logd/src/tests/rotate/rotate_test.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +export VESPA_LOG_TARGET=file:vespa.log + +rm -rf vespa.log* + +./logd_dummyserver_app & +echo $! > dummyserver.pid + +sleep 5 + +./create_configfile.sh + + +export VESPA_CONFIG_ID=file:logd.cfg +../../apps/logd/logd & +echo $! > logd.pid + +./logd_dummylogger_app + +echo "stopping servers..." +cat *.pid | xargs kill + +echo "looking for incomplete log forwarding due to slow log server..." +if grep incomplete vespa.log*; then + echo "OK" + exit 0 +else + echo "FAIL" + exit 1 +fi |