OSDN Git Service

Merge "Keep watching file descriptor after callback is called."
authorTreeHugger Robot <treehugger-gerrit@google.com>
Tue, 14 Jun 2016 18:00:29 +0000 (18:00 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Tue, 14 Jun 2016 18:00:29 +0000 (18:00 +0000)
Android.mk
server.h
tests/integration/life_cycle_test.cpp

index 2af2756..ba47dde 100644 (file)
 LOCAL_PATH := $(call my-dir)
 
 wificond_cpp_flags := -std=c++11 -Wall -Werror -Wno-unused-parameter
-wificond_cpp_src := looper_backed_event_loop.cpp
-
-wificond_test_util_cpp_src := \
-    tests/shell_utils.cpp \
 
 ###
 ### wificond daemon.
@@ -27,15 +23,8 @@ include $(CLEAR_VARS)
 LOCAL_MODULE := wificond
 LOCAL_CPPFLAGS := $(wificond_cpp_flags)
 LOCAL_INIT_RC := wificond.rc
-LOCAL_AIDL_INCLUDES += $(LOCAL_PATH)/aidl
 LOCAL_SRC_FILES := \
-    aidl/android/net/wifi/IApInterface.aidl \
-    aidl/android/net/wifi/IChip.aidl \
-    aidl/android/net/wifi/IChipCallback.aidl \
-    aidl/android/net/wifi/IClientInterface.aidl \
-    aidl/android/net/wifi/IWificond.aidl \
-    main.cpp \
-    server.cpp
+    main.cpp
 LOCAL_SHARED_LIBRARIES := \
     libbinder \
     libbase \
@@ -50,24 +39,32 @@ include $(BUILD_EXECUTABLE)
 include $(CLEAR_VARS)
 LOCAL_MODULE := libwificond
 LOCAL_CPPFLAGS := $(wificond_cpp_flags)
-LOCAL_SRC_FILES := $(wificond_cpp_src)
+LOCAL_SRC_FILES := \
+    looper_backed_event_loop.cpp \
+    server.cpp
 LOCAL_SHARED_LIBRARIES := \
     libbase \
     libutils
+LOCAL_WHOLE_STATIC_LIBRARIES := \
+    libwificond_ipc
 include $(BUILD_STATIC_LIBRARY)
 
 ###
-### host version of the wificond static library (for use in tests)
+### wificond IPC interface library
 ###
 include $(CLEAR_VARS)
-LOCAL_MODULE := libwificond_host
+LOCAL_MODULE := libwificond_ipc
+LOCAL_AIDL_INCLUDES += $(LOCAL_PATH)/aidl
 LOCAL_CPPFLAGS := $(wificond_cpp_flags)
-LOCAL_SRC_FILES := $(wificond_cpp_src)
-LOCAL_STATIC_LIBRARIES := \
-    libbase \
-    libutils
-LOCAL_MODULE_HOST_OS := linux
-include $(BUILD_HOST_STATIC_LIBRARY)
+LOCAL_SRC_FILES := \
+    aidl/android/net/wifi/IApInterface.aidl \
+    aidl/android/net/wifi/IChip.aidl \
+    aidl/android/net/wifi/IChipCallback.aidl \
+    aidl/android/net/wifi/IClientInterface.aidl \
+    aidl/android/net/wifi/IWificond.aidl
+LOCAL_SHARED_LIBRARIES := \
+    libbinder
+include $(BUILD_STATIC_LIBRARY)
 
 ###
 ### test util library
@@ -75,44 +72,30 @@ include $(BUILD_HOST_STATIC_LIBRARY)
 include $(CLEAR_VARS)
 LOCAL_MODULE := libwificond_test_utils
 LOCAL_CPPFLAGS := $(wificond_cpp_flags)
-LOCAL_SRC_FILES := $(wificond_test_util_cpp_src)
+LOCAL_SRC_FILES := \
+    tests/shell_utils.cpp
 LOCAL_SHARED_LIBRARIES := \
     libbase
 include $(BUILD_STATIC_LIBRARY)
 
 ###
-### host version of test util library
-###
-include $(CLEAR_VARS)
-LOCAL_MODULE := libwificond_test_utils_host
-LOCAL_MODULE_HOST_OS := linux
-LOCAL_CPPFLAGS := $(wificond_cpp_flags)
-LOCAL_LDLIBS_linux := -lrt
-LOCAL_SRC_FILES := $(wificond_test_util_cpp_src)
-LOCAL_STATIC_LIBRARIES := \
-    libbase
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-###
-### wificond host unit tests.
+### wificond unit tests.
 ###
 include $(CLEAR_VARS)
 LOCAL_MODULE := wificond_unit_test
 LOCAL_CPPFLAGS := $(wificond_cpp_flags)
-LOCAL_LDLIBS_linux := -lrt
 LOCAL_SRC_FILES := \
     tests/main.cpp \
     tests/looper_backed_event_loop_unittest.cpp \
     tests/shell_unittest.cpp
 LOCAL_STATIC_LIBRARIES := \
-    libgmock_host \
-    libwificond_host \
-    libwificond_test_utils_host \
+    libgmock \
+    libwificond \
+    libwificond_test_utils \
     libbase \
     libutils \
     liblog
-LOCAL_MODULE_HOST_OS := linux
-include $(BUILD_HOST_NATIVE_TEST)
+include $(BUILD_NATIVE_TEST)
 
 ###
 ### wificond device integration tests.
@@ -124,7 +107,10 @@ LOCAL_SRC_FILES := \
     tests/main.cpp \
     tests/integration/life_cycle_test.cpp
 LOCAL_SHARED_LIBRARIES := \
-    libbase
+    libbase \
+    libbinder \
+    libutils
 LOCAL_STATIC_LIBRARIES := \
+    libwificond_ipc \
     libwificond_test_utils
 include $(BUILD_NATIVE_TEST)
index 94c10f3..2f9b1f7 100644 (file)
--- a/server.h
+++ b/server.h
  * limitations under the License.
  */
 
+#ifndef WIFICOND_SERVER_H_
+#define WIFICOND_SERVER_H_
+
+#include <android-base/macros.h>
+
 #include "android/net/wifi/BnWificond.h"
 
 namespace android {
@@ -21,8 +26,16 @@ namespace wificond {
 
 class Server : public android::net::wifi::BnWificond {
  public:
+  Server() = default;
+  ~Server() override = default;
+
   android::binder::Status GetChips(std::vector<sp<IBinder>>* chips);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(Server);
 };
 
 }  // namespace wificond
 }  // namespace android
+
+#endif  // WIFICOND_SERVER_H_
index c131135..b087f37 100644 (file)
 #include <ctime>
 
 #include <android-base/strings.h>
+#include <binder/IServiceManager.h>
+#include <utils/Errors.h>
+#include <utils/String16.h>
+#include <utils/StrongPointer.h>
 
+#include "android/net/wifi/IWificond.h"
 #include "tests/shell_utils.h"
 
+using android::String16;
 using android::base::Trim;
+using android::net::wifi::IWificond;
 using android::wificond::tests::integration::RunShellCommand;
 
 namespace android {
@@ -32,6 +39,8 @@ namespace {
 const uint32_t kWificondDeathTimeoutSeconds = 10;
 const uint32_t kWificondStartTimeoutSeconds = 10;
 
+const char kWificondServiceName[] = "wificond";
+
 bool WificondIsRunning() {
   std::string output;
   RunShellCommand("pgrep -c ^wificond$", &output);
@@ -42,6 +51,8 @@ bool WificondIsRunning() {
   return true;
 }
 
+bool WificondIsDead() { return !WificondIsRunning(); }
+
 bool WaitForTrue(std::function<bool()> condition, time_t timeout_seconds) {
   time_t start_time_seconds = time(nullptr);
   do {
@@ -53,20 +64,28 @@ bool WaitForTrue(std::function<bool()> condition, time_t timeout_seconds) {
   return false;
 }
 
+bool IsRegistered() {
+  sp<IWificond> service;
+  return getService(String16(kWificondServiceName), &service) == NO_ERROR;
+}
+
 }  // namespace
 
 
 TEST(LifeCycleTest, ProcessStartsUp) {
   // Request that wificond be stopped (regardless of its current state).
   RunShellCommand("stop wificond");
+  EXPECT_TRUE(WaitForTrue(WificondIsDead, kWificondDeathTimeoutSeconds));
 
-  // Confirm that wificond is stopped.
-  ASSERT_TRUE(WaitForTrue([]() { return !WificondIsRunning(); },
-                          kWificondDeathTimeoutSeconds));
+  // Confirm that the service manager has no binder for wificond.
+  EXPECT_FALSE(IsRegistered());
 
   // Start wificond.
   RunShellCommand("start wificond");
-  ASSERT_TRUE(WaitForTrue(WificondIsRunning, kWificondStartTimeoutSeconds));
+  EXPECT_TRUE(WaitForTrue(WificondIsRunning, kWificondStartTimeoutSeconds));
+
+  // wificond should eventually register with the service manager.
+  EXPECT_TRUE(WaitForTrue(IsRegistered, kWificondStartTimeoutSeconds));
 }
 
 }  // namespace wificond