summaryrefslogtreecommitdiffstats
path: root/logd/src/tests/rotate
diff options
context:
space:
mode:
Diffstat (limited to 'logd/src/tests/rotate')
-rw-r--r--logd/src/tests/rotate/.gitignore11
-rw-r--r--logd/src/tests/rotate/CMakeLists.txt12
-rw-r--r--logd/src/tests/rotate/DESC2
-rw-r--r--logd/src/tests/rotate/FILES4
-rwxr-xr-xlogd/src/tests/rotate/create_configfile.sh13
-rw-r--r--logd/src/tests/rotate/dummylogger.cpp29
-rw-r--r--logd/src/tests/rotate/dummyserver.cpp50
-rwxr-xr-xlogd/src/tests/rotate/rotate_test.sh32
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