diff options
Diffstat (limited to 'libcutils/tests')
-rw-r--r-- | libcutils/tests/Android.bp | 8 | ||||
-rw-r--r-- | libcutils/tests/android_get_control_file_test.cpp (renamed from libcutils/tests/files_test.cpp) | 36 | ||||
-rw-r--r-- | libcutils/tests/android_get_control_socket_test.cpp | 71 | ||||
-rw-r--r-- | libcutils/tests/sockets_test.cpp | 50 |
4 files changed, 98 insertions, 67 deletions
diff --git a/libcutils/tests/Android.bp b/libcutils/tests/Android.bp index bd354129d..72e2eace5 100644 --- a/libcutils/tests/Android.bp +++ b/libcutils/tests/Android.bp @@ -14,7 +14,7 @@ cc_defaults { name: "libcutils_test_default", - srcs: ["sockets_test.cpp", "files_test.cpp"], + srcs: ["sockets_test.cpp"], target: { android: { @@ -28,7 +28,11 @@ cc_defaults { }, not_windows: { - srcs: ["test_str_parms.cpp"], + srcs: [ + "test_str_parms.cpp", + "android_get_control_socket_test.cpp", + "android_get_control_file_test.cpp" + ], }, }, diff --git a/libcutils/tests/files_test.cpp b/libcutils/tests/android_get_control_file_test.cpp index 1a7d67386..6c6fd2ad2 100644 --- a/libcutils/tests/files_test.cpp +++ b/libcutils/tests/android_get_control_file_test.cpp @@ -14,33 +14,37 @@ * limitations under the License. */ +#include <ctype.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <time.h> -#include <cutils/files.h> +#include <string> + +#include <android-base/stringprintf.h> +#include <android-base/test_utils.h> +#include <cutils/android_get_control_file.h> #include <gtest/gtest.h> TEST(FilesTest, android_get_control_file) { - static const char key[] = ANDROID_FILE_ENV_PREFIX "_dev_kmsg"; - static const char name[] = "/dev/kmsg"; + TemporaryFile tf; + ASSERT_GE(tf.fd, 0); + + std::string key(ANDROID_FILE_ENV_PREFIX); + key += tf.path; - EXPECT_EQ(unsetenv(key), 0); - EXPECT_EQ(android_get_control_file(name), -1); + std::for_each(key.begin(), key.end(), [] (char& c) { c = isalnum(c) ? c : '_'; }); - int fd; - ASSERT_GE(fd = open(name, O_RDONLY | O_CLOEXEC), 0); - EXPECT_EQ(android_get_control_file(name), -1); + EXPECT_EQ(unsetenv(key.c_str()), 0); + EXPECT_EQ(android_get_control_file(tf.path), -1); - char val[32]; - snprintf(val, sizeof(val), "%d", fd); - EXPECT_EQ(setenv(key, val, true), 0); + EXPECT_EQ(setenv(key.c_str(), android::base::StringPrintf("%d", tf.fd).c_str(), true), 0); - EXPECT_EQ(android_get_control_file(name), fd); - close(fd); - EXPECT_EQ(android_get_control_file(name), -1); - EXPECT_EQ(unsetenv(key), 0); - EXPECT_EQ(android_get_control_file(name), -1); + EXPECT_EQ(android_get_control_file(tf.path), tf.fd); + close(tf.fd); + EXPECT_EQ(android_get_control_file(tf.path), -1); + EXPECT_EQ(unsetenv(key.c_str()), 0); + EXPECT_EQ(android_get_control_file(tf.path), -1); } diff --git a/libcutils/tests/android_get_control_socket_test.cpp b/libcutils/tests/android_get_control_socket_test.cpp new file mode 100644 index 000000000..e58674864 --- /dev/null +++ b/libcutils/tests/android_get_control_socket_test.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2016 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. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/socket.h> +#include <sys/types.h> +#include <sys/un.h> +#include <time.h> + +#include <cutils/sockets.h> +#include <gtest/gtest.h> + +#ifndef SOCK_NONBLOCK +#define SOCK_NONBLOCK 0 +#endif + +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 0 +#endif + +TEST(SocketsTest, android_get_control_socket) { + static const char key[] = ANDROID_SOCKET_ENV_PREFIX "SocketsTest_android_get_control_socket"; + static const char* name = key + strlen(ANDROID_SOCKET_ENV_PREFIX); + + EXPECT_EQ(unsetenv(key), 0); + EXPECT_EQ(android_get_control_socket(name), -1); + + int fd; + ASSERT_GE(fd = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0), 0); +#ifdef F_GETFL + int flags; + ASSERT_GE(flags = fcntl(fd, F_GETFL), 0); + ASSERT_GE(fcntl(fd, F_SETFL, flags | O_NONBLOCK), 0); +#endif + EXPECT_EQ(android_get_control_socket(name), -1); + + struct sockaddr_un addr; + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + snprintf(addr.sun_path, sizeof(addr.sun_path), ANDROID_SOCKET_DIR"/%s", name); + unlink(addr.sun_path); + + EXPECT_EQ(bind(fd, (struct sockaddr*)&addr, sizeof(addr)), 0); + EXPECT_EQ(android_get_control_socket(name), -1); + + char val[32]; + snprintf(val, sizeof(val), "%d", fd); + EXPECT_EQ(setenv(key, val, true), 0); + + EXPECT_EQ(android_get_control_socket(name), fd); + socket_close(fd); + EXPECT_EQ(android_get_control_socket(name), -1); + EXPECT_EQ(unlink(addr.sun_path), 0); + EXPECT_EQ(android_get_control_socket(name), -1); + EXPECT_EQ(unsetenv(key), 0); + EXPECT_EQ(android_get_control_socket(name), -1); +} diff --git a/libcutils/tests/sockets_test.cpp b/libcutils/tests/sockets_test.cpp index adfbf4ad3..0441fb636 100644 --- a/libcutils/tests/sockets_test.cpp +++ b/libcutils/tests/sockets_test.cpp @@ -18,11 +18,9 @@ // IPv6 capabilities. These tests assume that no UDP packets are lost, which // should be the case for loopback communication, but is not guaranteed. -#include <stdio.h> -#include <stdlib.h> +#include <string.h> #include <sys/socket.h> #include <sys/types.h> -#include <sys/un.h> #include <time.h> #include <cutils/sockets.h> @@ -189,49 +187,3 @@ TEST(SocketsTest, TestTcpReceiveTimeout) { TEST(SocketsTest, TestSocketSendBuffersFailure) { EXPECT_EQ(-1, socket_send_buffers(INVALID_SOCKET, nullptr, 0)); } - -#ifndef SOCK_NONBLOCK -#define SOCK_NONBLOCK 0 -#endif - -#ifndef SOCK_CLOEXEC -#define SOCK_CLOEXEC 0 -#endif - -TEST(SocketsTest, android_get_control_socket) { - static const char key[] = ANDROID_SOCKET_ENV_PREFIX "SocketsTest_android_get_control_socket"; - static const char* name = key + strlen(ANDROID_SOCKET_ENV_PREFIX); - - EXPECT_EQ(unsetenv(key), 0); - EXPECT_EQ(android_get_control_socket(name), -1); - - int fd; - ASSERT_GE(fd = socket(PF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0), 0); -#ifdef F_GETFL - int flags; - ASSERT_GE(flags = fcntl(fd, F_GETFL), 0); - ASSERT_GE(fcntl(fd, F_SETFL, flags | O_NONBLOCK), 0); -#endif - EXPECT_EQ(android_get_control_socket(name), -1); - - struct sockaddr_un addr; - memset(&addr, 0, sizeof(addr)); - addr.sun_family = AF_UNIX; - snprintf(addr.sun_path, sizeof(addr.sun_path), ANDROID_SOCKET_DIR"/%s", name); - unlink(addr.sun_path); - - EXPECT_EQ(bind(fd, (struct sockaddr*)&addr, sizeof(addr)), 0); - EXPECT_EQ(android_get_control_socket(name), -1); - - char val[32]; - snprintf(val, sizeof(val), "%d", fd); - EXPECT_EQ(setenv(key, val, true), 0); - - EXPECT_EQ(android_get_control_socket(name), fd); - socket_close(fd); - EXPECT_EQ(android_get_control_socket(name), -1); - EXPECT_EQ(unlink(addr.sun_path), 0); - EXPECT_EQ(android_get_control_socket(name), -1); - EXPECT_EQ(unsetenv(key), 0); - EXPECT_EQ(android_get_control_socket(name), -1); -} |