1/* 2 * Copyright (C) 2016, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef WIFICOND_TESTS_INTEGRATION_PROCESS_UTILS_H_ 18#define WIFICOND_TESTS_INTEGRATION_PROCESS_UTILS_H_ 19 20#include <time.h> 21 22#include <functional> 23 24#include <android-base/macros.h> 25#include <utils/StrongPointer.h> 26 27#include "android/net/wifi/IWificond.h" 28 29namespace android { 30namespace wificond { 31namespace tests { 32namespace integration { 33 34// Instantiate one of these and call EnterDevMode() to put wificond into 35// developer mode. wificond will be automatically restarted in normal 36// mode when the ScopedDevModeWificond intance goes out of scope: 37// 38// TEST(MyTest, TestCase) { 39// ScopedDevModeWificond dev_mode; 40// dev_mode.EnterDevMode(); 41// 42// // Code can assume that wificond is running in dev mode. 43// // wificond will be cleaned up when |dev_mode| is destroyed. 44// 45// } 46class ScopedDevModeWificond final { 47 public: 48 static const uint32_t kSystemServerDeathTimeoutSeconds; 49 static const uint32_t kSystemServerStartTimeoutSeconds; 50 static const uint32_t kWificondDeathTimeoutSeconds; 51 static const uint32_t kWificondStartTimeoutSeconds; 52 53 ScopedDevModeWificond() = default; 54 ~ScopedDevModeWificond(); 55 56 // You have to explicitly request that we enter dev mode. 57 // This makes avoids the nastiness of restarting a system process 58 // because you instantiated an object. 59 // ASSERTs that wificond starts in dev mode. 60 android::sp<android::net::wifi::IWificond> EnterDevModeOrDie(); 61 // Returns true iff wificond entered dev mode. 62 android::sp<android::net::wifi::IWificond> MaybeEnterDevMode(); 63 64 // This will be called for you in the destructor, but you can do it yourself 65 // if you prefer. 66 void ExitDevMode(); 67 68 private: 69 bool in_dev_mode_ = false; 70 71 DISALLOW_COPY_AND_ASSIGN(ScopedDevModeWificond); 72}; // ScopedDevModeWificond 73 74// Blocks until either |condition| returns true, or |timeout_seconds| passes. 75// Returns true iff |condition| returned true. 76bool WaitForTrue(std::function<bool()> condition, time_t timeout_seconds); 77 78// Returns true iff a service is registered as |service_name| with the Binder 79// service manager. 80bool IsBinderServiceRegistered(const char* service_name); 81 82// Returns true iff the system_server process is running on the system. 83bool SystemServerIsRunning(); 84 85// Convenient alias for !SystemServerIsRunning 86bool SystemServerIsDead(); 87 88// Returns true iff the wificond process is running on the system. 89bool WificondIsRunning(); 90 91// Convenient alias for !WificondIsRunning 92bool WificondIsDead(); 93 94// Set the system property that controls whether wificond starts up in 95// developer mode. See wificond's main() for what this entails. 96bool WificondSetDevMode(bool is_on); 97 98// Returns true iff the hostapd process is running on the system. 99bool HostapdIsRunning(); 100 101// Convenient alias for !HostapdIsRunning 102bool HostapdIsDead(); 103 104// Returns true iff the wpa_supplicant process is running on the system. 105bool SupplicantIsRunning(); 106 107// Convenient alias for !SupplicantIsRunning 108bool SupplicantIsDead(); 109 110} // namespace integration 111} // namespace tests 112} // namespace android 113} // namespace wificond 114 115#endif // WIFICOND_TESTS_INTEGRATION_PROCESS_UTILS_H_ 116