diff options
Diffstat (limited to 'Source/charon/tests')
-rw-r--r-- | Source/charon/tests/job_queue_test.c | 101 | ||||
-rw-r--r-- | Source/charon/tests/job_queue_test.h | 35 | ||||
-rw-r--r-- | Source/charon/tests/linked_list_test.c | 85 | ||||
-rw-r--r-- | Source/charon/tests/linked_list_test.h | 36 | ||||
-rw-r--r-- | Source/charon/tests/tests.h | 41 | ||||
-rw-r--r-- | Source/charon/tests/thread_pool_test.c | 40 | ||||
-rw-r--r-- | Source/charon/tests/thread_pool_test.h | 30 |
7 files changed, 368 insertions, 0 deletions
diff --git a/Source/charon/tests/job_queue_test.c b/Source/charon/tests/job_queue_test.c new file mode 100644 index 000000000..df110c0cf --- /dev/null +++ b/Source/charon/tests/job_queue_test.c @@ -0,0 +1,101 @@ +/** + * @file job_queue_test.c + * + * @brief Tests to test the Job-Queue type job_queue_t + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + + +//#include <stdlib.h> +#include <freeswan.h> +#include <pluto/constants.h> +#include <pluto/defs.h> +#include <pthread.h> + +#include "../tester.h" +#include "../job_queue.h" + + +typedef struct job_queue_test_s job_queue_test_t; + +struct job_queue_test_s{ + tester_t *tester; + job_queue_t *job_queue; + int max_queue_item_count; +}; + +/** + * @brief sender thread used in the the job_queue test function + */ +static void test_job_queue_sender(job_queue_test_t * testinfo) +{ + + int i; + + for (i = 0; i < testinfo->max_queue_item_count; i++) + { + int *value = alloc_thing(int,"int"); + *value = i; + job_t *job = job_create(INCOMING_PACKET,value); + testinfo->job_queue->add(testinfo->job_queue,job); + } +} + +/** + * @brief receiver thread used in the the job_queue test function + */ +static void test_job_queue_receiver(job_queue_test_t * testinfo) +{ + int i; + + for (i = 0; i < testinfo->max_queue_item_count; i++) + { + job_t *job; + testinfo->tester->assert_true(testinfo->tester,(testinfo->job_queue->get(testinfo->job_queue,&job) == SUCCESS), "get job call check"); + testinfo->tester->assert_true(testinfo->tester,(job->type == INCOMING_PACKET), "job type check"); + testinfo->tester->assert_true(testinfo->tester,((*((int *) (job->assigned_data))) == i), "job value check"); + + pfree(job->assigned_data); + testinfo->tester->assert_true(testinfo->tester,(job->destroy(job) == SUCCESS), "job destroy call check"); + } +} + +/* + * + * description is in header file + */ +void test_job_queue(tester_t *tester) +{ + int value = 1000; + pthread_t sender_thread, receiver_thread; + job_queue_t *job_queue = job_queue_create(); + job_queue_test_t test_infos; + test_infos.tester = tester; + test_infos.job_queue = job_queue; + test_infos.max_queue_item_count = 100000; + + pthread_create( &receiver_thread, NULL,(void*(*)(void*)) &test_job_queue_receiver, (void*) &test_infos); + pthread_create( &sender_thread, NULL,(void*(*)(void*)) &test_job_queue_sender, (void*) &test_infos); + + pthread_join(sender_thread, NULL); + pthread_join(receiver_thread, NULL); + + tester->assert_true(tester,(job_queue->get_count(job_queue,&value) == SUCCESS), "get count call check"); + tester->assert_true(tester,(value == 0), "get count value check"); + tester->assert_true(tester,(job_queue->destroy(job_queue) == SUCCESS), "destroy call check"); +} diff --git a/Source/charon/tests/job_queue_test.h b/Source/charon/tests/job_queue_test.h new file mode 100644 index 000000000..b2076eff3 --- /dev/null +++ b/Source/charon/tests/job_queue_test.h @@ -0,0 +1,35 @@ +/** + * @file job_queue_test.h + * + * @brief Tests to test the Job-Queue type job_queue_t + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef JOB_QUEUE_TEST_H_ +#define JOB_QUEUE_TEST_H_ + +/** + * @brief Test function used to test the job_queue functionality + * + * @param tester associated tester object + */ +void test_job_queue(tester_t *tester); + +test_t job_queue_test1 = {test_job_queue,"Job-Queue Test1"}; + +#endif /*JOB_QUEUE_TEST_H_*/ diff --git a/Source/charon/tests/linked_list_test.c b/Source/charon/tests/linked_list_test.c new file mode 100644 index 000000000..312759cd3 --- /dev/null +++ b/Source/charon/tests/linked_list_test.c @@ -0,0 +1,85 @@ +/** + * @file linked_list_test.c + * + * @brief Tests to test the Linked List type linked_list_t + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include <string.h> + +#include "../tester.h" +#include "../linked_list.h" + + /* + * Description in header-file + */ +void test_linked_list(tester_t *tester) +{ + void *test_value = NULL; + + linked_list_t *linked_list = linked_list_create(); + tester->assert_true(tester,(linked_list->count == 0), "count check"); + + linked_list->insert_first(linked_list,"one"); + tester->assert_true(tester,(linked_list->count == 1), "count check"); + + linked_list->insert_first(linked_list,"two"); + tester->assert_true(tester,(linked_list->count == 2), "count check"); + + linked_list->insert_first(linked_list,"three"); + tester->assert_true(tester,(linked_list->count == 3), "count check"); + + linked_list->insert_first(linked_list,"four"); + tester->assert_true(tester,(linked_list->count == 4), "count check"); + + linked_list->insert_first(linked_list,"five"); + tester->assert_true(tester,(linked_list->count == 5), "count check"); + + tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"five") == 0), "get_first value check"); + tester->assert_true(tester,(linked_list->count == 5), "count check"); + + tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "get_last value check"); + tester->assert_true(tester,(linked_list->count == 5), "count check"); + tester->assert_true(tester,(linked_list->remove_first(linked_list,&test_value) == SUCCESS), "remove_first call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"five") == 0), "remove_first value check"); + tester->assert_true(tester,(linked_list->count == 4), "count check"); + + tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"four") == 0), "get_first value check"); + tester->assert_true(tester,(linked_list->count == 4), "count check"); + + tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "get_last value check"); + tester->assert_true(tester,(linked_list->count == 4), "count check"); + + tester->assert_true(tester,(linked_list->remove_last(linked_list,&test_value) == SUCCESS), "remove_last call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "remove_last value check"); + tester->assert_true(tester,(linked_list->count == 3), "count check"); + + tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"two") == 0), "get_last value check"); + tester->assert_true(tester,(linked_list->count == 3), "count check"); + + tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); + tester->assert_true(tester,(strcmp((char *) test_value,"four") == 0), "get_first value check"); + tester->assert_true(tester,(linked_list->count == 3), "count check"); + + tester->assert_true(tester,(linked_list->destroy(linked_list) == SUCCESS), "destroy call check"); +} diff --git a/Source/charon/tests/linked_list_test.h b/Source/charon/tests/linked_list_test.h new file mode 100644 index 000000000..c1b162e70 --- /dev/null +++ b/Source/charon/tests/linked_list_test.h @@ -0,0 +1,36 @@ +/** + * @file linked_list_test.h + * + * @brief Tests to test the Linked List type linked_list_t + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef LINKED_LIST_TEST_H_ +#define LINKED_LIST_TEST_H_ + +/** + * @brief Tes function for the type linked_list_t + * + * @param tester tester object + */ +void test_linked_list(tester_t *tester); + + +test_t linked_list_test = {test_linked_list,"Linked List"}; + +#endif /*LINKED_LIST_TEST_H_*/ diff --git a/Source/charon/tests/tests.h b/Source/charon/tests/tests.h new file mode 100644 index 000000000..0a6eadc37 --- /dev/null +++ b/Source/charon/tests/tests.h @@ -0,0 +1,41 @@ +/** + * @file tests.h + * + * @brief Lists all the tests to get performed by the tester + * + * New tests have to be added here + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef TESTS_H_ +#define TESTS_H_ + +#include "../tester.h" +#include "linked_list_test.h" +#include "thread_pool_test.h" +#include "job_queue_test.h" + + +test_t *tests[] ={ + &linked_list_test, + &thread_pool_test, + &job_queue_test1, + NULL +}; + +#endif /*TESTS_H_*/ diff --git a/Source/charon/tests/thread_pool_test.c b/Source/charon/tests/thread_pool_test.c new file mode 100644 index 000000000..efa000ca7 --- /dev/null +++ b/Source/charon/tests/thread_pool_test.c @@ -0,0 +1,40 @@ +/** + * @file thread_pool_test.c + * + * @brief Tests to test the Thread-Pool type thread_pool_t + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include <stdlib.h> +#include "../tester.h" +#include "../thread_pool.h" + +/** + * @brief Test function to test the thread pool class + */ +void test_thread_pool(tester_t *tester) +{ + size_t desired_pool_size = 10; + size_t pool_size; + + thread_pool_t *pool = thread_pool_create(desired_pool_size); + pool->get_pool_size(pool, &pool_size); + tester->assert_true(tester, (desired_pool_size == pool_size), "thread creation"); + pool->destroy(pool); +} + diff --git a/Source/charon/tests/thread_pool_test.h b/Source/charon/tests/thread_pool_test.h new file mode 100644 index 000000000..feafa2897 --- /dev/null +++ b/Source/charon/tests/thread_pool_test.h @@ -0,0 +1,30 @@ +/** + * @file thread_pool_test.h + * + * @brief Tests to test the Thread-Pool type thread_pool_t + * + */ + +/* + * Copyright (C) 2005 Jan Hutter, Martin Willi + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef THREAD_POOL_TEST_H_ +#define THREAD_POOL_TEST_H_ + +void test_thread_pool(tester_t *tester); + +test_t thread_pool_test = {test_thread_pool,"Thread Pool"}; + +#endif /*THREAD_POOL_TEST_H_*/ |