summaryrefslogtreecommitdiffstats
path: root/test/gtest/test_tle_udp_event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/gtest/test_tle_udp_event.cpp')
-rw-r--r--test/gtest/test_tle_udp_event.cpp194
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);
+}