From f3116b3d898be88ef7cc087cd7a402559b7e700c Mon Sep 17 00:00:00 2001 From: Christopher Wiley Date: Thu, 9 Jun 2016 16:42:49 -0700 Subject: [PATCH] Test that wificond claims its binder service Bug: 28867751 Test: Integration, unit tests continue to pass Change-Id: I6eb42fa25d46154d6c60dc25caa9e606806705f9 --- Android.mk | 5 ++++- tests/integration/life_cycle_test.cpp | 27 +++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Android.mk b/Android.mk index 3f0a1f0..ba47dde 100644 --- a/Android.mk +++ b/Android.mk @@ -107,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) diff --git a/tests/integration/life_cycle_test.cpp b/tests/integration/life_cycle_test.cpp index c131135..b087f37 100644 --- a/tests/integration/life_cycle_test.cpp +++ b/tests/integration/life_cycle_test.cpp @@ -19,10 +19,17 @@ #include #include +#include +#include +#include +#include +#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 condition, time_t timeout_seconds) { time_t start_time_seconds = time(nullptr); do { @@ -53,20 +64,28 @@ bool WaitForTrue(std::function condition, time_t timeout_seconds) { return false; } +bool IsRegistered() { + sp 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 -- 2.11.0