diff options
Diffstat (limited to 'test/test')
-rw-r--r-- | test/test/test.c | 14 | ||||
-rw-r--r-- | test/test/test_bitmap.c | 3 | ||||
-rw-r--r-- | test/test/test_cryptodev.c | 2 | ||||
-rw-r--r-- | test/test/test_eventdev.c | 7 | ||||
-rw-r--r-- | test/test/test_eventdev_octeontx.c | 6 | ||||
-rw-r--r-- | test/test/test_memzone.c | 28 | ||||
-rw-r--r-- | test/test/test_reorder.c | 11 | ||||
-rw-r--r-- | test/test/test_ring.c | 63 | ||||
-rw-r--r-- | test/test/test_ring_perf.c | 36 | ||||
-rw-r--r-- | test/test/test_service_cores.c | 10 | ||||
-rw-r--r-- | test/test/test_table.c | 44 | ||||
-rw-r--r-- | test/test/test_table_acl.c | 2 | ||||
-rw-r--r-- | test/test/test_timer_perf.c | 1 |
13 files changed, 152 insertions, 75 deletions
diff --git a/test/test/test.c b/test/test/test.c index 0e6ff7ce..fe41d404 100644 --- a/test/test/test.c +++ b/test/test/test.c @@ -162,8 +162,20 @@ unit_test_suite_runner(struct unit_test_suite *suite) } if (suite->setup) - if (suite->setup() != 0) + if (suite->setup() != 0) { + /* + * setup failed, so count all enabled tests and mark + * them as failed + */ + while (suite->unit_test_cases[total].testcase) { + if (!suite->unit_test_cases[total].enabled) + skipped++; + else + failed++; + total++; + } goto suite_summary; + } printf(" + ------------------------------------------------------- +\n"); diff --git a/test/test/test_bitmap.c b/test/test/test_bitmap.c index 5c9eee96..7045d332 100644 --- a/test/test/test_bitmap.c +++ b/test/test/test_bitmap.c @@ -186,6 +186,9 @@ test_bitmap(void) if (test_bitmap_scan_operations(bmp) < 0) return TEST_FAILED; + rte_bitmap_free(bmp); + rte_free(mem); + return TEST_SUCCESS; } diff --git a/test/test/test_cryptodev.c b/test/test/test_cryptodev.c index 1bed65da..7997b488 100644 --- a/test/test/test_cryptodev.c +++ b/test/test/test_cryptodev.c @@ -30,6 +30,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include <time.h> + #include <rte_common.h> #include <rte_hexdump.h> #include <rte_mbuf.h> diff --git a/test/test/test_eventdev.c b/test/test/test_eventdev.c index ba39cbac..1ed2a1dd 100644 --- a/test/test/test_eventdev.c +++ b/test/test/test_eventdev.c @@ -839,6 +839,9 @@ test_eventdev_unlink(void) for (i = 0; i < nb_queues; i++) queues[i] = i; + ret = rte_event_port_link(TEST_DEV_ID, 0, NULL, NULL, 0); + TEST_ASSERT(ret >= 0, "Failed to link with NULL device%d", + TEST_DEV_ID); ret = rte_event_port_unlink(TEST_DEV_ID, 0, queues, nb_queues); TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d", @@ -899,9 +902,9 @@ test_eventdev_link_get(void) ret = rte_event_port_links_get(TEST_DEV_ID, 0, queues, priorities); TEST_ASSERT(ret == 1, "(%d)Wrong link get ret=%d expected=%d", TEST_DEV_ID, ret, 1); - /* unlink all*/ + /* unlink the queue */ ret = rte_event_port_unlink(TEST_DEV_ID, 0, NULL, 0); - TEST_ASSERT(ret == nb_queues, "Failed to unlink(device%d) ret=%d", + TEST_ASSERT(ret == 1, "Failed to unlink(device%d) ret=%d", TEST_DEV_ID, ret); /* 4links and 2 unlinks */ diff --git a/test/test/test_eventdev_octeontx.c b/test/test/test_eventdev_octeontx.c index dbc36d94..8fddb4fd 100644 --- a/test/test/test_eventdev_octeontx.c +++ b/test/test/test_eventdev_octeontx.c @@ -355,7 +355,7 @@ generate_random_events(const unsigned int total_events) for (i = 0; i < total_events; i++) { ret = inject_events( rte_rand() % info.max_event_queue_flows /*flow_id */, - rte_rand() % (RTE_EVENT_TYPE_CPU + 1) /* event_type */, + RTE_EVENT_TYPE_CPU /* event_type */, rte_rand() % 256 /* sub_event_type */, rte_rand() % (RTE_SCHED_TYPE_PARALLEL + 1), rte_rand() % queue_count /* queue */, @@ -745,7 +745,7 @@ test_queue_to_port_single_link(void) ret = inject_events( 0x100 /*flow_id */, - rte_rand() % (RTE_EVENT_TYPE_CPU + 1) /* event_type */, + RTE_EVENT_TYPE_CPU /* event_type */, rte_rand() % 256 /* sub_event_type */, rte_rand() % (RTE_SCHED_TYPE_PARALLEL + 1), queue /* queue */, @@ -824,7 +824,7 @@ test_queue_to_port_multi_link(void) ret = inject_events( 0x100 /*flow_id */, - rte_rand() % (RTE_EVENT_TYPE_CPU + 1) /* event_type */, + RTE_EVENT_TYPE_CPU /* event_type */, rte_rand() % 256 /* sub_event_type */, rte_rand() % (RTE_SCHED_TYPE_PARALLEL + 1), queue /* queue */, diff --git a/test/test/test_memzone.c b/test/test/test_memzone.c index 1cf235a9..1115ee0f 100644 --- a/test/test/test_memzone.c +++ b/test/test/test_memzone.c @@ -280,19 +280,24 @@ test_memzone_reserve_flags(void) printf("MEMZONE FLAG 2MB\n"); return -1; } - if (rte_memzone_free(mz)) { - printf("Fail memzone free\n"); - return -1; - } } if (hugepage_2MB_avail && hugepage_1GB_avail) { mz = rte_memzone_reserve("flag_zone_2M_HINT", size, SOCKET_ID_ANY, RTE_MEMZONE_2MB|RTE_MEMZONE_1GB); - if (mz != NULL) { + if (mz == NULL) { printf("BOTH SIZES SET\n"); return -1; } + if (mz->hugepage_sz != RTE_PGSIZE_1G && + mz->hugepage_sz != RTE_PGSIZE_2M) { + printf("Wrong size when both sizes set\n"); + return -1; + } + if (rte_memzone_free(mz)) { + printf("Fail memzone free\n"); + return -1; + } } } /* @@ -424,10 +429,19 @@ test_memzone_reserve_flags(void) mz = rte_memzone_reserve("flag_zone_16M_HINT", size, SOCKET_ID_ANY, RTE_MEMZONE_16MB|RTE_MEMZONE_16GB); - if (mz != NULL) { + if (mz == NULL) { printf("BOTH SIZES SET\n"); return -1; } + if (mz->hugepage_sz != RTE_PGSIZE_16G && + mz->hugepage_sz != RTE_PGSIZE_16M) { + printf("Wrong size when both sizes set\n"); + return -1; + } + if (rte_memzone_free(mz)) { + printf("Fail memzone free\n"); + return -1; + } } } return 0; @@ -775,7 +789,7 @@ test_memzone_bounded(void) static int test_memzone_free(void) { - const struct rte_memzone *mz[RTE_MAX_MEMZONE]; + const struct rte_memzone *mz[RTE_MAX_MEMZONE + 1]; int i; char name[20]; diff --git a/test/test/test_reorder.c b/test/test/test_reorder.c index 4ec22aca..429f6eb4 100644 --- a/test/test/test_reorder.c +++ b/test/test/test_reorder.c @@ -360,9 +360,20 @@ test_setup(void) return 0; } +static void +test_teardown(void) +{ + rte_reorder_free(test_params->b); + test_params->b = NULL; + rte_mempool_free(test_params->p); + test_params->p = NULL; +} + + static struct unit_test_suite reorder_test_suite = { .setup = test_setup, + .teardown = test_teardown, .suite_name = "Reorder Unit Test Suite", .unit_test_cases = { TEST_CASE(test_reorder_create), diff --git a/test/test/test_ring.c b/test/test/test_ring.c index 5eb40a0f..d225e829 100644 --- a/test/test/test_ring.c +++ b/test/test/test_ring.c @@ -86,8 +86,6 @@ static rte_atomic32_t synchro; -static struct rte_ring *r; - #define TEST_RING_VERIFY(exp) \ if (!(exp)) { \ printf("error at %s:%d\tcondition " #exp " failed\n", \ @@ -102,7 +100,7 @@ static struct rte_ring *r; * helper routine for test_ring_basic */ static int -test_ring_basic_full_empty(void * const src[], void *dst[]) +test_ring_basic_full_empty(struct rte_ring *r, void * const src[], void *dst[]) { unsigned i, rand; const unsigned rsz = RING_SIZE - 1; @@ -143,7 +141,7 @@ test_ring_basic_full_empty(void * const src[], void *dst[]) } static int -test_ring_basic(void) +test_ring_basic(struct rte_ring *r) { void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL; int ret; @@ -279,7 +277,7 @@ test_ring_basic(void) goto fail; } - if (test_ring_basic_full_empty(src, dst) != 0) + if (test_ring_basic_full_empty(r, src, dst) != 0) goto fail; cur_src = src; @@ -346,7 +344,7 @@ test_ring_basic(void) } static int -test_ring_burst_basic(void) +test_ring_burst_basic(struct rte_ring *r) { void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL; int ret; @@ -700,7 +698,7 @@ test_ring_basic_ex(void) { int ret = -1; unsigned i; - struct rte_ring * rp; + struct rte_ring *rp = NULL; void **obj = NULL; obj = rte_calloc("test_ring_basic_ex_malloc", RING_SIZE, sizeof(void *), 0); @@ -760,6 +758,7 @@ test_ring_basic_ex(void) ret = 0; fail_test: + rte_ring_free(rp); if (obj != NULL) rte_free(obj); @@ -840,61 +839,67 @@ end: static int test_ring(void) { + struct rte_ring *r = NULL; + /* some more basic operations */ if (test_ring_basic_ex() < 0) - return -1; + goto test_fail; rte_atomic32_init(&synchro); + r = rte_ring_create("test", RING_SIZE, SOCKET_ID_ANY, 0); if (r == NULL) - r = rte_ring_create("test", RING_SIZE, SOCKET_ID_ANY, 0); - if (r == NULL) - return -1; + goto test_fail; /* retrieve the ring from its name */ if (rte_ring_lookup("test") != r) { printf("Cannot lookup ring from its name\n"); - return -1; + goto test_fail; } /* burst operations */ - if (test_ring_burst_basic() < 0) - return -1; + if (test_ring_burst_basic(r) < 0) + goto test_fail; /* basic operations */ - if (test_ring_basic() < 0) - return -1; + if (test_ring_basic(r) < 0) + goto test_fail; /* basic operations */ if ( test_create_count_odd() < 0){ - printf ("Test failed to detect odd count\n"); - return -1; - } - else - printf ( "Test detected odd count\n"); + printf("Test failed to detect odd count\n"); + goto test_fail; + } else + printf("Test detected odd count\n"); if ( test_lookup_null() < 0){ - printf ("Test failed to detect NULL ring lookup\n"); - return -1; - } - else - printf ( "Test detected NULL ring lookup \n"); + printf("Test failed to detect NULL ring lookup\n"); + goto test_fail; + } else + printf("Test detected NULL ring lookup\n"); /* test of creating ring with wrong size */ if (test_ring_creation_with_wrong_size() < 0) - return -1; + goto test_fail; /* test of creation ring with an used name */ if (test_ring_creation_with_an_used_name() < 0) - return -1; + goto test_fail; if (test_ring_with_exact_size() < 0) - return -1; + goto test_fail; /* dump the ring status */ rte_ring_list_dump(stdout); + rte_ring_free(r); + return 0; + +test_fail: + rte_ring_free(r); + + return -1; } REGISTER_TEST_COMMAND(ring_autotest, test_ring); diff --git a/test/test/test_ring_perf.c b/test/test/test_ring_perf.c index 84d20033..66aa51ad 100644 --- a/test/test/test_ring_perf.c +++ b/test/test/test_ring_perf.c @@ -61,9 +61,6 @@ */ static const volatile unsigned bulk_sizes[] = { 8, 32 }; -/* The ring structure used for tests */ -static struct rte_ring *r; - struct lcore_pair { unsigned c1, c2; }; @@ -144,7 +141,7 @@ get_two_sockets(struct lcore_pair *lcp) /* Get cycle counts for dequeuing from an empty ring. Should be 2 or 3 cycles */ static void -test_empty_dequeue(void) +test_empty_dequeue(struct rte_ring *r) { const unsigned iter_shift = 26; const unsigned iterations = 1<<iter_shift; @@ -172,6 +169,7 @@ test_empty_dequeue(void) * and return two. Input = burst size, output = cycle average for sp/sc & mp/mc */ struct thread_params { + struct rte_ring *r; unsigned size; /* input value, the burst size */ double spsc, mpmc; /* output value, the single or multi timings */ }; @@ -186,6 +184,7 @@ enqueue_bulk(void *p) const unsigned iter_shift = 23; const unsigned iterations = 1<<iter_shift; struct thread_params *params = p; + struct rte_ring *r = params->r; const unsigned size = params->size; unsigned i; void *burst[MAX_BURST] = {0}; @@ -221,6 +220,7 @@ dequeue_bulk(void *p) const unsigned iter_shift = 23; const unsigned iterations = 1<<iter_shift; struct thread_params *params = p; + struct rte_ring *r = params->r; const unsigned size = params->size; unsigned i; void *burst[MAX_BURST] = {0}; @@ -251,7 +251,7 @@ dequeue_bulk(void *p) * used to measure ring perf between hyperthreads, cores and sockets. */ static void -run_on_core_pair(struct lcore_pair *cores, +run_on_core_pair(struct lcore_pair *cores, struct rte_ring *r, lcore_function_t f1, lcore_function_t f2) { struct thread_params param1 = {0}, param2 = {0}; @@ -259,6 +259,7 @@ run_on_core_pair(struct lcore_pair *cores, for (i = 0; i < sizeof(bulk_sizes)/sizeof(bulk_sizes[0]); i++) { lcore_count = 0; param1.size = param2.size = bulk_sizes[i]; + param1.r = param2.r = r; if (cores->c1 == rte_get_master_lcore()) { rte_eal_remote_launch(f2, ¶m2, cores->c2); f1(¶m1); @@ -281,7 +282,7 @@ run_on_core_pair(struct lcore_pair *cores, * takes on a single lcore. Result is for comparison with the bulk enq+deq. */ static void -test_single_enqueue_dequeue(void) +test_single_enqueue_dequeue(struct rte_ring *r) { const unsigned iter_shift = 24; const unsigned iterations = 1<<iter_shift; @@ -314,7 +315,7 @@ test_single_enqueue_dequeue(void) * as for the bulk function called on a single lcore. */ static void -test_burst_enqueue_dequeue(void) +test_burst_enqueue_dequeue(struct rte_ring *r) { const unsigned iter_shift = 23; const unsigned iterations = 1<<iter_shift; @@ -352,7 +353,7 @@ test_burst_enqueue_dequeue(void) /* Times enqueue and dequeue on a single lcore */ static void -test_bulk_enqueue_dequeue(void) +test_bulk_enqueue_dequeue(struct rte_ring *r) { const unsigned iter_shift = 23; const unsigned iterations = 1<<iter_shift; @@ -394,32 +395,35 @@ static int test_ring_perf(void) { struct lcore_pair cores; + struct rte_ring *r = NULL; + r = rte_ring_create(RING_NAME, RING_SIZE, rte_socket_id(), 0); - if (r == NULL && (r = rte_ring_lookup(RING_NAME)) == NULL) + if (r == NULL) return -1; printf("### Testing single element and burst enq/deq ###\n"); - test_single_enqueue_dequeue(); - test_burst_enqueue_dequeue(); + test_single_enqueue_dequeue(r); + test_burst_enqueue_dequeue(r); printf("\n### Testing empty dequeue ###\n"); - test_empty_dequeue(); + test_empty_dequeue(r); printf("\n### Testing using a single lcore ###\n"); - test_bulk_enqueue_dequeue(); + test_bulk_enqueue_dequeue(r); if (get_two_hyperthreads(&cores) == 0) { printf("\n### Testing using two hyperthreads ###\n"); - run_on_core_pair(&cores, enqueue_bulk, dequeue_bulk); + run_on_core_pair(&cores, r, enqueue_bulk, dequeue_bulk); } if (get_two_cores(&cores) == 0) { printf("\n### Testing using two physical cores ###\n"); - run_on_core_pair(&cores, enqueue_bulk, dequeue_bulk); + run_on_core_pair(&cores, r, enqueue_bulk, dequeue_bulk); } if (get_two_sockets(&cores) == 0) { printf("\n### Testing using two NUMA nodes ###\n"); - run_on_core_pair(&cores, enqueue_bulk, dequeue_bulk); + run_on_core_pair(&cores, r, enqueue_bulk, dequeue_bulk); } + rte_ring_free(r); return 0; } diff --git a/test/test/test_service_cores.c b/test/test/test_service_cores.c index 311c704e..ebff8b0a 100644 --- a/test/test/test_service_cores.c +++ b/test/test/test_service_cores.c @@ -348,6 +348,7 @@ service_lcore_en_dis_able(void) /* call remote_launch to verify that app can launch ex-service lcore */ service_remote_launch_flag = 0; + rte_eal_wait_lcore(slcore_id); int ret = rte_eal_remote_launch(service_remote_launch_func, NULL, slcore_id); TEST_ASSERT_EQUAL(0, ret, "Ex-service core remote launch failed."); @@ -362,7 +363,7 @@ static int service_lcore_running_check(void) { uint64_t tick = service_tick; - rte_delay_ms(SERVICE_DELAY * 10); + rte_delay_ms(SERVICE_DELAY * 100); /* if (tick != service_tick) we know the lcore as polled the service */ return tick != service_tick; } @@ -505,6 +506,10 @@ service_threaded_test(int mt_safe) if (!mt_safe) test_params[1] = 1; + /* wait for lcores before start() */ + rte_eal_wait_lcore(slcore_1); + rte_eal_wait_lcore(slcore_2); + rte_service_lcore_start(slcore_1); rte_service_lcore_start(slcore_2); @@ -518,6 +523,8 @@ service_threaded_test(int mt_safe) TEST_ASSERT_EQUAL(0, rte_service_runstate_set(sid, 0), "Failed to stop MT Safe service"); + rte_eal_wait_lcore(slcore_1); + rte_eal_wait_lcore(slcore_2); unregister_all(); /* return the value of the callback pass_test variable to caller */ @@ -611,6 +618,7 @@ service_app_lcore_poll_impl(const int mt_safe) rte_service_runstate_set(id, 1); uint32_t app_core2 = rte_get_next_lcore(slcore_id, 1, 1); + rte_eal_wait_lcore(app_core2); int app_core2_ret = rte_eal_remote_launch(service_run_on_app_core_func, &id, app_core2); diff --git a/test/test/test_table.c b/test/test/test_table.c index db7d4e66..c5a6e00f 100644 --- a/test/test/test_table.c +++ b/test/test/test_table.c @@ -84,6 +84,14 @@ uint64_t pipeline_test_hash(void *key, } static void +app_free_resources(void) { + int i; + for (i = 0; i < N_PORTS; i++) + rte_ring_free(rings_rx[i]); + rte_mempool_free(pool); +} + +static void app_init_mbuf_pools(void) { /* Init the buffer pool */ @@ -142,18 +150,20 @@ app_init_rings(void) static int test_table(void) { - int status, failures; + int status, ret; unsigned i; - failures = 0; + ret = TEST_SUCCESS; app_init_rings(); app_init_mbuf_pools(); printf("\n\n\n\n************Pipeline tests************\n"); - if (test_table_pipeline() < 0) - return -1; + if (test_table_pipeline() < 0) { + ret = TEST_FAILED; + goto end; + } printf("\n\n\n\n************Port tests************\n"); for (i = 0; i < n_port_tests; i++) { @@ -161,8 +171,8 @@ test_table(void) if (status < 0) { printf("\nPort test number %d failed (%d).\n", i, status); - failures++; - return -1; + ret = TEST_FAILED; + goto end; } } @@ -172,8 +182,8 @@ test_table(void) if (status < 0) { printf("\nTable test number %d failed (%d).\n", i, status); - failures++; - return -1; + ret = TEST_FAILED; + goto end; } } @@ -183,21 +193,23 @@ test_table(void) if (status < 0) { printf("\nCombined table test number %d failed with " "reason number %d.\n", i, status); - failures++; - return -1; + ret = TEST_FAILED; + goto end; } } - if (failures) - return -1; - #ifdef RTE_LIBRTE_ACL printf("\n\n\n\n************ACL tests************\n"); - if (test_table_acl() < 0) - return -1; + if (test_table_acl() < 0) { + ret = TEST_FAILED; + goto end; + } #endif - return 0; +end: + app_free_resources(); + + return ret; } REGISTER_TEST_COMMAND(table_autotest, test_table); diff --git a/test/test/test_table_acl.c b/test/test/test_table_acl.c index 08c100ff..6fcf4cc3 100644 --- a/test/test/test_table_acl.c +++ b/test/test/test_table_acl.c @@ -532,6 +532,8 @@ setup_acl_pipeline(void) struct rte_pipeline_table_entry *table_entries[5]; int key_found[5]; + memset(table_entries, 0, sizeof(table_entries)); + for (n = 0; n < 5; n++) { memset(&keys[n], 0, sizeof(struct rte_table_acl_rule_delete_params)); key_array[n] = &keys[n]; diff --git a/test/test/test_timer_perf.c b/test/test/test_timer_perf.c index 467ae13d..9804133f 100644 --- a/test/test/test_timer_perf.c +++ b/test/test/test_timer_perf.c @@ -156,6 +156,7 @@ test_timer_perf(void) printf("Time per rte_timer_manage with zero callbacks: %"PRIu64" cycles\n", (end_tsc - start_tsc + iterations/2) / iterations); + rte_free(tms); return 0; } |