1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
/* Copyright (c) 2014, Linaro Limited
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <odp.h>
#include <odp_cunit_common.h>
#define MAX_BUFFER_QUEUE (8)
#define MSG_POOL_SIZE (4*1024*1024)
#define CONFIG_MAX_ITERATION (100)
static int queue_contest = 0xff;
static int init_queue_suite(void)
{
odp_buffer_pool_t pool;
odp_buffer_pool_param_t params;
params.buf_size = 0;
params.buf_align = ODP_CACHE_LINE_SIZE;
params.num_bufs = 1024 * 10;
params.buf_type = ODP_BUFFER_TYPE_RAW;
pool = odp_buffer_pool_create("msg_pool", ODP_SHM_NULL, ¶ms);
if (ODP_BUFFER_POOL_INVALID == pool) {
printf("Pool create failed.\n");
return -1;
}
return 0;
}
static void test_odp_queue_sunnyday(void)
{
odp_queue_t queue_creat_id, queue_id;
odp_buffer_t enbuf[MAX_BUFFER_QUEUE], debuf[MAX_BUFFER_QUEUE];
odp_buffer_t buf;
odp_buffer_pool_t msg_pool;
odp_queue_param_t param;
odp_buffer_t *pbuf_tmp;
int i, deq_ret;
int nr_deq_entries = 0;
int max_iteration = CONFIG_MAX_ITERATION;
void *prtn = NULL;
memset(¶m, 0, sizeof(param));
param.sched.sync = ODP_SCHED_SYNC_NONE;
queue_creat_id = odp_queue_create("test_queue",
ODP_QUEUE_TYPE_POLL, ¶m);
CU_ASSERT(ODP_QUEUE_INVALID != queue_creat_id);
CU_ASSERT_EQUAL(ODP_QUEUE_TYPE_POLL,
odp_queue_type(queue_creat_id));
CU_ASSERT_EQUAL(ODP_SCHED_SYNC_NONE,
odp_queue_sched_type(queue_creat_id));
queue_id = odp_queue_lookup("test_queue");
CU_ASSERT_EQUAL(queue_creat_id, queue_id);
CU_ASSERT(0 == odp_queue_set_context(queue_id, &queue_contest));
prtn = odp_queue_get_context(queue_id);
CU_ASSERT(&queue_contest == (int *)prtn);
msg_pool = odp_buffer_pool_lookup("msg_pool");
buf = odp_buffer_alloc(msg_pool);
odp_queue_enq(queue_id, buf);
CU_ASSERT_EQUAL(buf, odp_queue_deq(queue_id));
odp_buffer_free(buf);
for (i = 0; i < MAX_BUFFER_QUEUE; i++)
enbuf[i] = odp_buffer_alloc(msg_pool);
/*
* odp_queue_enq_multi may return 0..n buffers due to the resource
* constraints in the implementation at that given point of time.
*/
odp_queue_enq_multi(queue_id, enbuf, MAX_BUFFER_QUEUE);
pbuf_tmp = debuf;
do {
deq_ret = odp_queue_deq_multi(queue_id, pbuf_tmp,
MAX_BUFFER_QUEUE);
nr_deq_entries += deq_ret;
max_iteration--;
pbuf_tmp += deq_ret;
CU_ASSERT(max_iteration >= 0);
} while (nr_deq_entries < MAX_BUFFER_QUEUE);
for (i = 0; i < MAX_BUFFER_QUEUE; i++) {
CU_ASSERT_EQUAL(enbuf[i], debuf[i]);
odp_buffer_free(enbuf[i]);
}
return;
}
CU_TestInfo test_odp_queue[] = {
{"queue sunnyday", test_odp_queue_sunnyday},
CU_TEST_INFO_NULL,
};
CU_SuiteInfo odp_testsuites[] = {
{"Queue", init_queue_suite, NULL, NULL, NULL, test_odp_queue},
CU_SUITE_INFO_NULL,
};
|