aboutsummaryrefslogtreecommitdiffstats
path: root/test/gtest/test_tle_tcp_stream.cpp
diff options
context:
space:
mode:
authorKonstantin Ananyev <konstantin.ananyev@intel.com>2017-02-21 18:12:20 +0000
committerKonstantin Ananyev <konstantin.ananyev@intel.com>2017-02-24 16:37:08 +0000
commitaa97dd1ce910b839fed46ad55d1e70e403f5a930 (patch)
treef6f0fd494eaf499859bff9f20f5ddfac9ab99233 /test/gtest/test_tle_tcp_stream.cpp
parentf5f10013ffef8e4ac1071087b8492fe6380d98fe (diff)
Introduce first version of TCP code.
Supported functionality: - open/close - listen/accept/connect - send/recv In order to achieve that libtle_udp library was reworked into libtle_l4p library that supports both TCP and UDP protocols. New libtle_timer library was introduced (thanks to Cisco guys and Dave Barach <dbarach@cisco.com> for sharing their timer code with us). Sample application was also reworked significantly to support both TCP and UDP traffic handling. New UT were introduced. Change-Id: I806b05011f521e89b58db403cfdd484a37beb775 Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com> Signed-off-by: Karol Latecki <karolx.latecki@intel.com> Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Diffstat (limited to 'test/gtest/test_tle_tcp_stream.cpp')
-rw-r--r--test/gtest/test_tle_tcp_stream.cpp195
1 files changed, 195 insertions, 0 deletions
diff --git a/test/gtest/test_tle_tcp_stream.cpp b/test/gtest/test_tle_tcp_stream.cpp
new file mode 100644
index 0000000..b861049
--- /dev/null
+++ b/test/gtest/test_tle_tcp_stream.cpp
@@ -0,0 +1,195 @@
+/*
+ * 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_tcp_stream.h"
+
+/* --------- Basic tests for opening / closing streams, no traffic --------- */
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_nullctx)
+{
+ stream = tle_tcp_stream_open(nullptr,
+ (const struct tle_tcp_stream_param *)&stream_prm);
+ EXPECT_EQ(stream, nullptr);
+ EXPECT_EQ(rte_errno, EINVAL);
+
+ ret = tle_tcp_stream_close(stream);
+ EXPECT_EQ(ret, -EINVAL);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_null_stream_prm)
+{
+ stream = tle_tcp_stream_open(ctx, nullptr);
+ EXPECT_EQ(stream, nullptr);
+ EXPECT_EQ(rte_errno, EINVAL);
+
+ ret = tle_tcp_stream_close(stream);
+ EXPECT_EQ(ret, -EINVAL);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_close_ipv4)
+{
+ stream = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param *)&stream_prm);
+ ASSERT_NE(stream, nullptr);
+
+ ret = tle_tcp_stream_close(stream);
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_close_ipv6)
+{
+ stream6 = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param *)&stream_prm6);
+ ASSERT_NE(stream, nullptr);
+
+ ret = tle_tcp_stream_close(stream6);
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_close_open_close)
+{
+ stream = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param *)&stream_prm);
+ ASSERT_NE(stream, nullptr);
+
+ ret = tle_tcp_stream_close(stream);
+ ASSERT_EQ(ret, 0);
+
+ stream = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param*)&stream_prm);
+ ASSERT_NE(stream, nullptr);
+
+ ret = tle_tcp_stream_close(stream);
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_duplicate_ipv4)
+{
+ struct tle_stream *stream_dup;
+
+ stream = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param *)&stream_prm);
+ ASSERT_NE(stream, nullptr);
+
+ stream_dup = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param*)&stream_prm);
+ ASSERT_EQ(stream_dup, nullptr);
+ ASSERT_EQ(rte_errno, EEXIST);
+
+ ret = tle_tcp_stream_close(stream);
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_open_duplicate_ipv6)
+{
+ struct tle_stream *stream_dup;
+
+ stream6 = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param *)&stream_prm6);
+ ASSERT_NE(stream, nullptr);
+
+ stream_dup = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param*)&stream_prm6);
+ ASSERT_EQ(stream_dup, nullptr);
+ ASSERT_EQ(rte_errno, EEXIST);
+
+ ret = tle_tcp_stream_close(stream6);
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_close_null)
+{
+ ret = tle_tcp_stream_close(nullptr);
+ EXPECT_EQ(ret, -EINVAL);
+}
+
+TEST_F(test_tle_tcp_stream, tcp_stream_test_closed_already)
+{
+ stream = tle_tcp_stream_open(ctx,
+ (const struct tle_tcp_stream_param *)&stream_prm);
+ ASSERT_NE(stream, nullptr);
+
+ ret = tle_tcp_stream_close(stream);
+ EXPECT_EQ(ret, 0);
+
+ ret = tle_tcp_stream_close(stream);
+ EXPECT_NE(ret, 0);
+}
+
+/* --------- Tests for get_addr call --------- */
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_get_addr_null_stream)
+{
+ struct tle_tcp_stream_addr addr;
+
+ ret = tle_tcp_stream_get_addr(nullptr, &addr);
+ EXPECT_EQ(ret, -EINVAL);
+}
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_get_addr_null_addr)
+{
+ ret = tle_tcp_stream_get_addr(stream, NULL);
+ EXPECT_EQ(ret, -EINVAL);
+}
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_get_addr_ipv4)
+{
+ struct tle_tcp_stream_addr addr;
+
+ memset(&addr, 0, sizeof(addr));
+ ret = tle_tcp_stream_get_addr(stream, &addr);
+ ASSERT_EQ(ret, 0);
+
+ ret = memcmp(&addr, &stream_prm.addr, sizeof(tle_tcp_stream_addr));
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_get_addr_ipv6)
+{
+ struct tle_tcp_stream_addr addr;
+
+ memset(&addr, 0, sizeof(addr));
+ ret = tle_tcp_stream_get_addr(stream6, &addr);
+ ASSERT_EQ(ret, 0);
+
+ ret = memcmp(&addr, &stream_prm6.addr, sizeof(tle_tcp_stream_addr));
+ ASSERT_EQ(ret, 0);
+}
+
+/* --------- Basic tests for listen call, no incoming connections --------- */
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_listen_null_stream)
+{
+ ret = tle_tcp_stream_listen(nullptr);
+ EXPECT_EQ(ret, -EINVAL);
+}
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_listen_ipv4)
+{
+ ret = tle_tcp_stream_listen(stream);
+ ASSERT_EQ(ret, 0);
+
+ ret = tle_tcp_stream_close(stream);
+ ASSERT_EQ(ret, 0);
+}
+
+TEST_F(test_tle_tcp_stream_ops, tcp_stream_listen_ipv6)
+{
+ ret = tle_tcp_stream_listen(stream6);
+ ASSERT_EQ(ret, 0);
+
+ ret = tle_tcp_stream_close(stream6);
+ ASSERT_EQ(ret, 0);
+}