diff options
author | Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> | 2016-08-06 20:38:27 +0100 |
---|---|---|
committer | Mohammad Abdul Awal <mohammad.abdul.awal@intel.com> | 2016-10-07 08:49:12 +0100 |
commit | a152c68e17b6ad1ae48a126e0b80c05cb44188b8 (patch) | |
tree | 246a05f3fb83d471fcd7ae06def9d457e5f13ff7 /test/gtest/test_tle_udp_event.cpp | |
parent | 5d0ab6ce9c41573a2c7c401a0efa8ea764c9d55a (diff) |
tldk_test: Add TLDK unit tests
Unit tests for TLDK libtle_udp & libtle_dring libraries
Change-Id: I6818c72ca0260f1af784e758bfe21118c395afcf
Signed-off-by: Karol Latecki <karolx.latecki@intel.com>
Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Diffstat (limited to 'test/gtest/test_tle_udp_event.cpp')
-rw-r--r-- | test/gtest/test_tle_udp_event.cpp | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/test/gtest/test_tle_udp_event.cpp b/test/gtest/test_tle_udp_event.cpp new file mode 100644 index 0000000..6d5c548 --- /dev/null +++ b/test/gtest/test_tle_udp_event.cpp @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2016 Intel Corporation. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "test_tle_udp_event.h" + +TEST_F(udp_evq, udp_evq_create_null) +{ + evq = tle_evq_create(NULL); + EXPECT_EQ(evq, (struct tle_evq *) NULL); + EXPECT_EQ(rte_errno, EINVAL); +} + +TEST_F(udp_evq, udp_evq_create_invalid_socket) +{ + evq_params.socket_id = 999; + evq = tle_evq_create(&evq_params); + ASSERT_EQ(evq, (struct tle_evq *) NULL); +} + +TEST_F(udp_evq, udp_evq_create_destroy_positive) +{ + evq = tle_evq_create(&evq_params); + ASSERT_NE(evq, (struct tle_evq *) NULL); + EXPECT_EQ(rte_errno, 0); + EXPECT_EQ(evq->nb_events, max_events); + EXPECT_EQ(evq->nb_free, max_events); + tle_evq_destroy(evq); + EXPECT_EQ(rte_errno, 0); +} + +TEST_F(udp_event, udp_event_alloc_null) +{ + event = tle_event_alloc(NULL, (void *) &fake_data); + EXPECT_EQ(event, (struct tle_event *) NULL); + EXPECT_EQ(rte_errno, EINVAL); +} + +TEST_F(udp_event, udp_event_free_null) +{ + tle_event_free(NULL); + EXPECT_EQ(rte_errno, EINVAL); +} + +TEST_F(udp_event, udp_event_alloc_free_positive) +{ + event = tle_event_alloc(evq, (void *) &fake_data); + ASSERT_NE(event, (struct tle_event *) NULL); + EXPECT_EQ(rte_errno, 0); + EXPECT_EQ(evq->nb_free, max_events - 1); + tle_event_free(event); + EXPECT_EQ(rte_errno, 0); + EXPECT_EQ(evq->nb_free, max_events); +} + +TEST_F(udp_event, udp_event_alloc_free_max_reached) +{ + uint32_t i; + struct tle_event *last_event; + + for (i = 1; i <= max_events; i++) { + event = tle_event_alloc(evq, (void *) &fake_data); + ASSERT_NE(event, (struct tle_event *) NULL); + EXPECT_EQ(rte_errno, 0); + EXPECT_EQ(evq->nb_free, max_events - i); + } + + last_event = tle_event_alloc(evq, (void *) &fake_data); + ASSERT_EQ(last_event, (struct tle_event *) NULL); + ASSERT_EQ(rte_errno, -ENOMEM); + + for (i = 1; i <= max_events; i++) { + tle_event_free(event); + } + EXPECT_EQ(evq->nb_free, max_events); +} + +TEST_F(udp_event_state, udp_state_default) +{ + ASSERT_EQ(event->state, TLE_SEV_IDLE); +} + +TEST_P(udp_event_state_active, udp_state_active) +{ + auto states = GetParam(); + + tle_event_active(event, states.event_state); + ASSERT_EQ(event->state, states.event_state); + EXPECT_EQ(rte_errno, 0); +} + +INSTANTIATE_TEST_CASE_P(Default, udp_event_state_active, + testing::Values( + event_state_active{TLE_SEV_IDLE}, + event_state_active{TLE_SEV_UP}, + event_state_active{TLE_SEV_DOWN} +)); + +TEST_P(udp_event_state_active_twice, udp_state_active_twice) +{ + auto states = GetParam(); + + tle_event_active(event, states.first_state); + ASSERT_EQ(event->state, states.first_state); + EXPECT_EQ(rte_errno, 0); + tle_event_active(event, states.second_state); + ASSERT_EQ(event->state, states.result_state); + EXPECT_EQ(rte_errno, 0); +} + +INSTANTIATE_TEST_CASE_P(Default, udp_event_state_active_twice, + testing::Values( + event_state_active_twice{TLE_SEV_IDLE, TLE_SEV_IDLE, TLE_SEV_IDLE}, + event_state_active_twice{TLE_SEV_IDLE, TLE_SEV_DOWN, TLE_SEV_DOWN}, + event_state_active_twice{TLE_SEV_IDLE, TLE_SEV_UP, TLE_SEV_UP}, + event_state_active_twice{TLE_SEV_DOWN, TLE_SEV_IDLE, TLE_SEV_DOWN}, + event_state_active_twice{TLE_SEV_DOWN, TLE_SEV_DOWN, TLE_SEV_DOWN}, + event_state_active_twice{TLE_SEV_UP, TLE_SEV_IDLE, TLE_SEV_UP}, + event_state_active_twice{TLE_SEV_UP, TLE_SEV_DOWN, TLE_SEV_UP}, + event_state_active_twice{TLE_SEV_UP, TLE_SEV_UP, TLE_SEV_UP} +)); + +TEST_F(udp_event_state, udp_state_raise) +{ + tle_event_raise(event); + ASSERT_EQ(event->state, TLE_SEV_IDLE); + EXPECT_EQ(rte_errno, 0); + tle_event_active(event, TLE_SEV_DOWN); + ASSERT_EQ(event->state, TLE_SEV_DOWN); + EXPECT_EQ(rte_errno, 0); + tle_event_raise(event); + ASSERT_EQ(event->state, TLE_SEV_UP); + EXPECT_EQ(rte_errno, 0); +} + +TEST_F(udp_event_state, udp_state_down) +{ + tle_event_down(event); + ASSERT_EQ(event->state, TLE_SEV_IDLE); + EXPECT_EQ(rte_errno, 0); + tle_event_active(event, TLE_SEV_UP); + ASSERT_EQ(event->state, TLE_SEV_UP); + EXPECT_EQ(rte_errno, 0); + tle_event_down(event); + ASSERT_EQ(event->state, TLE_SEV_DOWN); + EXPECT_EQ(rte_errno, 0); +} + +TEST_P(udp_event_state_idle, udp_state_idle) +{ + auto states = GetParam(); + + tle_event_active(event, states.event_state); + ASSERT_EQ(event->state, states.event_state); + EXPECT_EQ(rte_errno, 0); + tle_event_idle(event); + ASSERT_EQ(event->state, TLE_SEV_IDLE); + EXPECT_EQ(rte_errno, 0); +} + +INSTANTIATE_TEST_CASE_P(Default, udp_event_state_idle, + testing::Values( + event_state_active{TLE_SEV_IDLE}, + event_state_active{TLE_SEV_UP}, + event_state_active{TLE_SEV_DOWN} +)); + +TEST_F(udp_event, udp_event_get) +{ + uint32_t i; + const void **evd; + + evd = (const void **) malloc(max_events * sizeof(void *)); + for (i = 1; i <= max_events; i++) { + event = tle_event_alloc(evq, (void *) &fake_data); + EXPECT_NE(event, (struct tle_event *) NULL); + tle_event_active(event, TLE_SEV_UP); + EXPECT_EQ(event->state, TLE_SEV_UP); + } + EXPECT_EQ(evq->nb_free, 0); + EXPECT_EQ(tle_evq_get(evq, evd, max_events), max_events); + free(evd); +} |