Remove dependencies on obsolete __ARCH_WANT_SYSCALL_DEPRECATED system calls.
(aarch64 kernels don't have these system calls.)
Change-Id: I6f64075aa412f71520f2df71c3d69b647f91c1ca
diff --git a/tests/Android.mk b/tests/Android.mk
index 5bcf996..f117480 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -81,6 +81,7 @@
string_test.cpp \
strings_test.cpp \
stubs_test.cpp \
+ sys_epoll_test.cpp \
sys_select_test.cpp \
sys_sendfile_test.cpp \
sys_stat_test.cpp \
diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp
index 3070747..7705e2c 100644
--- a/tests/signal_test.cpp
+++ b/tests/signal_test.cpp
@@ -170,8 +170,6 @@
}
TEST(signal, sigsuspend_sigpending) {
- ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
-
// Block SIGALRM.
sigset_t just_SIGALRM;
sigemptyset(&just_SIGALRM);
@@ -179,6 +177,8 @@
sigset_t original_set;
ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, &original_set));
+ ScopedSignalHandler ssh(SIGALRM, SigSuspendTestHelper);
+
// There should be no pending signals.
sigset_t pending;
sigemptyset(&pending);
@@ -208,7 +208,7 @@
ASSERT_EQ(1, gSigSuspendTestHelperCallCount);
// Restore the original set.
- assert(0 == sigprocmask(SIG_SETMASK, &original_set, NULL));
+ ASSERT_EQ(0, sigprocmask(SIG_SETMASK, &original_set, NULL));
}
static void EmptySignalHandler(int) {}
@@ -216,14 +216,15 @@
TEST(signal, sigaction) {
// See what's currently set for SIGALRM.
- struct sigaction sa;
- memset(&sa, 0, sizeof(sa));
- ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa));
- ASSERT_TRUE(sa.sa_handler == NULL);
- ASSERT_TRUE(sa.sa_sigaction == NULL);
- ASSERT_TRUE(sa.sa_flags == 0);
+ struct sigaction original_sa;
+ memset(&original_sa, 0, sizeof(original_sa));
+ ASSERT_EQ(0, sigaction(SIGALRM, NULL, &original_sa));
+ ASSERT_TRUE(original_sa.sa_handler == NULL);
+ ASSERT_TRUE(original_sa.sa_sigaction == NULL);
+ ASSERT_TRUE(original_sa.sa_flags == 0);
// Set a traditional sa_handler signal handler.
+ struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sigaddset(&sa.sa_mask, SIGALRM);
sa.sa_flags = SA_ONSTACK;
@@ -250,4 +251,7 @@
ASSERT_TRUE(sa.sa_sigaction == EmptySignalAction);
ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler);
ASSERT_TRUE(sa.sa_flags == (SA_ONSTACK | SA_SIGINFO));
+
+ // Put everything back how it was.
+ ASSERT_EQ(0, sigaction(SIGALRM, &original_sa, NULL));
}
diff --git a/tests/sys_epoll_test.cpp b/tests/sys_epoll_test.cpp
new file mode 100644
index 0000000..e4e047b
--- /dev/null
+++ b/tests/sys_epoll_test.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 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 <gtest/gtest.h>
+
+#include <errno.h>
+#include <sys/epoll.h>
+
+TEST(sys_epoll, smoke) {
+ int epoll_fd = epoll_create(1);
+ ASSERT_NE(-1, epoll_fd) << strerror(errno);
+ epoll_event events[1];
+
+ // Regular epoll_wait.
+ ASSERT_EQ(0, epoll_wait(epoll_fd, events, 1, 1));
+
+ // epoll_pwait without a sigset (which is equivalent to epoll_wait).
+ ASSERT_EQ(0, epoll_pwait(epoll_fd, events, 1, 1, NULL));
+
+ // epoll_pwait with a sigset.
+ sigset_t ss;
+ sigemptyset(&ss);
+ sigaddset(&ss, SIGPIPE);
+ ASSERT_EQ(0, epoll_pwait(epoll_fd, events, 1, 1, &ss));
+}
diff --git a/tests/sys_select_test.cpp b/tests/sys_select_test.cpp
index 36f01b3..57afc9b 100644
--- a/tests/sys_select_test.cpp
+++ b/tests/sys_select_test.cpp
@@ -41,3 +41,73 @@
EXPECT_FALSE(FD_ISSET(0, &fds));
EXPECT_FALSE(FD_ISSET(1, &fds));
}
+
+TEST(sys_select, select_smoke) {
+ fd_set r;
+ FD_ZERO(&r);
+ fd_set w;
+ FD_ZERO(&w);
+ fd_set e;
+ FD_ZERO(&e);
+
+ FD_SET(STDIN_FILENO, &r);
+ FD_SET(STDOUT_FILENO, &w);
+ FD_SET(STDERR_FILENO, &w);
+
+ int max = STDERR_FILENO + 1;
+
+ // Invalid max fd.
+ ASSERT_EQ(-1, select(-1, &r, &w, &e, NULL));
+ ASSERT_EQ(EINVAL, errno);
+
+ ASSERT_EQ(2, select(max, &r, &w, &e, NULL));
+
+ // Invalid timeout.
+ timeval tv;
+ tv.tv_sec = -1;
+ tv.tv_usec = 0;
+ ASSERT_EQ(-1, select(max, &r, &w, &e, &tv));
+ ASSERT_EQ(EINVAL, errno);
+
+ // Valid timeout...
+ tv.tv_sec = 1;
+ ASSERT_EQ(2, select(max, &r, &w, &e, &tv));
+ ASSERT_NE(0, tv.tv_usec); // ...which got updated.
+}
+
+TEST(sys_select, pselect_smoke) {
+ sigset_t ss;
+ sigemptyset(&ss);
+ sigaddset(&ss, SIGPIPE);
+
+ fd_set r;
+ FD_ZERO(&r);
+ fd_set w;
+ FD_ZERO(&w);
+ fd_set e;
+ FD_ZERO(&e);
+
+ FD_SET(STDIN_FILENO, &r);
+ FD_SET(STDOUT_FILENO, &w);
+ FD_SET(STDERR_FILENO, &w);
+
+ int max = STDERR_FILENO + 1;
+
+ // Invalid max fd.
+ ASSERT_EQ(-1, pselect(-1, &r, &w, &e, NULL, &ss));
+ ASSERT_EQ(EINVAL, errno);
+
+ ASSERT_EQ(2, pselect(max, &r, &w, &e, NULL, &ss));
+
+ // Invalid timeout.
+ timespec tv;
+ tv.tv_sec = -1;
+ tv.tv_nsec = 0;
+ ASSERT_EQ(-1, pselect(max, &r, &w, &e, &tv, &ss));
+ ASSERT_EQ(EINVAL, errno);
+
+ // Valid timeout...
+ tv.tv_sec = 1;
+ ASSERT_EQ(2, pselect(max, &r, &w, &e, &tv, &ss));
+ ASSERT_EQ(0, tv.tv_nsec); // ...which did _not_ get updated.
+}
diff --git a/tests/unistd_test.cpp b/tests/unistd_test.cpp
index 3193083..7d0af7c 100644
--- a/tests/unistd_test.cpp
+++ b/tests/unistd_test.cpp
@@ -73,3 +73,16 @@
ASSERT_EQ(0, stat(tf.filename, &sb));
ASSERT_EQ(123, sb.st_size);
}
+
+static bool gPauseTestFlag = false;
+static void PauseTestSignalHandler(int) {
+ gPauseTestFlag = true;
+}
+
+TEST(unistd, pause) {
+ signal(SIGALRM, PauseTestSignalHandler);
+ alarm(1);
+ ASSERT_FALSE(gPauseTestFlag);
+ ASSERT_EQ(-1, pause());
+ ASSERT_TRUE(gPauseTestFlag);
+}