src/server/test/event.c

Sat, 22 Nov 2025 14:27:01 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 22 Nov 2025 14:27:01 +0100
changeset 633
392ec9026b07
parent 552
4ed0e46aa9dc
permissions
-rw-r--r--

port old ucx2 tests to ucx3

551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2024 Olaf Wintermann. All rights reserved.
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "event.h"
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 #include "../daemon/event.h"
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 typedef struct EVTest {
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 EventHandler *h;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 pthread_mutex_t mutex;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 pthread_cond_t cond;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 void *data1;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 void *data2;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 int i1;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 int i2;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 } EVTest;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
43 CX_TEST(test_evhandler_create) {
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 EventHandlerConfig cfg1 = { .nthreads = 1};
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 EventHandlerConfig cfg4 = { .nthreads = 4};
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
48 CX_TEST_DO {
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
49 EVHandler *ev1 = evhandler_create(&cfg1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
50 CX_TEST_ASSERT(ev1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
51 CX_TEST_ASSERT(ev1->numins == 1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
52
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
53 EVHandler *ev2 = evhandler_create(&cfg4);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
54 CX_TEST_ASSERT(ev2);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
55 CX_TEST_ASSERT(ev2->numins == 4);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
56
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
57
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
58 evhandler_shutdown(ev1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
59 evhandler_shutdown(ev2);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
60
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
61 evhandler_wait_and_destroy(ev1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
62 evhandler_wait_and_destroy(ev2);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
63 }
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 }
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 static int test_event_send_fn(EventHandler *h, Event *event) {
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 EVTest *test = event->cookie;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 test->i1 = 1;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 test->i2 = h == test->h;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 pthread_mutex_lock(&test->mutex);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 pthread_cond_signal(&test->cond);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73 pthread_mutex_unlock(&test->mutex);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 return 0;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 }
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
78 static void testdata_wait_for_completion(EVTest *testdata) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
79 time_t tstart = time(NULL);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
80 while(!testdata->i1) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
81 time_t t = time(NULL);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
82 if(t - tstart > 10) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
83 break;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
84 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
85
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
86 pthread_mutex_lock(&testdata->mutex);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
87 pthread_cond_wait(&testdata->cond, &testdata->mutex);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
88 pthread_mutex_unlock(&testdata->mutex);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
89 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
90 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
91
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
92 CX_TEST(test_event_send) {
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 EventHandlerConfig cfg = { .nthreads = 1};
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 EVHandler *ev = evhandler_create(&cfg);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 EventHandler *h = ev_instance(ev);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 EVTest testdata;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 ZERO(&testdata, sizeof(EVTest));
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 testdata.h = h;
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 pthread_mutex_init(&testdata.mutex, NULL);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 pthread_cond_init(&testdata.cond, NULL);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
104 CX_TEST_DO {
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
106 // test sending a single event
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
107 // the event signals completion in the testdata object
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
108 // wait up to 10 seconds for completion (it should be instantly)
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
109
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
110 Event evt;
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
111 ZERO(&evt, sizeof(Event));
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
112 evt.fn = test_event_send_fn;
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
113 evt.cookie = &testdata;
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
114
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
115 int ret = event_send(h, &evt);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
116
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
117 // wait for event finish
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
118 testdata_wait_for_completion(&testdata);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
119
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
120 CX_TEST_ASSERT(!ret);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
121 CX_TEST_ASSERT(testdata.i1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
122 CX_TEST_ASSERT(testdata.i2);
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
124 }
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 pthread_mutex_destroy(&testdata.mutex);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 pthread_cond_destroy(&testdata.cond);
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
129 evhandler_shutdown(ev);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
130 evhandler_wait_and_destroy(ev);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
131 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
132
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
133 #define EV_TEST_NUM_EVENTS 2000
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
134
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
135 static int test_event_send_multi_fn_count(EventHandler *h, Event *event) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
136 EVTest *test = event->cookie;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
137
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
138 test->i2++;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
139
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
140 return 0;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
141 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
142
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
143 static int test_event_send_multi_fn_end(EventHandler *h, Event *event) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
144 EVTest *test = event->cookie;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
145 test->i1 = 1;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
146
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
147 pthread_mutex_lock(&test->mutex);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
148 pthread_cond_signal(&test->cond);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
149 pthread_mutex_unlock(&test->mutex);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
150
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
151 return 0;
551
97039494764b add first eventhandler tests
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 }
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
153
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
154 static int test_event_send_multi_fn1(EventHandler *h, Event *event) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
155 EVTest *test = event->cookie;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
156 test->i2 = 0;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
157
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
158 for(int i=0;i<EV_TEST_NUM_EVENTS;i++) {
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
159 Event *newevent = malloc(sizeof(Event));
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
160 ZERO(newevent, sizeof(Event));
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
161 newevent->fn = test_event_send_multi_fn_count;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
162 newevent->finish = ev_free_event;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
163 newevent->cookie = test;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
164 event_send(h, newevent);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
165 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
166
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
167 Event *finish_event = malloc(sizeof(Event));
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
168 ZERO(finish_event, sizeof(Event));
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
169 finish_event->fn = test_event_send_multi_fn_end;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
170 finish_event->finish = ev_free_event;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
171 finish_event->cookie = test;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
172 event_send(h, finish_event);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
173
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
174 return 0;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
175 }
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
176
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
177 CX_TEST(test_event_send_multi) {
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
178 EventHandlerConfig cfg = { .nthreads = 1};
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
179
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
180 EVHandler *ev = evhandler_create(&cfg);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
181 EventHandler *h = ev_instance(ev);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
182
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
183 EVTest testdata;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
184 ZERO(&testdata, sizeof(EVTest));
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
185 testdata.h = h;
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
186 pthread_mutex_init(&testdata.mutex, NULL);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
187 pthread_cond_init(&testdata.cond, NULL);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
188
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
189 CX_TEST_DO {
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
190
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
191 // test sending multiple events
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
192 // the first callback test_event_send_multi_fn1 adds additional
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
193 // EV_TEST_NUM_EVENTS events to the handler + an additional
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
194 // finishing event, that notifies completion
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
195
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
196 Event evt;
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
197 ZERO(&evt, sizeof(Event));
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
198 evt.fn = test_event_send_multi_fn1;
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
199 evt.cookie = &testdata;
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
200
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
201 int ret = event_send(h, &evt);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
202
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
203 // wait for event finish
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
204 testdata_wait_for_completion(&testdata);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
205
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
206 CX_TEST_ASSERT(!ret);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
207 CX_TEST_ASSERT(testdata.i1);
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
208 CX_TEST_ASSERT(testdata.i2 == EV_TEST_NUM_EVENTS);
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
209
633
392ec9026b07 port old ucx2 tests to ucx3
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 552
diff changeset
210 }
552
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
211
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
212 pthread_mutex_destroy(&testdata.mutex);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
213 pthread_cond_destroy(&testdata.cond);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
214
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
215 evhandler_shutdown(ev);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
216 evhandler_wait_and_destroy(ev);
4ed0e46aa9dc add test for sending multiple events to an eventhandler
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 551
diff changeset
217 }

mercurial