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.
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 \
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
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.
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)
#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 {
const uint32_t kWificondDeathTimeoutSeconds = 10;
const uint32_t kWificondStartTimeoutSeconds = 10;
+const char kWificondServiceName[] = "wificond";
+
bool WificondIsRunning() {
std::string output;
RunShellCommand("pgrep -c ^wificond$", &output);
return true;
}
+bool WificondIsDead() { return !WificondIsRunning(); }
+
bool WaitForTrue(std::function<bool()> condition, time_t timeout_seconds) {
time_t start_time_seconds = time(nullptr);
do {
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