56 #include "unity_fixture.h"
58 #include "Mock_rkhassert.h"
59 #include "Mock_rkhfwk_evtpool.h"
60 #include "Mock_rkhtrc_record.h"
61 #include "Mock_rkhtrc_filter.h"
62 #include "Mock_rkhport.h"
71 static rui8_t *storage;
76 MockAssertCallback(
const char*
const file,
int line,
int cmock_num_calls)
85 Mock_rkhassert_Init();
86 Mock_rkhfwk_evtpool_Init();
87 rkh_trc_isoff__IgnoreAndReturn(
RKH_FALSE);
91 TEST_TEAR_DOWN(dynevt)
93 Mock_rkhassert_Verify();
94 Mock_rkhfwk_evtpool_Verify();
95 Mock_rkhassert_Destroy();
96 Mock_rkhfwk_evtpool_Destroy();
105 TEST(dynevt, RegisterOneEventPool)
107 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), 4,
112 TEST(dynevt, RegisterMultipleEventPool)
118 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), 4,
124 TEST(dynevt, Fails_ExceedsNumberOfAllowedEventPools)
128 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
129 rkh_assert_IgnoreArg_line();
130 rkh_assert_StubWithCallback(MockAssertCallback);
134 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), 4,
137 for (i = 0; i < (RKH_CFG_FWK_MAX_EVT_POOL + 1); ++i)
143 TEST(dynevt, Fails_UnavailablePool)
145 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
146 rkh_assert_IgnoreArg_line();
147 rkh_assert_StubWithCallback(MockAssertCallback);
149 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), 4,
154 TEST(dynevt, Fails_TriesAllocateOneEvtWithoutAssignedPool)
158 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
159 rkh_assert_IgnoreArg_line();
160 rkh_assert_StubWithCallback(MockAssertCallback);
163 TEST_ASSERT_NULL(evt);
166 TEST(dynevt, AllocateOneEvt)
182 for (i = 0, epAddress = 0xdead0000, blockSize = 4;
184 ++i, (blockSize *= 2), ++epAddress)
186 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), blockSize,
187 (RKHEvtPool *)epAddress);
190 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0000, 4);
191 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0001, 8);
192 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0002, 16);
193 rkh_evtPool_get_ExpectAndReturn((RKHEvtPool *)0xdead0002, expectedEvt);
195 pEvt =
rkh_fwk_ae(9, sig, (
const void *)0xbeaf);
197 TEST_ASSERT_EQUAL_PTR(expectedEvt, pEvt);
198 TEST_ASSERT_EQUAL(sig, pEvt->
e);
199 TEST_ASSERT_EQUAL(pool, pEvt->
pool);
200 TEST_ASSERT_EQUAL(nRef, pEvt->
nref);
203 TEST(dynevt, Fails_ExceededBlockSize)
209 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
210 rkh_assert_IgnoreArg_line();
211 rkh_assert_StubWithCallback(MockAssertCallback);
213 for (i = 0, epAddress = 0xdead0000, blockSize = 4;
215 ++i, (blockSize *= 2), ++epAddress)
217 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), blockSize,
218 (RKHEvtPool *)epAddress);
221 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0000, 4);
222 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0001, 8);
223 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0002, 16);
224 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0003, 32);
226 evt =
rkh_fwk_ae(33, 1, (
const void *)0xbeaf);
228 TEST_ASSERT_NULL(evt);
231 TEST(dynevt, Fails_UnavailableBlockFromPool)
237 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
238 rkh_assert_IgnoreArg_line();
239 rkh_assert_StubWithCallback(MockAssertCallback);
241 for (i = 0, epAddress = 0xdead0000, blockSize = 4;
243 ++i, (blockSize *= 2), ++epAddress)
245 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), blockSize,
246 (RKHEvtPool *)epAddress);
249 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0000, 4);
250 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0001, 8);
251 rkh_evtPool_getBlockSize_ExpectAndReturn((RKHEvtPool *)0xdead0002, 16);
252 rkh_evtPool_get_ExpectAndReturn((RKHEvtPool *)0xdead0002, 0);
256 TEST_ASSERT_NULL(evt);
259 TEST(dynevt, ReservesOneEvt)
266 rkh_enter_critical_Expect();
267 rkh_exit_critical_Expect();
271 TEST_ASSERT_EQUAL(8, evt.
e);
272 TEST_ASSERT_EQUAL(16 + 1, evt.
nref);
273 TEST_ASSERT_EQUAL(32, evt.
pool);
276 TEST(dynevt, TriesRecycleNotReferencedEvt)
284 TEST(dynevt, TriesRecycleMultipleReferencedEvt)
289 rkh_enter_critical_Expect();
290 rkh_exit_critical_Expect();
294 TEST_ASSERT_EQUAL(3, evt.
nref);
297 TEST(dynevt, RecycleEvt)
303 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), 4,
305 rkh_evtPool_put_Expect((RKHEvtPool *)1, &evt);
306 rkh_enter_critical_Expect();
307 rkh_exit_critical_Expect();
313 TEST(dynevt, Fails_OnRecycleEvtNullPool)
319 rkh_enter_critical_Expect();
320 rkh_exit_critical_Expect();
321 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
322 rkh_assert_IgnoreArg_line();
323 rkh_assert_StubWithCallback(MockAssertCallback);
328 TEST(dynevt, Fails_OnRecycleEvtWrongPool)
334 rkh_evtPool_getPool_ExpectAndReturn(storage,
sizeof(storage), 4,
336 rkh_enter_critical_Expect();
337 rkh_exit_critical_Expect();
338 rkh_assert_Expect(
"rkhfwk_dynevt", 0);
339 rkh_assert_IgnoreArg_line();
340 rkh_assert_StubWithCallback(MockAssertCallback);
RKH_SIG_T e
Signal of the event instance.
rui8_t pool
Attribute of dynamic events (0 for static event).
Represents events without parameters.
#define RKH_FALSE
Standard define.
void rkh_dynEvt_init(void)
Initializes the dynamic event manager.
RKH_EVT_T * rkh_fwk_ae(RKH_ES_T esize, RKH_SIG_T e, const void *const sender)
Allocates an event from the previously created event pool.
void rkh_fwk_registerEvtPool(void *sstart, rui32_t ssize, RKH_ES_T esize)
Registers a new event pool into the event pool list.
rui8_t nref
Attribute of dynamic events.
void rkh_fwk_reserve(RKH_EVT_T *e)
Reserve the dynamic event to be recycled.
void rkh_fwk_gc(RKH_EVT_T *e, const void *const sender)
Recycle a dynamic event.
#define RKH_CFG_FWK_MAX_EVT_POOL
If the dynamic event support is enabled (see RKH_CFG_FWK_DYN_EVT_EN) then the RKH_CFG_FWK_MAX_EVT_POO...
Specifies the interface of dynamic event support.