summaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-12-12 22:55:55 +0000
committerKen Raeburn <raeburn@mit.edu>2004-12-12 22:55:55 +0000
commit398f4520c2a9357d6ab5aff8be6dec89846674bf (patch)
tree4e754c4e494a952223d10544a328510db7eae653 /src/tests
parent61b07513ee6f0e85b33a705cec403651b2fe28e7 (diff)
downloadkrb5-398f4520c2a9357d6ab5aff8be6dec89846674bf.tar.gz
krb5-398f4520c2a9357d6ab5aff8be6dec89846674bf.tar.xz
krb5-398f4520c2a9357d6ab5aff8be6dec89846674bf.zip
new test prog "prof1" for profile reloading
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16931 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/threads/ChangeLog5
-rw-r--r--src/tests/threads/Makefile.in5
-rw-r--r--src/tests/threads/prof1.c79
3 files changed, 89 insertions, 0 deletions
diff --git a/src/tests/threads/ChangeLog b/src/tests/threads/ChangeLog
index b4c90abb3..32fde2353 100644
--- a/src/tests/threads/ChangeLog
+++ b/src/tests/threads/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-12 Ken Raeburn <raeburn@mit.edu>
+
+ * prof1.c: New file.
+ * Makefile.in (prof1, prof1.o): New targets.
+
2004-08-03 Ken Raeburn <raeburn@mit.edu>
* Makefile.in, t_rcache.c: New files.
diff --git a/src/tests/threads/Makefile.in b/src/tests/threads/Makefile.in
index dfcc03127..c164717e7 100644
--- a/src/tests/threads/Makefile.in
+++ b/src/tests/threads/Makefile.in
@@ -24,6 +24,11 @@ syms: syms.o
run-syms: syms
$(RUN_SETUP) ./syms
+prof1: prof1.o $(KRB5_BASE_DEPLIBS)
+ $(CC_LINK) -o prof1 prof1.o $(KRB5_BASE_LIBS) -lpthread
+
+prof1.o: prof1.c
+
check-unix:: run-t_rcache
install::
diff --git a/src/tests/threads/prof1.c b/src/tests/threads/prof1.c
new file mode 100644
index 000000000..766bfa3d0
--- /dev/null
+++ b/src/tests/threads/prof1.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <time.h>
+#include <sys/time.h>
+#include <utime.h>
+#include <com_err.h>
+#include <profile.h>
+
+int nthreads = 10;
+unsigned int delay = 3600;
+
+volatile int done = 0; /* XXX hack */
+
+const char *path = "/tmp/foo1.conf:/tmp/foo.conf";
+const char *filename = "/tmp/foo.conf";
+
+const char *prog;
+
+static void *worker(void *arg)
+{
+ profile_t p;
+ long err;
+ int i;
+ const char *const names[] = {
+ "one", "two", "three", 0
+ };
+ char **values;
+ const char *mypath = (random() & 1) ? path : filename;
+
+ while (!done) {
+ err = profile_init_path(mypath, &p);
+ if (err) {
+ com_err(prog, err, "calling profile_init(\"%s\")", mypath);
+ exit(1);
+ }
+ for (i = 0; i < 10; i++) {
+ values = 0;
+ err = profile_get_values(p, names, &values);
+ if (err == 0 && values != 0)
+ profile_free_list(values);
+ }
+ profile_release(p);
+ }
+ return 0;
+}
+
+static void *modifier(void *arg)
+{
+ struct timespec req;
+ while (!done) {
+ req.tv_sec = 0;
+ req.tv_nsec = random() & 499999999;
+ nanosleep(&req, 0);
+ utime(filename, 0);
+/* printf("."), fflush(stdout); */
+ }
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ int i;
+ pthread_t thr;
+
+ prog = argv[0];
+ for (i = 0; i < nthreads; i++) {
+ assert(0 == pthread_create(&thr, 0, worker, 0));
+ }
+ sleep(1);
+ pthread_create(&thr, 0, modifier, 0);
+ sleep(delay);
+ done = 1;
+ sleep(2);
+ return 0;
+}