From 65f5b1d39c2faa3881a969624b5e4e6793ef60e7 Mon Sep 17 00:00:00 2001 From: Klas Lindfors Date: Thu, 23 Aug 2012 08:46:39 +0200 Subject: [PATCH] test calling the library from different threads --- .gitignore | 2 + tests/Makefile.am | 4 +- tests/test_threaded_calls.c | 77 +++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 tests/test_threaded_calls.c diff --git a/.gitignore b/.gitignore index 0be3404..f9ae15e 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,8 @@ tests/test_key_generation tests/test_key_generation.o tests/test_ndef_construction tests/test_ndef_construction.o +tests/test_threaded_calls +tests/test_threaded_calls.o tmp/ usha.lo usha.o diff --git a/tests/Makefile.am b/tests/Makefile.am index 1a1b866..33f9baf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -30,8 +30,10 @@ AM_LDFLAGS = -no-install AM_CFLAGS=-I$(srcdir)/.. -I$(srcdir)/../ykcore LDADD = ../libykpers-1.la $(LTLIBYUBIKEY) +#test_threaded_calls_LDADD = libpthread -ctests = selftest test_args_to_config test_key_generation test_ndef_construction +ctests = selftest test_args_to_config test_key_generation \ + test_ndef_construction test_threaded_calls check_PROGRAMS = $(ctests) TESTS = $(ctests) diff --git a/tests/test_threaded_calls.c b/tests/test_threaded_calls.c new file mode 100644 index 0000000..93e5e55 --- /dev/null +++ b/tests/test_threaded_calls.c @@ -0,0 +1,77 @@ +/* -*- mode:C; c-file-style: "bsd" -*- */ +/* + * Copyright (c) 2011-2012 Yubico AB + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include + +void *start_thread(void *arg) +{ + yk_init(); + YK_STATUS *st = ykds_alloc(); + YK_KEY *yk = 0; + yk_errno = 0; + ykp_errno = 0; + + yk = yk_open_first_key(); + if(yk != 0) { + yk_get_status(yk, st); + yk_close_key(yk); + } + + ykds_free(st); + yk_release(); +} + +void _test_threaded_calls() +{ + int times = 5; + int i; + pthread_t *threads = malloc(sizeof(pthread_t) * times); + + for(i = 0; i < times; i++) { + pthread_create(&threads[i], NULL, start_thread, NULL); + pthread_join(threads[i], NULL); + } + + free(threads); +} + +int main(void) +{ + _test_threaded_calls(); + + return 0; +} + -- 2.39.5