2 * @file event_queue_test.h
4 * @brief Tests for the event_queue_t class.
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 "event_queue_test.h"
28 #include <queues/event_queue.h>
29 #include <queues/jobs/initiate_ike_sa_job.h>
32 * Number of different times to insert per thread
34 #define EVENT_QUEUE_TIMES 5
36 * Number of entries per time per thread
38 #define EVENT_QUEUE_ENTRY_PER_TIME 20
41 * Number of test-thread
43 #define EVENT_QUEUE_INSERT_THREADS 1
46 * @brief Informations for the involved test-thread used in this test
49 typedef struct event_queue_test_s event_queue_test_t
;
51 struct event_queue_test_s
{
52 protected_tester_t
*tester
;
53 event_queue_t
*event_queue
;
56 * number of different event times to be inserted in the event-queue by each thread
58 int insert_times_count
;
61 * number of event to insert at one time
67 static void event_queue_insert_thread(event_queue_test_t
* testinfos
)
69 timeval_t current_time
;
73 connection_t
*connection
;
75 gettimeofday(¤t_time
,NULL
);
76 for (i
= 0; i
< testinfos
->insert_times_count
;i
++)
79 for (j
= 0; j
< testinfos
->entries_per_time
;j
++)
81 job
= (job_t
*) initiate_ike_sa_job_create(connection
);
83 time
.tv_sec
= current_time
.tv_sec
+ i
;
85 testinfos
->event_queue
->add_absolute(testinfos
->event_queue
,job
,time
);
91 void test_event_queue(protected_tester_t
*tester
)
93 event_queue_t
* event_queue
= event_queue_create();
94 event_queue_test_t testinfos
;
95 pthread_t threads
[EVENT_QUEUE_INSERT_THREADS
];
96 int i
,j
, number_of_total_events
;
97 timeval_t current_time
, start_time
;
99 testinfos
.tester
= tester
;
100 testinfos
.event_queue
= event_queue
;
101 testinfos
.insert_times_count
= EVENT_QUEUE_TIMES
;
102 testinfos
.entries_per_time
= EVENT_QUEUE_ENTRY_PER_TIME
;
104 number_of_total_events
= EVENT_QUEUE_ENTRY_PER_TIME
* EVENT_QUEUE_TIMES
* EVENT_QUEUE_INSERT_THREADS
;
106 gettimeofday(&start_time
,NULL
);
108 for (i
= 0; i
< EVENT_QUEUE_INSERT_THREADS
; i
++)
111 retval
= pthread_create( &(threads
[i
]), NULL
,(void*(*)(void*)) &event_queue_insert_thread
, (void*) &testinfos
);
112 tester
->assert_true(tester
,(retval
== 0), "thread creation call check");
116 /* wait for all threads */
117 for (i
= 0; i
< EVENT_QUEUE_INSERT_THREADS
; i
++)
120 retval
= pthread_join(threads
[i
], NULL
);
121 tester
->assert_true(tester
,(retval
== 0), "thread creation call check");
125 tester
->assert_true(tester
,(event_queue
->get_count(event_queue
) == number_of_total_events
), "event count check");
127 for (i
= 0; i
< EVENT_QUEUE_TIMES
;i
++)
129 for (j
= 0; j
< (EVENT_QUEUE_ENTRY_PER_TIME
* EVENT_QUEUE_INSERT_THREADS
);j
++)
133 job
= event_queue
->get(event_queue
);
134 gettimeofday(¤t_time
,NULL
);
135 tester
->assert_true(tester
,((current_time
.tv_sec
- start_time
.tv_sec
) == i
), "value of entry check");
141 event_queue
->destroy(event_queue
);