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);
+}