summaryrefslogtreecommitdiff
path: root/fdevent_test.cpp
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2015-09-15 16:27:09 -0700
committerYabin Cui <yabinc@google.com>2015-09-16 15:00:59 -0700
commit8719a1603e42f2c308c566e0a10858836c23b9c4 (patch)
tree78c34b929c2959c5471dc504423ca244d1b764c5 /fdevent_test.cpp
parenta01d59d5656214e7c7a82bdce76e723fff6d09a5 (diff)
downloadadb-8719a1603e42f2c308c566e0a10858836c23b9c4.tar.gz
Add unit tests for local socket.
Add has_write_error flag in asocket, so it will not wait on local_socket_closing_list to write pending packets in local_socket_close(). Although it doesn't fix any problem, it helps to make the code more stable. Add a missing put_apacket() in error handling. Add a check when adding local socket in local_socket_closing_list. Bug: 23314034 Change-Id: I75b07ba8ee59b7f277fba2fb919db63065b291be
Diffstat (limited to 'fdevent_test.cpp')
-rw-r--r--fdevent_test.cpp42
1 files changed, 18 insertions, 24 deletions
diff --git a/fdevent_test.cpp b/fdevent_test.cpp
index 33034d8..7457712 100644
--- a/fdevent_test.cpp
+++ b/fdevent_test.cpp
@@ -28,25 +28,6 @@
#include "adb_io.h"
-class SignalHandlerRegister {
- public:
- SignalHandlerRegister(const std::vector<int>& signums, void (*handler)(int)) {
- for (auto& sig : signums) {
- sig_t old_handler = signal(sig, handler);
- saved_signal_handlers_.push_back(std::make_pair(sig, old_handler));
- }
- }
-
- ~SignalHandlerRegister() {
- for (auto& pair : saved_signal_handlers_) {
- signal(pair.first, pair.second);
- }
- }
-
- private:
- std::vector<std::pair<int, sig_t>> saved_signal_handlers_;
-};
-
class FdHandler {
public:
FdHandler(int read_fd, int write_fd) : read_fd_(read_fd), write_fd_(write_fd) {
@@ -95,6 +76,19 @@ static void signal_handler(int) {
pthread_exit(nullptr);
}
+class FdeventTest : public ::testing::Test {
+ protected:
+ static void SetUpTestCase() {
+ ASSERT_NE(SIG_ERR, signal(SIGUSR1, signal_handler));
+ ASSERT_NE(SIG_ERR, signal(SIGPIPE, SIG_IGN));
+ }
+
+ virtual void SetUp() {
+ fdevent_reset();
+ ASSERT_EQ(0u, fdevent_installed_count());
+ }
+};
+
struct ThreadArg {
int first_read_fd;
int last_write_fd;
@@ -102,8 +96,6 @@ struct ThreadArg {
};
static void FdEventThreadFunc(ThreadArg* arg) {
- SignalHandlerRegister signal_handler_register({SIGUSR1}, signal_handler);
-
std::vector<int> read_fds;
std::vector<int> write_fds;
@@ -124,7 +116,7 @@ static void FdEventThreadFunc(ThreadArg* arg) {
fdevent_loop();
}
-TEST(fdevent, smoke) {
+TEST_F(FdeventTest, smoke) {
const size_t PIPE_COUNT = 10;
const size_t MESSAGE_LOOP_COUNT = 100;
const std::string MESSAGE = "fdevent_test";
@@ -154,6 +146,8 @@ TEST(fdevent, smoke) {
ASSERT_EQ(0, pthread_kill(thread, SIGUSR1));
ASSERT_EQ(0, pthread_join(thread, nullptr));
+ ASSERT_EQ(0, close(writer));
+ ASSERT_EQ(0, close(reader));
}
struct InvalidFdArg {
@@ -171,7 +165,7 @@ static void InvalidFdEventCallback(int fd, unsigned events, void* userdata) {
}
}
-void InvalidFdThreadFunc(void*) {
+static void InvalidFdThreadFunc(void*) {
const int INVALID_READ_FD = std::numeric_limits<int>::max() - 1;
size_t happened_event_count = 0;
InvalidFdArg read_arg;
@@ -189,7 +183,7 @@ void InvalidFdThreadFunc(void*) {
fdevent_loop();
}
-TEST(fdevent, invalid_fd) {
+TEST_F(FdeventTest, invalid_fd) {
pthread_t thread;
ASSERT_EQ(0, pthread_create(&thread, nullptr,
reinterpret_cast<void* (*)(void*)>(InvalidFdThreadFunc),