2 * @file job_queue_test.c
4 * @brief Tests to test the Job-Queue type job_queue_t
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
26 #include <pluto/constants.h>
27 #include <pluto/defs.h>
31 #include "../tester.h"
32 #include "../job_queue.h"
35 typedef struct job_queue_test_s job_queue_test_t
;
38 * @brief Informations for the involved test-thread used in this test
41 struct job_queue_test_s
{
43 job_queue_t
*job_queue
;
45 * number of items to be inserted in the job-queue
47 int insert_item_count
;
49 * number of items to be removed by each
50 * receiver thread from the job-queue
52 int remove_item_count
;
56 * @brief sender thread used in the the job_queue test function
58 * @param testinfo informations for the specific thread.
60 static void test_job_queue_sender(job_queue_test_t
* testinfo
)
63 for (i
= 0; i
< testinfo
->insert_item_count
; i
++)
65 int *value
= alloc_thing(int,"int in test_job_queue_sender");
67 job_t
*job
= job_create(INCOMING_PACKET
,value
);
68 testinfo
->job_queue
->add(testinfo
->job_queue
,job
);
73 * @brief receiver thread used in the the job_queue test function
75 * @param testinfo informations for the specific thread.
77 static void test_job_queue_receiver(job_queue_test_t
* testinfo
)
80 for (i
= 0; i
< testinfo
->remove_item_count
; i
++)
83 testinfo
->tester
->assert_true(testinfo
->tester
,(testinfo
->job_queue
->get(testinfo
->job_queue
,&job
) == SUCCESS
), "get job call check");
84 testinfo
->tester
->assert_true(testinfo
->tester
,(job
->type
== INCOMING_PACKET
), "job type check");
85 pfree(job
->assigned_data
);
86 testinfo
->tester
->assert_true(testinfo
->tester
,(job
->destroy(job
) == SUCCESS
), "job destroy call check");
91 * description is in header file
93 void test_job_queue(tester_t
*tester
)
95 int value
, desired_value
, i
;
96 int sender_count
= 10;
97 int receiver_count
= 2;
98 pthread_t sender_threads
[sender_count
];
99 pthread_t receiver_threads
[receiver_count
];
100 job_queue_t
*job_queue
= job_queue_create();
101 job_queue_test_t test_infos
;
103 test_infos
.tester
= tester
;
104 test_infos
.job_queue
= job_queue
;
105 test_infos
.insert_item_count
= 10000;
106 test_infos
.remove_item_count
= 10000;
109 desired_value
= test_infos
.insert_item_count
* sender_count
-
110 test_infos
.remove_item_count
* receiver_count
;
112 for (i
= 0; i
< receiver_count
;i
++)
114 pthread_create( &receiver_threads
[i
], NULL
,(void*(*)(void*)) &test_job_queue_receiver
, (void*) &test_infos
);
116 for (i
= 0; i
< sender_count
;i
++)
118 pthread_create( &sender_threads
[i
], NULL
,(void*(*)(void*)) &test_job_queue_sender
, (void*) &test_infos
);
122 /* Wait for all threads */
123 for (i
= 0; i
< sender_count
;i
++)
125 pthread_join(sender_threads
[i
], NULL
);
127 for (i
= 0; i
< receiver_count
;i
++)
129 pthread_join(receiver_threads
[i
], NULL
);
133 /* the job-queue has to be empty now! */
134 tester
->assert_true(tester
,(job_queue
->get_count(job_queue
,&value
) == SUCCESS
), "get count call check");
135 tester
->assert_true(tester
,(value
== desired_value
), "get count value check");
136 tester
->assert_true(tester
,(job_queue
->destroy(job_queue
) == SUCCESS
), "destroy call check");