Loading tetheroffload/config/1.0/vts/functional/Android.bp +15 −0 Original line number Diff line number Diff line // Copyright (C) 2017 The Android Open Source Project // // 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. cc_test { name: "VtsHalTetheroffloadConfigV1_0TargetTest", defaults: ["hidl_defaults"], srcs: ["VtsHalTetheroffloadConfigV1_0TargetTest.cpp"], shared_libs: [ "android.hardware.tetheroffload.config@1.0", "libbase", "libcutils", "libhidlbase", "libhidltransport", Loading tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp +76 −91 Original line number Diff line number Diff line Loading @@ -13,18 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "VtsOffloadConfigV1_0TargetTest" #include <VtsHalHidlTargetTestBase.h> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> #include <android/hardware/tetheroffload/config/1.0/IOffloadConfig.h> #include <linux/netfilter/nfnetlink.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <log/log.h> #include <set> #include <sys/socket.h> #include <unistd.h> #include <VtsHalHidlTargetTestBase.h> #include <set> using android::base::StringPrintf; using android::base::unique_fd; using android::hardware::hidl_handle; using android::hardware::hidl_string; using android::hardware::Return; Loading @@ -32,39 +37,46 @@ using android::hardware::tetheroffload::config::V1_0::IOffloadConfig; using android::hardware::Void; using android::sp; #define ASSERT_TRUE_CALLBACK \ [&](bool success, const hidl_string& errMsg) { ASSERT_TRUE(success) << errMsg.c_str(); } #define ASSERT_FALSE_CALLBACK \ [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); } const unsigned kFd1Groups = NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY; const unsigned kFd2Groups = NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY; inline const sockaddr* asSockaddr(const sockaddr_nl* nladdr) { return reinterpret_cast<const sockaddr*>(nladdr); } int conntrackSocket(unsigned groups) { android::base::unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, NETLINK_NETFILTER)); int netlinkSocket(int protocol, unsigned groups) { unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, protocol)); if (s.get() < 0) { return -errno; } const struct sockaddr_nl bind_addr = { .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, }; if (::bind(s.get(), asSockaddr(&bind_addr), sizeof(bind_addr)) != 0) { return -errno; } const struct sockaddr_nl kernel_addr = { .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, }; if (connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) { if (::connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) { return -errno; } return s.release(); } int netlinkSocket(unsigned groups) { return netlinkSocket(NETLINK_NETFILTER, groups); } class OffloadConfigHidlTest : public testing::VtsHalHidlTargetTestBase { public: virtual void SetUp() override { Loading @@ -77,104 +89,77 @@ public: sp<IOffloadConfig> config; }; /** * Ensure handles can be set with correct socket options. */ // Ensure handles can be set with correct socket options. TEST_F(OffloadConfigHidlTest, TestSetHandles) { android::base::unique_fd fd1(conntrackSocket(NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY)), fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY)); if (fd1.get() < 0 || fd2.get() < 0) { unique_fd fd1(netlinkSocket(kFd1Groups)); if (fd1.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); return; FAIL(); } native_handle_t* const nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1.release(); const hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1; hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2; hidl_handle h2 = hidl_handle(nativeHandle2); if(h1->numFds == 1 && h2->numFds == 1) { ALOGE("Num FDs for both is 1"); } else { ALOGE("num FDs not 1: %d %d", h1->numFds, h2->numFds); unique_fd fd2(netlinkSocket(kFd2Groups)); if (fd2.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); FAIL(); } native_handle_t* const nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2.release(); const hidl_handle h2 = hidl_handle(nativeHandle2); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_TRUE(success) << errMsg.c_str(); }; Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_TRUE_CALLBACK); ASSERT_TRUE(ret.isOk()); } /** * Negative testcase * Passing a handle without an associated FD should return an * error (Failed Input Checks). Check that this occurs when * neither handle has an associated FD. */ // Passing a handle without an associated file descriptor should return an error // (e.g. "Failed Input Checks"). Check that this occurs when both FDs are empty. TEST_F(OffloadConfigHidlTest, TestSetHandleNone) { native_handle_t* nativeHandle1 = native_handle_create(0, 0); hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(0, 0); hidl_handle h2 = hidl_handle(nativeHandle2); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }; native_handle_t* const nativeHandle1 = native_handle_create(0, 0); const hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* const nativeHandle2 = native_handle_create(0, 0); const hidl_handle h2 = hidl_handle(nativeHandle2); Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK); ASSERT_TRUE(ret.isOk()); } /** * Negative testcase * Passing a handle without an associated FD should return an * error (Failed Input Checks). Check that this occurs with FD2. */ // Passing a handle without an associated file descriptor should return an error // (e.g. "Failed Input Checks"). Check that this occurs when FD2 is empty. TEST_F(OffloadConfigHidlTest, TestSetHandle1Only) { android::base::unique_fd fd1(conntrackSocket(NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY)); native_handle_t* nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1; hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(0, 0); hidl_handle h2 = hidl_handle(nativeHandle2); unique_fd fd1(netlinkSocket(kFd1Groups)); if (fd1.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); FAIL(); } native_handle_t* const nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1.release(); const hidl_handle h1 = hidl_handle(nativeHandle1); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }; native_handle_t* const nativeHandle2 = native_handle_create(0, 0); const hidl_handle h2 = hidl_handle(nativeHandle2); Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK); ASSERT_TRUE(ret.isOk()); } /** * Negative testcase * Passing a handle without an associated FD should return an * error (Failed Input Checks). Check that this occurs with FD1. */ // Passing a handle without an associated file descriptor should return an error // (e.g. "Failed Input Checks"). Check that this occurs when FD1 is empty. TEST_F(OffloadConfigHidlTest, TestSetHandle2OnlyNotOk) { android::base::unique_fd fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY)); native_handle_t* nativeHandle1 = native_handle_create(0, 0); hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2; hidl_handle h2 = hidl_handle(nativeHandle2); native_handle_t* const nativeHandle1 = native_handle_create(0, 0); const hidl_handle h1 = hidl_handle(nativeHandle1); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }; unique_fd fd2(netlinkSocket(kFd2Groups)); if (fd2.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); FAIL(); } native_handle_t* const nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2.release(); const hidl_handle h2 = hidl_handle(nativeHandle2); Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK); ASSERT_TRUE(ret.isOk()); } Loading tetheroffload/control/1.0/vts/functional/Android.bp +15 −0 Original line number Diff line number Diff line // Copyright (C) 2017 The Android Open Source Project // // 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. cc_test { name: "VtsHalTetheroffloadControlV1_0TargetTest", defaults: ["hidl_defaults"], Loading @@ -5,6 +19,7 @@ cc_test { shared_libs: [ "android.hardware.tetheroffload.config@1.0", "android.hardware.tetheroffload.control@1.0", "libbase", "libcutils", "libhidlbase", "libhidltransport", Loading tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp +402 −655 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
tetheroffload/config/1.0/vts/functional/Android.bp +15 −0 Original line number Diff line number Diff line // Copyright (C) 2017 The Android Open Source Project // // 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. cc_test { name: "VtsHalTetheroffloadConfigV1_0TargetTest", defaults: ["hidl_defaults"], srcs: ["VtsHalTetheroffloadConfigV1_0TargetTest.cpp"], shared_libs: [ "android.hardware.tetheroffload.config@1.0", "libbase", "libcutils", "libhidlbase", "libhidltransport", Loading
tetheroffload/config/1.0/vts/functional/VtsHalTetheroffloadConfigV1_0TargetTest.cpp +76 −91 Original line number Diff line number Diff line Loading @@ -13,18 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "VtsOffloadConfigV1_0TargetTest" #include <VtsHalHidlTargetTestBase.h> #include <android-base/stringprintf.h> #include <android-base/unique_fd.h> #include <android/hardware/tetheroffload/config/1.0/IOffloadConfig.h> #include <linux/netfilter/nfnetlink.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> #include <log/log.h> #include <set> #include <sys/socket.h> #include <unistd.h> #include <VtsHalHidlTargetTestBase.h> #include <set> using android::base::StringPrintf; using android::base::unique_fd; using android::hardware::hidl_handle; using android::hardware::hidl_string; using android::hardware::Return; Loading @@ -32,39 +37,46 @@ using android::hardware::tetheroffload::config::V1_0::IOffloadConfig; using android::hardware::Void; using android::sp; #define ASSERT_TRUE_CALLBACK \ [&](bool success, const hidl_string& errMsg) { ASSERT_TRUE(success) << errMsg.c_str(); } #define ASSERT_FALSE_CALLBACK \ [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); } const unsigned kFd1Groups = NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY; const unsigned kFd2Groups = NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY; inline const sockaddr* asSockaddr(const sockaddr_nl* nladdr) { return reinterpret_cast<const sockaddr*>(nladdr); } int conntrackSocket(unsigned groups) { android::base::unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, NETLINK_NETFILTER)); int netlinkSocket(int protocol, unsigned groups) { unique_fd s(socket(AF_NETLINK, SOCK_DGRAM, protocol)); if (s.get() < 0) { return -errno; } const struct sockaddr_nl bind_addr = { .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, }; if (::bind(s.get(), asSockaddr(&bind_addr), sizeof(bind_addr)) != 0) { return -errno; } const struct sockaddr_nl kernel_addr = { .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, .nl_family = AF_NETLINK, .nl_pad = 0, .nl_pid = 0, .nl_groups = groups, }; if (connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) { if (::connect(s.get(), asSockaddr(&kernel_addr), sizeof(kernel_addr)) != 0) { return -errno; } return s.release(); } int netlinkSocket(unsigned groups) { return netlinkSocket(NETLINK_NETFILTER, groups); } class OffloadConfigHidlTest : public testing::VtsHalHidlTargetTestBase { public: virtual void SetUp() override { Loading @@ -77,104 +89,77 @@ public: sp<IOffloadConfig> config; }; /** * Ensure handles can be set with correct socket options. */ // Ensure handles can be set with correct socket options. TEST_F(OffloadConfigHidlTest, TestSetHandles) { android::base::unique_fd fd1(conntrackSocket(NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY)), fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY)); if (fd1.get() < 0 || fd2.get() < 0) { unique_fd fd1(netlinkSocket(kFd1Groups)); if (fd1.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); return; FAIL(); } native_handle_t* const nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1.release(); const hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1; hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2; hidl_handle h2 = hidl_handle(nativeHandle2); if(h1->numFds == 1 && h2->numFds == 1) { ALOGE("Num FDs for both is 1"); } else { ALOGE("num FDs not 1: %d %d", h1->numFds, h2->numFds); unique_fd fd2(netlinkSocket(kFd2Groups)); if (fd2.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); FAIL(); } native_handle_t* const nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2.release(); const hidl_handle h2 = hidl_handle(nativeHandle2); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_TRUE(success) << errMsg.c_str(); }; Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_TRUE_CALLBACK); ASSERT_TRUE(ret.isOk()); } /** * Negative testcase * Passing a handle without an associated FD should return an * error (Failed Input Checks). Check that this occurs when * neither handle has an associated FD. */ // Passing a handle without an associated file descriptor should return an error // (e.g. "Failed Input Checks"). Check that this occurs when both FDs are empty. TEST_F(OffloadConfigHidlTest, TestSetHandleNone) { native_handle_t* nativeHandle1 = native_handle_create(0, 0); hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(0, 0); hidl_handle h2 = hidl_handle(nativeHandle2); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }; native_handle_t* const nativeHandle1 = native_handle_create(0, 0); const hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* const nativeHandle2 = native_handle_create(0, 0); const hidl_handle h2 = hidl_handle(nativeHandle2); Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK); ASSERT_TRUE(ret.isOk()); } /** * Negative testcase * Passing a handle without an associated FD should return an * error (Failed Input Checks). Check that this occurs with FD2. */ // Passing a handle without an associated file descriptor should return an error // (e.g. "Failed Input Checks"). Check that this occurs when FD2 is empty. TEST_F(OffloadConfigHidlTest, TestSetHandle1Only) { android::base::unique_fd fd1(conntrackSocket(NFNLGRP_CONNTRACK_NEW | NFNLGRP_CONNTRACK_DESTROY)); native_handle_t* nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1; hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(0, 0); hidl_handle h2 = hidl_handle(nativeHandle2); unique_fd fd1(netlinkSocket(kFd1Groups)); if (fd1.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); FAIL(); } native_handle_t* const nativeHandle1 = native_handle_create(1, 0); nativeHandle1->data[0] = fd1.release(); const hidl_handle h1 = hidl_handle(nativeHandle1); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }; native_handle_t* const nativeHandle2 = native_handle_create(0, 0); const hidl_handle h2 = hidl_handle(nativeHandle2); Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK); ASSERT_TRUE(ret.isOk()); } /** * Negative testcase * Passing a handle without an associated FD should return an * error (Failed Input Checks). Check that this occurs with FD1. */ // Passing a handle without an associated file descriptor should return an error // (e.g. "Failed Input Checks"). Check that this occurs when FD1 is empty. TEST_F(OffloadConfigHidlTest, TestSetHandle2OnlyNotOk) { android::base::unique_fd fd2(conntrackSocket(NFNLGRP_CONNTRACK_UPDATE | NFNLGRP_CONNTRACK_DESTROY)); native_handle_t* nativeHandle1 = native_handle_create(0, 0); hidl_handle h1 = hidl_handle(nativeHandle1); native_handle_t* nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2; hidl_handle h2 = hidl_handle(nativeHandle2); native_handle_t* const nativeHandle1 = native_handle_create(0, 0); const hidl_handle h1 = hidl_handle(nativeHandle1); auto cb = [&](bool success, const hidl_string& errMsg) { ASSERT_FALSE(success) << errMsg.c_str(); }; unique_fd fd2(netlinkSocket(kFd2Groups)); if (fd2.get() < 0) { ALOGE("Unable to create conntrack handles: %d/%s", errno, strerror(errno)); FAIL(); } native_handle_t* const nativeHandle2 = native_handle_create(1, 0); nativeHandle2->data[0] = fd2.release(); const hidl_handle h2 = hidl_handle(nativeHandle2); Return<void> ret = config->setHandles(h1, h2, cb); const Return<void> ret = config->setHandles(h1, h2, ASSERT_FALSE_CALLBACK); ASSERT_TRUE(ret.isOk()); } Loading
tetheroffload/control/1.0/vts/functional/Android.bp +15 −0 Original line number Diff line number Diff line // Copyright (C) 2017 The Android Open Source Project // // 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. cc_test { name: "VtsHalTetheroffloadControlV1_0TargetTest", defaults: ["hidl_defaults"], Loading @@ -5,6 +19,7 @@ cc_test { shared_libs: [ "android.hardware.tetheroffload.config@1.0", "android.hardware.tetheroffload.control@1.0", "libbase", "libcutils", "libhidlbase", "libhidltransport", Loading
tetheroffload/control/1.0/vts/functional/VtsHalTetheroffloadControlV1_0TargetTest.cpp +402 −655 File changed.Preview size limit exceeded, changes collapsed. Show changes